My MacBook Pro M5 Setup: A Developer's Configuration Guide
7th May 2026

A developer's opinionated guide to setting up a MacBook Pro from scratch
A clean, opinionated setup guide for developers — and a reference for future me.
A New Machine is a Fresh Start
Every developer has their own way of working. Over the years I’ve refined mine — the tools I reach for, the settings that keep me in flow, and the small tweaks that make a big difference. When I set up a new machine, I don’t want to spend days rediscovering what I already figured out.
My Old Setup Didn’t Follow Me Automatically
When I got my MacBook Pro M5, I wanted to get back to full productivity as fast as possible without cutting corners. I also realized I’d never written any of this down in a way that was easy to follow — my old notes were scattered across Evernote, Gists, and memory.
I Documented Everything, With the Why
Here’s exactly how I set up my machine — the steps, the tools I chose, and why I chose them.
macOS Updates
Apply all updates:
Apple icon > System Settings > Software Update — apply everything before touching anything else.
macOS Settings
Appearance
System Settings > Appearance
- Appearance > Auto
- Show scroll bars > Always
Menu Bar
System Settings > Menu Bar
- Check
Bluetooth
Notifications
System Settings > Notifications
- Show previews > Never
- Application notifications > Turn off all
Privacy & Security
System Settings > Privacy & Security
Screen & System Audio Recording for >
- Google Chrome
- Zoom
- TechSmith Capture
Keyboard
System Settings > Keyboard
Text Input > Edit
- Capitalize words automatically > Off
- Double quotes >
"abc" - Single quotes >
'abc'
Trackpad
System Settings > Trackpad
- Tap to click > Tap with one finger
- Look up & data detectors > Off
- Click > Lightest
Finder
Finder > Settings > General >
- Check Hard disks
- New Finder windows show > Macintosh HD
Advanced >
- Show all filename extensions
- Remove items from the Trash after 30 days
Dock
- Remove most of the applications from Dock
- Automatically hide and show the Dock
- Show suggested and recent apps in Dock > Off
- Show indicators for open applications > On
- Click and drag the Applications folder in Finder to the right side of the Dock
Add to Dock:
- Evernote
- Google Chrome
- iTerm (iTerm2)
- Visual Studio Code
Prevent Power-On When Opening the Lid
This command will disable power-on when opening the lid
sudo nvram BootPreference=%00
Currently there is no way to disable power-on when any key is pressed
Command Line Tasks
Install Command Line Tools for Xcode
Open the command line and run the following line:
xcode-select --install
Install Homebrew
Homebrew is the backbone of my Mac setup — almost everything gets installed through it.
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
Important: Be sure to follow any commands after the install Run these two commands in your terminal to add Homebrew to your PATH: More info: Homebrew Installation
Install core apps in one command:
brew install --cask \
affinity \
evernote \
figma \
firefox \
google-chrome \
iterm2 \
local \
rectangle \
spotify \
visual-studio-code \
zoom
Note: Applications can also be installed one-at-a-time using this format:
brew install --cask rectangle
Other apps to install as needed:
brew install wp-cli
brew install macos-trash
brew install --cask adobe-creative-cloud
brew install --cask discord
brew install --cask slack
A Note on Affinity vs. Adobe
I use the Affinity Suite (Designer, Photo, Publisher) as my primary design tools. They’ve never slowed me down, and I reach for Adobe Creative Cloud only when a project specifically requires it. Both are available via Homebrew.
Other Applications
- Amphetamine — App Store (keeps my Mac awake during deploys, presentations, etc.)
- Dropbox — dropbox.com/install
- Toggl Desktop — App Store (time tracking)
Screenshots
I like my screenshots organized and named cleanly. These terminal commands set that up:
Change screenshot destination: This will create a folder called “Screenshots” in your home directory
defaults write com.apple.screencapture location ~/Screenshots
Remove the default filename:
defaults write com.apple.screencapture name ""
Change screenshot format to JPG:
defaults write com.apple.screencapture type jpg
More info: How to change screenshot location on Mac using Terminal
Terminal
I use iTerm2 over the default Terminal for its customization options.
Install iTerm2:
brew install --cask iterm2
Close the default Terminal app and open iTerm from the Applications folder
More info: iTerm2
iTerm2 Settings I change:
- General > Window: Uncheck Native full screen windows
- Appearance > Hide scrollbars
- Appearance > Unselect Show tab bar in fullscreen
- Appearance > Dim inactive split panes + Dim background windows
- Profiles > Window: Transparency 0, Style: Normal
Install Oh My Zsh:
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
Cobalt2 Theme
I’ve been using Wes Bos’ Cobalt2 theme for years. It’s easy on the eyes and makes the terminal feel like a place I want to spend time.
- Download files from Wes Bos’ GitHub
- Drop
cobalt2.zsh-themeinto~/.oh-my-zsh/themes/ - Open
~/.zshrcand set:ZSH_THEME="cobalt2" - Install Powerline fonts:
git clone https://github.com/powerline/fonts
cd fonts
./install.sh
- In iTerm2: Preferences > Profiles > Colors > Color Presets > Import the Cobalt2 file
- Preferences > Profiles > Text > Set font to your installed Powerline font
VS Code
brew install --cask visual-studio-code
Settings I configure:
- Set spaces over tabs, tab size 2
- Enable Format on Save
- Enable Word Wrap:
boundedat 80 columns - Disable Compact Folders
- Enable Wrapped Tabs
My user settings JSON:
{
"explorer.compactFolders": false,
"editor.cursorWidth": 2,
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true,
"editor.formatOnPaste": true,
"editor.insertSpaces": true,
"editor.tabSize": 2,
"editor.wordWrap": "bounded",
"editor.wordWrapColumn": 80,
"prettier.semi": false,
"svelte.enable-ts-plugin": true,
"indentRainbow.colors": [
"rgba(247, 37, 133,0.15)",
"rgba(181, 23, 158,0.15)",
"rgba(114, 9, 183, 0.15)",
"rgba(86, 11, 173,0.15)",
"rgba(72, 12, 168,0.15)",
"rgba(58, 12, 163,0.15)",
"rgba(63, 55, 201,0.15)",
"rgba(63, 55, 201,0.1)",
"rgba(63, 55, 201,0.05)",
"rgba(63, 55, 201,0.025)"
],
"workbench.editorAssociations": {
"*.svg": "default"
}
}
VS Code Extensions
Always install:
- Astro — Language support for Astro
- Auto Rename Tag — Auto rename paired HTML/XML tags
- Code Spell Checker — Catches typos in code and comments
- Color Highlight — Visualizes color values inline
- ESLint — JavaScript linting
- GitHub Copilot Chat — AI-assisted coding
- Highlight Matching Tag — Makes tag pairs easy to spot
- indent-rainbow — Color-coded indentation levels
- MDX — Language support for MDX
- Prettier — Code formatting (set as default formatter)
- Pretty TypeScript Errors — Makes TS errors actually readable
- Svelte for VS Code — Svelte language support
Install as needed:
- EJS language support
- EJS Snippets
- ES7+ React/Redux/React-Native snippets
- Live Server
- Lorem ipsum
- Thunder Client — Lightweight REST API client
Node: Install via nvm
I always install Node through nvm rather than globally — it makes switching versions between projects seamless.
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
Auto-switch Node versions based on .nvmrc — add this to your ~/.zshrc:
autoload -U add-zsh-hook
load-nvmrc() {
local nvmrc_path
nvmrc_path="$(nvm_find_nvmrc)"
if [ -n "$nvmrc_path" ]; then
local nvmrc_node_version
nvmrc_node_version=$(nvm version "$(cat "${nvmrc_path}")")
if [ "$nvmrc_node_version" = "N/A" ]; then
nvm install
elif [ "$nvmrc_node_version" != "$(nvm version)" ]; then
nvm use
fi
elif [ -n "$(PWD=$OLDPWD nvm_find_nvmrc)" ] && [ "$(nvm version)" != "$(nvm version default)" ]; then
echo "Reverting to nvm default version"
nvm use default
fi
}
add-zsh-hook chpwd load-nvmrc
load-nvmrc
SSH Key
Follow GitHub’s official guides:
Make VS Code Your Git Editor
git config --global core.editor "code --wait"
A Setup That Gets Out of My Way
The goal of all of this isn’t complexity — it’s the opposite. Every setting here exists so that my tools disappear and I can focus on building. Whether you’re setting up your first Mac or your fifth, I hope this saves you a few hours of rediscovery.
The full Gist is also available on GitHub if you want a raw reference version.