How I Set Up a New MacBook Pro Dev Environment
Tags: productivity, beginners
Published: 2020-01-08 15:10:52

🎆 New year!
💼 New job!
💻 New laptop!

I'm so excited for this brand new decade. It feels like an opportunity for a fresh start.

I had been working at the same company for years. So, I'm eager to start my new job and work with a distributed team of talented people at [Enbala Power Networks](https://www.enbala.com/). It's a perfect mix of technology I love ([Elixir](https://elixir-lang.org/) and [Elm](https://elm-lang.org/)), fascinating work, and people I admire.

## 💻 Setting up a New Laptop

The timing worked out well. Apple recently released the new [16-inch MacBook Pro](https://www.apple.com/macbook-pro-16/) models, and I had been dying for a new setup.

**I figured I would take this opportunity to write down a checklist of applications I use and preferences I have for setting up a new laptop.**

Some of my settings are eccentric (like having a plain black background instead of a fancy photograph). But my hope for this post is that you'll at least take away one or two helpful ideas that might get you unstuck from a rut.

## 🙉 Creating a Distraction-free Environment

**Almost all my preferences are all about limiting distractions and enabling focus.** I've always been prone to distraction. So, creating an environment where I can stay focused on a single task for an extended period  is critical.

**Otherwise, I make tiny amounts of  progress in many directions without finishing anything.** The result is that all the time and energy and effort I put in is  wasted.

### 🧹 Cleaning up the Dock

Out of the box, macOS comes with _so_ many applications in the Dock. But it's more efficient to use the native Spotlight search (or [Alfred](https://www.alfredapp.com/)) to open applications with the keyboard. For example, you can type `Command + Space + Sys` and then press `Enter` to open the System Preferences.

So, I opt for a minimalist Dock area with only the following:

- Firefox Developer Edition
- Visual Studio Code
- Downloads Folder

![Minimal Dock](https://thepracticaldev.s3.amazonaws.com/i/lei8j00ur8v5l0kvfuu3.png)

I also like to hide the Dock when I'm not using it, and I disable the option to remember recent applications.

![Dock Settings](https://thepracticaldev.s3.amazonaws.com/i/d5s5s9ilujglpvb0g7bc.png)

### ⚡️ Speeding up the Trackpad, Mouse, and Keyboard

One of the first things I like to do for a new laptop is comb through the System Preferences. There are some default settings that slow you down. For example, the default Trackpad speed is slow, which can make it tough to navigate the cursor around, especially on large displays.

```
Command + Space ➡️ Trackpad ➡️ Tracking Speed ➡️ Fast
```

![Trackpad Settings](https://thepracticaldev.s3.amazonaws.com/i/l3kgwenul5om39eo1u6r.png)

This can take some getting used to if you're accustomed to the slower setting. But it's worth it to adjust, because it's way faster to navigate with the faster setting.

🖱 Next, you can do the same for the mouse: 

```
Command + Space ➡️ Mouse ➡️ Tracking Speed ➡️ Fast
```

⌨️ Similarly, you can speed up your Keyboard settings with the following:

```
Command + Space ➡️ Keyboard ➡️ Key Repeat ➡️ Fast
Command + Space ➡️ Keyboard ➡️ Delay Until Repeat ➡️ Fast
```

**This might seem like a silly place to start, but the idea is to find small changes we can make that add up to a lot over time.**

### 🖤 Background and Menu Bar

This setting might be a little odd, but I use a plain black color for my background. The macOS background pictures are beautiful, but this is the least distracting option for me:

```
Command + Space ➡️ Desktop & Screen Saver ➡️ Apple ➡️ Colors ➡️ Black
```

![Desktop Background](https://thepracticaldev.s3.amazonaws.com/i/e8psvx8l3fzusbvq2luy.png)

There is also an application called [Bartender](https://www.macbartender.com/) I love for cleaning up the menu bar area. After installing several applications, the menu bar area tends to look cluttered. Bartender allows you to show or hide menu bar applications, and I tend to prefer hiding everything except the date and time.

![Uncluttered Menu Bar](https://thepracticaldev.s3.amazonaws.com/i/5yicp4to0wp3qvniocte.png)

### 🖥 Adding Virtual Desktops

I also like to set up virtual desktop spaces to create separation between applications. This way, I can have my IDE running in a separate space from my browser.

To set this up, you can do a three finger swipe upward on the Trackpad to enter _Mission Control_ mode. From here, you can click the ➕ icon at the top right to create new virtual desktop spaces.

![Virtual Desktop Spaces with Mission Control](https://thepracticaldev.s3.amazonaws.com/i/qqjqpgry9adc33xpsrjr.png)

This allows you to keep dedicated spaces for things like your IDE, browser, and task manager. And you have a couple options for switching between these spaces:

- use `Command + Tab` to switch between open applications.
- use a three finger swipe left or right to switch to the next virtual space. You can also use `Control + ⬅️` or `Control + ➡️`.
- use a three finger swipe upward to open Mission Control. You can also use `Control + ⬆️`.
- use `Control + N` to switch to a particular space based on the number (`N`). This option requires enabling keyboard shortcuts with the following:

```
Command + Space ➡️ Keyboard ➡️ Shortcuts ➡️ Enable Switch to Desktop N
```

![Mission Control Keyboard Shortcuts](https://thepracticaldev.s3.amazonaws.com/i/h0svrxwgyh6ivraosfju.png)

If you plan to dedicate spaces for a particular use, you can also disable the option to _"Automatically rearrange Spaces based on most recent use."_

![Mission Control Settings](https://thepracticaldev.s3.amazonaws.com/i/ayvpppzmjtjlmxsggfe7.png)

### 🔕 Limiting Notifications

macOS comes with a Do Not Disturb mode that can help to reduce the number of interruptions. One way to turn this on is to hold down the `Option` key on your keyboard and click the Notification Center icon in the menu bar.

You can also set a time range for when to enable Do Not Disturb mode:

```
Command + Space ➡️ Notifications ➡️ Turn on Do Not Disturb
```

📱 It's not a bad idea to check your phone too for apps that are bombarding you with notifications. If you're using an iOS device, you can check the following:

```
Settings ➡️ Screen Time ➡️ See All Activity ➡️ Notifications
```

Disabling unneeded notifications from even a couple of apps can have a big impact and cut down on distractions throughout your day. 😌

## Recommended Applications

![Applications](https://thepracticaldev.s3.amazonaws.com/i/snrd9zr8katadog4iivp.png)

### General

- 🦊 [**Firefox Developer Edition**](https://www.mozilla.org/en-US/firefox/developer/) for web browsing.
- ✅ [**Things**](https://culturedcode.com/things/) for a well-designed project and task manager.

### Utilities

- 🔒 [**1Password**](https://1password.com/) for password management.
- ⌨️ [**Alfred**](https://www.alfredapp.com/) for keyboard-based productivity and automation.
- 🍻 [**Bartender**](https://www.macbartender.com/) for de-cluttering the macOS menu bar.
- 📦 [**Dropbox**](https://www.dropbox.com/basic) for cloud file storage across devices.
- 🦊 [**Gifox**](https://gifox.io/) for a well-designed menu bar application to quickly record animated gifs.
- 🔍 [**Moom**](https://manytricks.com/moom/) for moving and arranging your windows with `Option + Tab` keyboard shortcuts.
- ⏱ [**The Clock**](https://www.seense.com/the_clock/) for replacing the default date and time in the menu bar. This is particularly helpful if you're on a distributed team where your teammates are in different time zones ([demo](https://twitter.com/bijanbwb/status/1208043476455247872)).

### Web Applications

- ✍️ [**750words**](https://750words.com/) for a simple, daily writing habit.
- 💌 [**Gmail**](https://www.google.com/gmail/about/) for email.
- 🗓 [**Google Calendar**](https://www.google.com/calendar/about/) for shared calendars.
- 📝 [**Hemingway App**](http://www.hemingwayapp.com/) for quick recommendations on how to simplify your writing.
- 💰 [**YNAB**](https://www.youneedabudget.com/) for budgeting.
- 🎼 [**Spotify**](https://www.spotify.com/) for music.

## 💻 Development Environment

- 🐙 [**GitHub**](https://github.com/) for code repositories.
  - Set up `ssh` access.
- 🆚 [**VSCode**](https://code.visualstudio.com/) for my coding environment.
  - Set up ability to launch from command line with `code`.
  - Disable "Scroll Beyond Last Line" option.
  - Install [Firacode](https://github.com/tonsky/FiraCode) for a font with fancy ligatures.
  - Set up [LiveShare](https://marketplace.visualstudio.com/items?itemName=MS-vsliveshare.vsliveshare) for pair programming.
- 🎛 [**asdf**](https://github.com/asdf-vm/asdf) for installing and managing multiple versions of programming languages.
  - Erlang
  - Elixir
  - Ruby
  - Node
  - Elm
- 👨‍💻 [**iTerm**](https://iterm2.com/)
  - [homebrew](https://brew.sh/)
  - [oh-my-zsh](https://ohmyz.sh/)
  - dotfiles
  - aliases
- 🐘 [**PostgreSQL**](https://postgresapp.com/)
- 🏃‍♂️ [**Dash**](https://kapeli.com/dash) for quick access to documentation.

## 🕹 Gamedev

- [PICO-8](https://www.lexaloffle.com/pico-8.php) for minimalist, retro game development.
- [Unity](https://unity.com/) for a fancy, batteries-included game development environment.
- [Asesprite](https://www.aseprite.org/) for pixel art.

## 🤖 Automation

Even if you only have to set up a new laptop every few years, it's worth investing some time in automation. If you're interested in automating your laptop setup process, consider the following:

- Create a `dotfiles` repo on GitHub to save your favorite configuration files.
- Use [Brewfiles](https://github.com/Homebrew/homebrew-bundle) for installing applications and common system dependencies.

## 😌 Next?

You can probably tell I love to nerd out about all these little applications and preferences. If you have any tips and tricks or recommendations, reach out to me on Twitter ([@bijanbwb](https://twitter.com/bijanbwb)) and I'd love to hear from you!

I love when people create a "`/uses`" page (like [this one from Wes Bos](https://wesbos.com/uses/)) to list the applications and the physical gear they use to be productive. I'm considering writing a future post about how I organize my home office, so let me know if there is something you'd like to see!