Automated Mac development environment setup with interactive package selection.
chmod +x setup.sh
./setup.sh./setup.shWalks you through:
- Xcode CLT — installs if missing
- Homebrew — installs if missing
- Packages — pick categories, then refine individual packages with arrow keys + space
- macOS preferences — developer-friendly Finder, Dock, keyboard settings
uv run setup_gui_launcher.pyLaunches a graphical interface for selecting packages. Dependencies are declared inline via PEP 723 and resolved automatically by uv — no venv or pip install needed.
./setup.sh --allInstalls the full Brewfile and applies all settings without interactive menus.
Edit the Brewfile to add or remove packages. Organize with comment headers — the interactive menu builds its categories from these headers automatically.
# My Custom Category
brew "some-tool"
cask "some-app"| Type | Example | Description |
|---|---|---|
brew |
brew "git" |
CLI tool / library |
cask |
cask "visual-studio-code" |
GUI application |
mas |
mas "Keynote", id: 409183694 |
Mac App Store app |
├── setup.sh # Main entry point
├── setup_gui_launcher.py # GUI alternative (run with uv)
├── Brewfile # Declarative package manifest
├── scripts/
│ ├── xcode.sh # Xcode Command Line Tools
│ ├── homebrew.sh # Homebrew installation
└────── macos.sh # macOS system preferences
After installing CLI utilities, add the following lines to your ~/.zshrc and ~/.zprofile to enable them:
eval "$(starship init zsh)"source /opt/homebrew/share/zsh-autosuggestions/zsh-autosuggestions.zshsource /opt/homebrew/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zshexport NVM_DIR="$HOME/.nvm"
[ -s "/opt/homebrew/opt/nvm/nvm.sh" ] && \. "/opt/homebrew/opt/nvm/nvm.sh"
[ -s "/opt/homebrew/opt/nvm/etc/bash_completion.d/nvm" ] && \. "/opt/homebrew/opt/nvm/etc/bash_completion.d/nvm"Then reload your shell:
source ~/.zshrc- macOS (Apple Silicon or Intel)
- Internet connection
- Admin privileges (for Homebrew and Xcode CLT)