Bootstrap a new Mac:
curl -fsSL https://raw.githubusercontent.com/baggiponte/dotfiles/main/install.sh | zshEverything is installed with homebrew (Brewfile) and mise (mise/config.toml).
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 |
mise |
Installs mise (if missing) and the globally configured mise tools |
packages |
Installs Homebrew (if missing), runs brew bundle from Brewfile, sets up Docker plugins |
config |
Exports XDG_* dirs, creates symlinks (.gitconfig, iCloud, scripts/ into ~/.local/bin) |
python |
Installs Python versions (3.10–3.13) via uv |
macos-defaults |
Runs mise bootstrap --only macos-defaults to apply the macOS settings declared in mise/conf.d/macos-defaults.toml — 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 $ZDOTDIR (here ~/.config/zsh/.zshenv, since ZDOTDIR is set in /etc/zshenv):
.zshenv → .zprofile → .zshrc → .zlogin → .zlogout
