MacBook Air setup — dotfiles and configuration for a fresh macOS install.
Install these manually from the App Store before running the setup script:
| App | Purpose |
|---|---|
| 1Password | Password manager |
| Amphetamine | Prevent Mac sleep (keeps VPN alive) |
| Xcode | iOS / macOS development (optional) |
Xcode Command Line Tools are handled automatically by setup.sh.
# 1. Clone this repo
git clone https://github.com/henrywang/devcage-macos.git ~/devcage-macos
# 2. Run the setup script
cd ~/devcage-macos
bash setup.shThen open a new shell for all changes to take effect.
| Package | Type | Purpose |
|---|---|---|
| vim | CLI | Text editor |
| gh | CLI | GitHub CLI |
| fzf | CLI | Fuzzy finder |
| lsd | CLI | Modern ls replacement |
| ripgrep | CLI | Fast recursive search |
| starship | CLI | Cross-shell prompt |
| node | CLI | JavaScript runtime |
| firefox | App | Web browser |
| ghostty | App | Terminal emulator |
| zed | App | Code editor |
| obsidian | App | Knowledge base / notes |
| rectangle | App | Window manager |
| stats | App | System stats in menu bar |
| font-jetbrains-mono-nerd-font | Font | Terminal font with icons |
| Tool | Installer | Purpose |
|---|---|---|
| Rust + rustfmt + clippy | rustup | Systems programming |
| Claude Code | npm | AI coding assistant |
devcage-macos/
├── Brewfile # Homebrew packages
├── setup.sh # Setup automation
└── config/
├── com.mitchellh.ghostty/
│ └── config.ghostty # Ghostty terminal config
├── git/
│ ├── config # Git config (aliases, colors, credential helpers)
│ ├── gitignore_global # Global gitignore
│ └── ignore # Additional global ignores
├── starship/
│ └── starship.toml # Starship prompt config
├── vim/
│ ├── vimrc # Vim config (vim-plug, coc.nvim, airline)
│ ├── colors/ # Custom color schemes
│ └── ftplugin/ # Filetype-specific settings
└── zsh/
├── .zshenv # Sets ZDOTDIR, sources Cargo env
└── .zshrc # Shell config, aliases, history, plugins
setup.sh creates the following symlinks so macOS config paths point into this repo:
| Symlink | Points to |
|---|---|
~/.zshenv |
config/zsh/.zshenv |
~/.config/zsh |
config/zsh/ |
~/.config/git |
config/git/ |
~/.config/vim |
config/vim/ |
~/.config/starship |
config/starship/ |
~/Library/Application Support/com.mitchellh.ghostty/config.ghostty |
config/com.mitchellh.ghostty/config.ghostty |
Zsh uses XDG-style config via ZDOTDIR=$HOME/.config/zsh (set in ~/.zshenv).
Copy your existing id_ed25519 and id_ed25519.pub into ~/.ssh before running setup.sh. The script will load the key into the macOS Keychain via ssh-add --apple-use-keychain.
Things that can't be scripted — configure these by hand after running setup.sh.
| Setting | Path |
|---|---|
| Three finger drag | System Settings → Accessibility → Pointer Control → Trackpad Options → Use trackpad for dragging → Three Finger Drag |
| Setting | Path |
|---|---|
| Clock: analog only, no date | System Settings → Control Center → Clock → Style: Analog, Show Date: Never |
| Show VPN in menu bar | System Settings → Control Center → VPN → Show in Menu Bar |
| Hide all other menu bar icons | System Settings → Control Center → set everything else (Wi-Fi, Bluetooth, Battery, etc.) to Don't Show in Menu Bar; keep only Control Center and VPN |
| Setting | Path |
|---|---|
| Add Cisco IPsec VPN | System Settings → VPN → Add VPN Configuration → Cisco IPSec → fill in server, account, password, and shared secret |
| App | What to configure |
|---|---|
| Rectangle | Launch at login; import keybindings if needed |
| Stats | Choose which stats to display in the menu bar |
| Amphetamine | Enable Launch at Login; configure session triggers to keep VPN connection alive |