My portable terminal environment for macOS, built around zsh, Starship, and iTerm2.
dotfiles managed with chezmoi.
| File | Purpose |
|---|---|
| .zshrc | Main zsh config — plugins, aliases, tool integrations |
| .zprofile | Login shell config — PATH setup |
| .gitconfig | Git identity and credential settings |
| ~/.config/starship.toml | Starship prompt appearance and modules |
| ~/.config/zsh/starship.zsh | OS/distro icon detection for the prompt |
| ~/.config/thefuck/settings.py + rules/ | Custom thefuck command-correction rules |
| iTerm2 preferences | Terminal app settings, profiles, and appearance |
Homebrew➞ Package managerchezmoi➞ dotfile managerzsh➞ ShelliTerm2➞ Terminal emulatorStarship➞ Promptzsh-autocomplete➞ Tab-completion pluginzsh-autosuggestions➞ Inline command suggestionszsh-syntax-highlighting➞ Colors commands as you typeautojump➞ Fast directory jumpingeza➞ Modernlsreplacementthefuck➞ Command-correction tool
-
Install Homebrew:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" -
Install chezmoi and initialize from this repo:
brew install chezmoi chezmoi init --apply git@github.com:avocadoattack/dotfiles.git -
Install the tools listed above via Homebrew and their respective zsh plugins.
-
Restart your terminal. chezmoi apply will have already placed all config files in the right spots.
Editing a tracked text file (e.g. .zshrc):
cd ~/.local/share/chezmoi
chezmoi edit ~/.zshrc
chezmoi diff
chezmoi apply
git status # confirm the real source filename before staging
git add <file>
git commit -m "description"
git push
Editing a GUI-configured file (e.g. iTerm2 preferences):
# make the change in the app itself, then:
cd ~/.local/share/chezmoi
chezmoi re-add
chezmoi diff
git status # confirm the real source filename before staging
git add <file>
git commit -m "description"
git push
- Some files use chezmoi's templating ({{ .chezmoi.homeDir }}) so paths resolve correctly regardless of the machine's username.
- Source filenames often differ from live filenames due to chezmoi's naming convention (e.g.,
.zshrc→dot_zshrc.tmpl, and files under.chezmoiignore-adjacent private paths get aprivate_prefix). Rungit statusorchezmoi source-path <live-file>ifgit addcan't find the file you expect. - SSH keys, GPG keys, shell history, and credential files were never added to this repo — see .chezmoiignore for the full list and reasoning.