Shell, git, and terminal configuration for macOS, plus a Brewfile of installed packages.
dotfiles.list names every tracked file. Each path is relative to both the repo root and $HOME, so .config/ghostty/config maps to ~/.config/ghostty/config. To track another file, add its path to the list and run ./dotfiles.sh pull.
| Command | What it does |
|---|---|
./dotfiles.sh status |
Lists each tracked file as same, differs, or missing on one side. |
./dotfiles.sh diff |
Shows a unified diff from the repo copy to the home copy. |
./dotfiles.sh pull |
Copies the home files into the repo and regenerates Brewfile from installed packages. |
./dotfiles.sh install |
Copies the repo files into $HOME. Before it replaces a file, it saves the old copy to ~/.dotfiles_backup/<timestamp>/. |
To save changes from this machine, run ./dotfiles.sh pull, review git diff, add an entry to CHANGELOG.md, then commit.
CHANGELOG.md records each change to the shell, terminal, and git setup, what you might notice because of it, and how to undo it. If something behaves unexpectedly, check it first. pull reminds you to add an entry when tracked files changed and the changelog didn't.
git clone https://github.com/scottpeterson/dotfiles.git ~/projects/dotfiles
~/projects/dotfiles/all_brew.bashall_brew.bash installs Homebrew if needed, installs the Brewfile, upgrades casks, and runs ./dotfiles.sh install. The login shell stays macOS's /bin/zsh.
The shell config expects oh-my-zsh with the zsh-autosuggestions plugin. Install those before you open a new shell. Starship draws the prompt; the Brewfile installs it, and .config/starship.toml configures it. The prompt uses Powerline symbols, so the terminal font must be a Nerd Font (iTerm2 and Ghostty both use MesloLGS Nerd Font).
Settings that should stay off GitHub go in two untracked files on each machine:
~/.zshrc.local: sourced at the end of.zshrc. Holds private paths and per-project hooks.~/.gitconfig.local: included at the end of.gitconfig. Holdsuser.email.
On a new machine, create ~/.gitconfig.local with your email before you commit:
git config --file ~/.gitconfig.local user.email "you@example.com"