Automate the installation and configuration of a full macOS development environment: CLI tools, programming languages, editors, and system preferences.
install.sh is the orchestrator — it executes all other scripts in order:
| Step | Script | What it does |
|---|---|---|
| 1 | essential.sh |
Xcode CLT, Rosetta 2, Homebrew (auto-detects Apple Silicon vs Intel path) |
| 2 | cli_tools.sh |
OpenSSL, ripgrep, ast-grep, tree, ack |
| 3 | git/install.sh |
Git config, ed25519 SSH key generation, GitHub CLI auth |
| 4 | zsh/install.sh |
Zsh, Oh My Zsh, Starship prompt |
| 5 | terminal.sh |
Ghostty terminal |
| 6 | languages/ |
One script per language: javascript.sh (n + npm/yarn/pnpm/Deno), python.sh (pyenv + Poetry), rust.sh, go.sh, java.sh (SDKMAN), dotnet.sh, latex.sh |
| 7 | ides.sh |
VS Code, Cursor |
| 8 | browsers.sh |
Firefox (set as default), Chrome, Edge, DuckDuckGo |
| 9 | devtools.sh |
OrbStack, kubectl, Postman, Google Cloud SDK, ChatGPT, Claude Code, Playwright CLI |
| 9.5 | claude/install.sh |
Copies settings.json, commands/, skills/ into ~/.claude/; registers MCP servers via claude mcp add |
| 9.6 | codex/install.sh |
Copies reusable skills into ~/.codex/skills/; registers MCP servers via codex mcp add |
| 10 | tools.sh |
AppCleaner, Spotify, Slack, Messenger, Signal, Discord, Rectangle |
| 11 | macos.sh |
Dock (auto-hide, left), trackpad (tap-to-click, 3-finger drag, max speed), keyboard (Caps Lock→Control), input source shortcuts, Spotlight disabling |
Config files (git/.gitconfig, git/.gitignore_global, zsh/.zshrc) live alongside their installer scripts and are symlinked/copied during setup.
git clone https://github.com/ben196888/mac-set-up.git
cd mac-set-upchmod +x install.sh
./install.shComment out any steps in
install.shif you only want part of the setup.
-
Download this repo as a ZIP from GitHub Download ZIP
-
Extract the ZIP file and navigate to the folder:
cd ~/Downloads/mac-set-up-master # Or wherever you unzipped it- Run the installer:
chmod +x install.sh
./install.sh- Zsh config: with Starship, Oh My Zsh, and language-aware prompts
- Git setup: with aliases, delta, and conditional editor logic
- VS Code + Cursor: with settings sync and optional extension restore
- Terminal: Ghostty + shell utilities
- Languages: Go, Python, Node (via n), Rust, Java (via SDKMAN), .NET (via Homebrew), LaTeX
- Browsers: Firefox, Chrome, Edge, DuckDuckGo
- Dev Tools: OrbStack (Docker), kubectl, Postman, Google Cloud SDK, ChatGPT
- System Preferences: Dock, trackpad gestures, key remapping, fast repeat rate
- All
.zshrcadditions are conditional to avoid errors if tools aren't installed macos.shapplies safedefaults writeandhidutilchanges (some may require logout/reboot)- You can export/import GUI app settings (like Rectangle) separately if needed
One-liner install — the end goal is to bootstrap a fresh Mac with a single command:
curl -fsSL https://raw.githubusercontent.com/ben196888/mac-set-up/master/bootstrap.sh | shThis requires a bootstrap.sh that clones the repo to a temp directory and runs install.sh from there, since curl | sh has no access to sibling scripts. See docs/plan/roadmap-oneliner.md for the full plan.
- Implement checkpoint/resume mechanism to allow interrupted installations to continue from the last successful step
- Add login item setup via
osascript(e.g., for Rectangle) - Add versioned
global.jsonfor .NET SDK pinning - Add sync logic for VS Code extensions
- Sync Claude Code settings and custom commands via this repo
- Sync Codex skills and MCP setup via this repo
MIT — use it, fork it, improve it.