Bootstrap a new Mac:
curl -fsSL https://raw.githubusercontent.com/baggiponte/dotfiles/main/install.sh | zshEverything is installed with homebrew.
install.sh orchestrates the setup by sourcing modules from install/:
| Module | What it does |
|---|---|
prerequisites |
Installs Xcode CLI tools, accepts licence, configures ZDOTDIR in /etc/zshenv |
packages |
Installs Homebrew (if missing), runs brew bundle from Brewfile, sets up Docker plugins |
config |
Exports XDG_* dirs, creates symlinks (.gitconfig, iCloud) |
python |
Installs Python versions (3.10–3.13) via uv |
apply-macos-defaults |
Applies macOS system settings — Dock, Finder, keyboard, mouse, trackpad, Stage Manager, screenshots, text substitutions, and compiles the bat theme |
- In what order are zsh startup files sourced?
This is explained in detail in zsh docs:
Commands are first read from /etc/zshenv; this cannot be overridden. [...] Commands are then read from $ZDOTDIR/.zshenv. If the shell is a login shell, commands are read from /etc/zprofile and then $ZDOTDIR/.zprofile. Then, if the shell is interactive, commands are read from /etc/zshrc and then $ZDOTDIR/.zshrc. Finally, if the shell is a login shell, /etc/zlogin and $ZDOTDIR/.zlogin are read.
In other words, this is the order in which these files get read. Keep in mind that it reads first from the system-wide file (i.e. /etc/zshenv) then from the file in your home directory (~/.zshenv):
.zshenv → .zprofile → .zshrc → .zlogin → .zlogout
