My personal macOS bootstrap, packaged as a Claude Code slash command so a fresh laptop can be brought up to my baseline by handing the instructions to Claude.
Clone this repo, cd into it, then in Claude Code run:
/shell-setup
The command lives at .claude/commands/shell-setup.md. Claude runs each section in order and pauses for verification between sections.
An 18-section provisioning checklist:
- Homebrew — installer + PATH wiring for the current session.
- Taps —
auth0/auth0-cli. - Formulae —
autojump,auth0,bfg,gh,git-plus,go,libpq,nvm,pipx,railway,tmux,yt-dlp. - Casks —
codex,gcloud-cli,ghostty,sanesidebuttons,session-manager-plugin. Opens the Full Disk Access pane so Ghostty can be granted access. - Oh My Zsh — installer.
- NVM — point
NVM_DIRat~/.nvmsobrew upgrade nvmcan't wipe node installs. - Node — install latest LTS via nvm, alias
default. - Global npm packages —
vercel. ~/.zshrc— appends this repo'szsh/zshrcto~/.zshrcas a managed block delimited by# >>> shell-setup managed >>>/# <<< shell-setup managed <<<markers. Re-runs strip the old block and re-append the current template, so the section is idempotent — the OMZ-installer-default zshrc and any machine-local additions are preserved. First run also stashes the pre-shell-setup file at~/.zshrc.pre-shell-setup. The block extends scalar OMZ opinions (theme, autotitle, update mode) but adds to the OMZpluginsarray viaplugins+=(...)+typeset -U plugins, so any plugins the user enabled in their own zshrc survive the merge (de-duplicated). The block re-sources OMZ so the merged plugin list takes effect. Block contents: Oh My Zsh theme + required plugins, NVM dir, Homebrew completions, user site-functions onfpath, PATH,awsenv <profile>AWS SSO helper,claudealias. Keyboard tweaks:^U→backward-kill-line(macOS Cmd+Backspace semantics), Shift+Enter inserts a literal newline (paired with the Ghostty/tmux CSI 27 plumbing), and a precmd that re-asserts a blinking thin-bar cursor (so inside tmux matches outside).- AWS CLI — official macOS installer.
- AWS SSO profiles — interactive
prod/prod-admin/devsetup. - Git —
git upalias forpull --rebase --autostash. _git-multizsh completion — custom completion that delegates to git's own subcommand completion sogit multi sw<TAB>expands.~/.zprofile— pipx PATH.- Restore Claude Code config — copies this repo's
.claude/into~/.claude/. Usesjq -s '.[0] * .[1]'to deep-mergesettings.json(this repo wins on key conflicts, untouched keys preserved) andrsync -av(no--delete) for everything else so runtime files in~/.claude/are left intact. - Restore Ghostty config — copies this repo's
ghostty/configto~/.config/ghostty/config(quick terminal, splits, natural text editing keybinds). - Restore tmux config — copies this repo's
tmux/tmux.confto~/.tmux.conf(mouse support on). - Verification — sources the new shell, prints versions, confirms node was installed under
~/.nvm/versions/node/.
.claude/
├── commands/
│ └── shell-setup.md # the /shell-setup slash command
├── settings.json # Claude Code settings (statusline, plugins, prefs)
└── statusline-command.sh # 2-line statusline: cwd/worktree/branch + ctx % + 5h usage
ghostty/
└── config # Ghostty terminal config (quick terminal, splits, NTE)
tmux/
└── tmux.conf # tmux config (mouse support on)
zsh/
└── zshrc # ~/.zshrc template (theme/plugins, PATH, keybinds, awsenv)
settings.local.json is intentionally excluded — Claude Code treats it as machine-local and the standard global gitignore drops it.