skip to content
walterra.dev

macOS 2026 web dev setup

/ 4 min read

Table of Contents

An updated setup guide for 2026, reflecting the latest best practices and tools. This builds on my previous 2025 setup with notable changes highlighted. I’m about to set up a 2022 Mac Studio M1 Max 32GB as a dev server so I thought I’d update the reference.

What’s changed since 2025

Key updates in this revision:

  • Terminal: Now using Ghostty with native panels instead of iTerm2 with tmux. I couldn’t get bothered anymore to debug keyboard bindings and esp. mouse selections in tmux.
  • AI coding: I started using Claude Code CLI but switched to pi-coding-agent in late 2025.

system updates & package manager

Terminal window
# Update macOS to the latest version through System Settings
# Install Xcode command line tools
xcode-select --install
# Install Homebrew (package manager)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
eval "$(/opt/homebrew/bin/brew shellenv zsh)"
brew update

apps

terminal … I switched to Ghostty

Terminal window
brew install --cask ghostty

Ghostty config (~/.config/ghostty/config):

Terminal window
font-family = "Hack Nerd Font"
theme = "GitHub Dark"
background-opacity = 0.95
macos-titlebar-style = transparent
# Supports Kitty Graphics Protocol for inline images

Terminal tools

Terminal window
brew install \
wget \
git \
eza \
graphicsmagick \
commitizen \
cmatrix \
vips \
htop \
ruby \
rbenv \
ffmpeg

Note: eza replaces the unmaintained exa as the modern ls replacement:

Terminal window
# Add aliases to .zshrc
alias ls="eza"
alias ll="eza -l"
alias la="eza -la"
alias lt="eza --tree"

shell setup

Terminal window
# Install Oh My Zsh for better terminal experience
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
# Update Oh My Zsh:
omz update
# Install Starship prompt (fast, cross-shell)
brew install starship
# Add to end of ~/.zshrc
echo 'eval "$(starship init zsh)"' >> ~/.zshrc
# Install Hack Nerd Font for icons
brew install font-hack-nerd-font

Oh My Zsh Plugins

zsh-autosuggestions

Terminal window
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions

zsh-syntax-highlighting

Terminal window
brew install zsh-syntax-highlighting
# Add to end of .zshrc:
source /opt/homebrew/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh

Add plugins to ~/.zshrc:

Terminal window
plugins=(
git
zsh-autosuggestions
)

git

Terminal window
brew install git
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
git config --global init.defaultBranch main
# Improved git log
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
# Generate SSH key for GitHub
ssh-keygen -t ed25519 -C "your.email@example.com"

nodejs

Terminal window
brew install nvm
# Add to .zshrc
echo 'source $(brew --prefix nvm)/nvm.sh' >> ~/.zshrc
nvm install --lts

Package managers

Terminal window
# pnpm is my preferred package manager
brew install pnpm
# yarn if needed
brew install yarn

development tools

Terminal window
brew install --cask visual-studio-code
brew install --cask postman
brew install --cask docker
brew install --cask google-chrome
brew install --cask firefox

agentic coding

The AI coding landscape has evolved significantly. I use a combination of tools depending on the task.

pi-coding-agent (primary)

pi-coding-agent by Mario Zechner is my daily driver for agentic coding. It’s a terminal-based coding agent with multi-model support, mid-session model switching, and a minimal, opinionated design.

Installation:

Terminal window
npm install -g @mariozechner/pi-coding-agent

API Keys Setup:

Create ~/.pi/agent/auth.json:

{
"anthropic": { "type": "api_key", "key": "sk-ant-..." },
"openai": { "type": "api_key", "key": "sk-..." },
"google": { "type": "api_key", "key": "..." }
}

Or use environment variables: ANTHROPIC_API_KEY, OPENAI_API_KEY, GEMINI_API_KEY.

OAuth for subscriptions:

Terminal window
pi /login # Authenticate with Claude Pro/Max, GitHub Copilot, or Google Gemini CLI

Terminal Setup (Ghostty):

Add to ~/.config/ghostty/config:

Terminal window
keybind = alt+backspace=text:\x1b\x7f
keybind = shift+enter=text:\n

Quick Start:

Terminal window
export ANTHROPIC_API_KEY=sk-ant-...
pi

Key Features:

  • /model - switch models mid-session
  • /tree - navigate session history, branch conversations
  • /compact - summarize context when running long
  • @filename - fuzzy-search and include files
  • !command - run shell commands and add output to context
  • Ctrl+P - cycle through models
  • Skills system for specialized workflows (web search, browser automation, etc.)

Project Context:

Create AGENTS.md in your project root with instructions, conventions, and common commands. Pi loads these automatically.

VS Code extensions

tmux

I use Ghostty’s panels these days but tmux for subagent orchestration.

Terminal window
brew install tmux
# Install tmux plugin manager
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm

Config file ~/.tmux.conf:

Terminal window
unbind C-b
set-option -g prefix C-a
bind C-a send-prefix
set-option -g mouse on
# Plugins
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-resurrect'
# Initialize plugin manager (keep at bottom)
run '~/.tmux/plugins/tpm/tpm'

tmux commands:

  • New session: tmux new-session -s dev
  • Horizontal split: Prefix + %
  • Vertical split: Prefix + "
  • Detach: Prefix + d
  • Reattach: tmux attach-session -t dev
  • Save (resurrect): Prefix + Ctrl-s
  • Restore: Prefix + Ctrl-r

dotfiles with chezmoi

Chezmoi remains the best choice for dotfile management with its templating support and multi-machine sync:

Terminal window
# Initialize
brew install chezmoi
chezmoi init
chezmoi add ~/.zshrc
# On a new machine
chezmoi init git@github.com:walterra/dotfiles.git
chezmoi diff
chezmoi apply -v

Inspired by Robin Wieruch’s Mac Setup.