A curated, opinionated checklist for spinning up a fresh macOS machine in 2026. This is the actual setup I run on my daily driver, not a theoretical list.
Goal: Be fully productive (coding, design, comms) in ~30 minutes with repeatable commands and sensible defaults.
What changed since last year: the terminal is now the primary interface for AI, not the editor. Half of this guide is about coding agents that didn't exist eighteen months ago. Docker Desktop is gone, replaced by OrbStack. Shottr gave way to CleanShot X. And Node moved to 24 LTS.
System & UX Setup
1. Update macOS
Ensures the latest security patches, Xcode SDKs, and firmware. macOS 26 (Tahoe) is the current release.
- Open System Settings → General → Software Update.
- Install any pending updates, then reboot before continuing.
2. Install Homebrew
The package manager for everything that isn't on the Mac App Store.
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"eval "$(/opt/homebrew/bin/brew shellenv)" # add to ~/.zprofile3. System Apps
Core utilities that shape the desktop experience.
brew install --cask ghostty raycast cleanshot rectangle maccy monitorcontrol- Ghostty — minimal GPU-accelerated terminal, the fastest text rendering on macOS
- Raycast — Spotlight replacement with extensions, clipboard history, and window management
- CleanShot X — screenshot and screen recording with instant markup, scrolling capture, and pinned overlays. Replaced Shottr for me because the recording and annotation tools are better
- Rectangle — window manager for quick ⌥⌘→ tiling, multi-display aware
- Maccy — clipboard manager with plain-text history synced across apps
- MonitorControl — brightness and volume for external displays from the keyboard
Ghostty config lives at ~/.config/ghostty/config (or ~/Library/Application Support/com.mitchellh.ghostty/config). Note that it is a plain key/value file, not TOML:
font-family=Menlotheme=Flexoki Darkfont-size=14window-padding-balance=truewindow-padding-x=8window-padding-y=8
keybind = cmd+left=goto_split:leftkeybind = cmd+down=goto_split:downkeybind = cmd+up=goto_split:upkeybind = cmd+right=goto_split:rightkeybind = cmd+k=unbindkeybind = global:cmd+grave_accent=toggle_quick_terminal
quick-terminal-position = rightThe cmd+grave_accent quick terminal is the single best keybinding here — a global drop-down terminal from anywhere in the OS. cmd+k is unbound so it passes through to whatever agent is running in the terminal.
4. Browsers
You need more than one for testing, and each has a job.
brew install --cask google-chrome chromium firefox@developer-edition thebrowsercompany-dia- Chrome — default dev target, DevTools, Lighthouse
- Chromium — clean profile for testing without extensions or a signed-in account
- Firefox Developer Edition — catches layout bugs Chrome forgives
- Dia — AI-native browser, worth keeping around for research
- Safari — already installed, and you must test in it
Development Environment
5. Developer Tooling
xcode-select --installbrew install gh wget neovim ripgrep fzf zoxide btop tmux tree nmap ffmpeg yt-dlp- gh — GitHub CLI for PRs, issues, and git credential auth
- ripgrep — the search tool every coding agent shells out to; install it even if you never type
rg - fzf — fuzzy finder for shell history and file pickers
- zoxide —
cdthat learns your habits - btop — resource monitor, useful when a build or a local model eats the machine
- tmux — persistent sessions, essential once you run long agent jobs
- neovim — for quick edits over SSH and in tmux panes
Note that git comes from the Xcode Command Line Tools, so you don't need the Homebrew formula.
Platform CLIs, install the ones you actually deploy to:
brew install supabase/tap/supabase stripe/stripe-cli/stripe railway flyctlnpm i -g vercel wrangler turbo6. Node, pnpm, Bun, Deno
Node 24 is the current LTS.
brew install node nvm # nvm for per-project version pinningnpm install -g pnpm@latest-10brew install oven-sh/bun/bunbrew install deno- pnpm 10 — my default package manager for app work
- Bun 1.3 — scripts, one-off tooling, and anything where install speed matters most
- Deno 2 — sandboxed scripts and edge-shaped work
7. Editors
brew install --cask cursor zed visual-studio-code- Cursor — primary editor, the AI features are still the most complete
- Zed — fastest editor on the machine, with a genuinely good built-in agent panel. What I open for a single file
- VS Code — the fallback that always works, and the one with every extension
My Zed config worth stealing (~/.config/zed/settings.json):
{ "buffer_font_family": "Menlo", "buffer_font_size": 13, "autosave": "on_focus_change", "format_on_save": "on", "agent": { "dock": "right", "default_profile": "write" }, "project_panel": { "dock": "left" }}8. Oh My Zsh (+ Plugins)
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
git clone https://github.com/zsh-users/zsh-autosuggestions \ ~/.oh-my-zsh/custom/plugins/zsh-autosuggestionsgit clone https://github.com/zsh-users/zsh-syntax-highlighting \ ~/.oh-my-zsh/custom/plugins/zsh-syntax-highlighting.zshrc snippet:
ZSH_THEME="robbyrussell"plugins=(git zsh-autosuggestions zsh-syntax-highlighting)One warning for 2026: every agent installer wants to append a PATH line to your .zshrc. Mine has picked up a dozen of them. Read what you paste, keep secrets in a .env or the keychain rather than exported inline, and audit the file every few months.
9. Handy Aliases
# pnpmalias p='pnpm'alias pb='pnpm build'alias pd='pnpm dev'
# Bunalias b='bun'alias bi='bun install'alias bd='bun dev'alias bu='bun upgrade'
# Gitalias gs='git send'
# Claude Code, no interruptionsalias lfg='claude --dangerously-skip-permissions'That last one is a loaded gun. It skips every permission prompt, so only point it at a repo you can throw away or a worktree you're willing to lose.
10. Global Git Config
[alias] send = "!f() { git add . && git commit -m \"${1:-wip}\"; }; f"[user] name = Bridger Tower email = bridgertower@gmail.com[init] defaultBranch = main[core] excludesfile = ~/.gitignore_global[credential "https://github.com"] helper = helper = !/opt/homebrew/bin/gh auth git-credentialgit send used to push too. I dropped the push after one too many agent-authored commits landed on a remote before I'd read them.
11. Neovim
git clone https://github.com/nvim-lua/kickstart.nvim.git \ "${XDG_CONFIG_HOME:-$HOME/.config}"/nvimAI Coding Agents
This is the section that didn't exist in the 2025 guide, and it's now the part I'd set up first. The terminal agents matter more than the editor.
12. Terminal Agents
# Claude Code — my defaultcurl -fsSL https://claude.ai/install.sh | bash
# OpenAI Codexnpm i -g @openai/codex
# OpenCode — open source, model agnosticbrew install anomalyco/tap/opencode
# Cursor Agent — Cursor's model in the terminalcurl https://cursor.com/install -fsS | bash- Claude Code — the one I live in. Skills, subagents, MCP servers, and hooks make it the most configurable
- Codex — strong second opinion, especially on long refactors
- OpenCode — model agnostic, good when you want to point an agent at a local or cheap model
- Cursor Agent — the same model as the editor, useful when you're already in a Cursor project
Also worth trying: Factory's droid and Grok CLI. Running two agents against the same repo in separate git worktrees is the single biggest workflow change of the last year.
13. Desktop AI Apps
brew install --cask claude chatgpt granola wispr-flow macwhisper- Claude and ChatGPT — desktop apps for the non-coding half of the work
- Granola — meeting notes that actually get used, because it transcribes in the background and never joins the call
- Wispr Flow — voice-to-text everywhere in the OS. Talking to an agent is faster than typing at it
- MacWhisper — local transcription for files you don't want going to a server
14. Local Models
brew install ollamabrew install --cask lm-studio- Ollama — CLI and API for local models, good for scripting and offline work
- LM Studio — GUI for browsing, downloading, and testing models before you commit to one
Point OpenCode at Ollama and you have a fully local coding agent, which is genuinely useful on a plane or against a codebase you can't send anywhere.
Productivity & Collaboration
15. Messaging
brew install --cask slack discord whatsapp telegram microsoft-teams zoom16. Productivity Apps
brew install --cask notion notion-calendar obsidian todoist-app craft spotify- Notion — team wiki and project tracking
- Notion Calendar — the best calendar client on macOS, and it's free
- Obsidian — local markdown vault, which doubles as a context directory agents can read
- Todoist — tasks, with a CLI (
brew install todoist) if you want to capture from the terminal - Craft — documents that need to look good
17. Screen Recording & Demos
brew install --cask screen-studio obs- Screen Studio — automatic zoom and smooth cursor motion. Every product demo I ship comes out of this
- OBS — streaming and multi-source recording when you need real control
18. Design Apps
brew install --cask figma adobe-creative-cloud affinity eagle imageoptim- Figma — where the work happens
- Affinity — the whole suite is free now, and it's a real Adobe alternative
- Eagle — visual asset and reference library, better than a folder of screenshots
- ImageOptim — drag images in before they hit a repo
19. Infrastructure & Data
brew install --cask orbstack tableplus proxyman tailscale-appbrew install postgresql@15- OrbStack — Docker and Linux VMs, dramatically faster and lighter than Docker Desktop. I stopped opening Docker Desktop entirely
- TablePlus — database GUI for Postgres, MySQL, and SQLite
- Proxyman — HTTP debugging, essential for webhook and API work
- Tailscale — private network across your machines, plus easy access to a home server
TablePlus, Proxyman, and a handful of others come with Setapp if you'd rather pay one subscription than five.
Other apps to install from the Mac App Store
- Bear — markdown notes
- Things 3 — if you prefer it to Todoist
- DaVinci Resolve — video editing
macOS Customization
Automated macOS Defaults Script
Use the following script to set macOS defaults for a cleaner and more developer-friendly experience.
Run each command individually, or save them in a shell script (e.g., macos-defaults.sh) and execute it with bash macos-defaults.sh.
# Show all filename extensions in Finderdefaults write NSGlobalDomain AppleShowAllExtensions -bool true
# Set Finder view to Column by defaultdefaults write com.apple.finder FXPreferredViewStyle -string "clmv"
# Show Path Bar in Finderdefaults write com.apple.finder ShowPathbar -bool true
# Set fast key repeat ratedefaults write NSGlobalDomain KeyRepeat -int 1defaults write NSGlobalDomain InitialKeyRepeat -int 10
# Disable auto-correctdefaults write NSGlobalDomain NSAutomaticSpellingCorrectionEnabled -bool false
# Always expand save and print panels by defaultdefaults write NSGlobalDomain NSNavPanelExpandedStateForSaveMode -bool truedefaults write NSGlobalDomain PMPrintingExpandedStateForPrint -bool true
# Prevent Photos from opening automatically when devices are plugged indefaults -currentHost write com.apple.ImageCapture disableHotPlug -bool true
# Set screenshot location to ~/Desktop/Screenshotsmkdir -p ~/Desktop/Screenshotsdefaults write com.apple.screencapture location ~/Desktop/Screenshots
# Save screenshots in PNG formatdefaults write com.apple.screencapture type -string "png"
# Copy screenshots to the clipboard as well as saving themdefaults write com.apple.screencapture target -string "clipboard"
# Restart Finder to apply changeskillall FinderThese defaults help streamline Finder, boost typing responsiveness, and reduce distractions. The KeyRepeat -int 1 setting is the one you'll notice most — it's faster than the System Settings slider allows.
The Short Version
If you only install six things: Ghostty, Raycast, Claude Code, Cursor, CleanShot X, and OrbStack. Everything else is a preference. Those six changed how the machine feels.