Mac Dev Bootstrap β Fully Automated macOS Setup for Developers
π Mac Dev Bootstrap β Fully Automated macOS Setup for Developers
by Justin Napolitano
π‘ Why I Built This
Setting up a new Mac for development should take 15 minutes, not half a day of manual installs, missing fonts, and plugin rabbit holes.
After fighting through brew, zsh, oh-my-zsh, Powerlevel10k, libcurl mismatches, and the GitHub CLI chaos, I decided to script everything β from Zsh setup to GitHub SSH configuration β so the next time I wipe or upgrade a Mac, itβs one make all away from ready.
This repo is that setup β a modular macOS bootstrap you can use, fork, and customize.
π§± Project Overview
Repository: mac-dev-bootstrap
Language: Bash
Run it with:
Each step is its own script under scripts/, wired together by a Makefile.
You can run them all at once or step through them one by one.
mac-dev/
ββ Makefile
ββ README.md
ββ scripts/
ββ 01_zsh.sh # Zsh + Oh My Zsh + Powerlevel10k + plugins
ββ 02_brew_git.sh # Homebrew setup + curl + zshrc hardening
ββ 03_cli_tools.sh # CLI tools: fzf, zoxide, bat, jq, etc.
ββ 04_fonts_and_terminal.sh
ββ 05_macos_defaults.sh # Key repeat, Dock, Finder, etc.
ββ 06_dev_runtimes.sh # pyenv, fnm, rbenv, Go, Java
ββ 07_vscode.sh # VSCode + extensions + settings
ββ 08_apps.sh # iTerm2, Chrome, Docker, Slack, etc.
ββ 09_github_ssh.sh # GitHub CLI + SSH key setup
ββ 99_postflight.sh # Git identity + key printout
βοΈ Core Features
π 1. Zsh + Oh My Zsh
- Installs Oh My Zsh without using git (tarball method).
- Adds Powerlevel10k and MesloLGS NF fonts.
- Configures plugins:
zsh-autosuggestionszsh-syntax-highlightingzsh-completions
- Adds optional βsmart historyβ search with β / β arrows.
β The 01_zsh.sh script ensures Powerlevel10kβs setup wizard runs the first time you open your shell.
πΊ 2. Homebrew + Git (sane defaults)
After breaking brew one too many times, I hardened the setup:
- Uses system git and system curl (avoids libcurl symbol mismatch).
- Reinstalls curl as keg-only, sets paths, and exports everything to your
~/.zshrc. - Keeps your brew environment clean and idempotent.
No more
_curl_global_tracecrashes.
No more half-broken brew updates.
π§° 3. CLI Tools
Includes everything I actually use day-to-day:
fzfβ fuzzy finder for history/fileszoxideβ smartercdbatβ colorizedcatjq,yq,ripgrep,fd,eza,tree,tmux,starship,direnv- Integrates completions automatically into Zsh.
ποΈ 4. Fonts & Terminal
Installs:
- JetBrains Mono Nerd Font
- Hack Nerd Font
- (optional) Fira Code Nerd Font
Also creates ~/iterm-schemes/ with downloadable .itermcolors files for OneHalfDark, Dracula, and Solarized Dark.
Tip: You can skip color schemes entirely by setting
INSTALL_SCHEMES=0.
βοΈ 5. macOS Defaults
Tweaks macOS for sane dev behavior:
- Fast key repeat
- Show all file extensions
- Dock autohide & scaling
- Save screenshots to
~/Screenshots - Enable trackpad tap-to-click
π§βπ» 6. Dev Runtimes
Installs modern toolchains:
- Python via pyenv
- Node.js via fnm
- Ruby via rbenv
- Go + Temurin JDK
Each one auto-wires its init block into your ~/.zshrc.
π» 7. VS Code
- Installs VS Code via Homebrew
- Installs extensions (Python, Docker, ESLint, Prettier, etc.)
- Writes a clean default
settings.json
π§© 8. Apps
Installs the usual suspects:
iTerm2, Chrome, Rectangle, Raycast, Slack,
Notion, Docker, Postman, VS Code, Spotify, 1Password
Runs through cask, skips failed installs gracefully.
π 9. GitHub + SSH (the game changer)
This is where most setups break β so I made it bulletproof.
The script:
- Prefers system git.
- Generates/loads an ed25519 SSH key.
- Adds it to your macOS Keychain and
~/.ssh/config. - Configures the GitHub CLI (
gh) for SSH. - Converts your repoβs
originfrom HTTPS β SSH. - Attempts to upload your public key via the GitHub API (auto-refreshes the needed scope).
β After this step:
git pushandgh repo createboth just work β no prompts, no crashes.
π§Ή 99. Postflight
- Prints your SSH public key.
- Configures your Git name/email.
- Confirms system git/curl paths.
π§Ύ Makefile Usage
Run everything:
Or run individual steps:
π Idempotent by Design
Every script checks for existing installs and configurations β rerunning it wonβt break anything. Itβs built for repeatable use across machines or fresh macOS setups.
πͺ Why It Matters
This project is more than a dotfile repo. Itβs a complete reproducible Mac development environment β modular, debuggable, and stable enough to trust on a clean machine.
- No hardcoded paths
- No external dependencies
- No brew tap hacks
- Fully offline-compatible once cached
π§ Lessons Learned
- Donβt mix brewed git with system libcurl on macOS.
- Donβt assume Oh My Zsh is cloned via git.
- Always back up
.zshrcbefore patching. - SSH > HTTPS for GitHub every time.
π Repository & License
Repo: github.com/justin-napolitano/mac-dev
License: MIT
Author: Justin Napolitano
Feel free to fork, modify, and share β the goal is to make onboarding a new Mac take minutes, not hours. justin@Justins-MacBook-Air Downloads %