Production-ready macOS terminal dotfiles with reproducible setup, safe backups, Homebrew package management, and iTerm2 profile/theme automation.
Start here: docs/GETTING_STARTED.md
Contributing: CONTRIBUTING.md
Security policy: SECURITY.md
Security rulebook: docs/SECURITY_RULEBOOK.md
Roadmap: ROADMAP.md
This repository captures your preferred terminal environment so it can be applied consistently on any Mac.
- Symlink-based dotfile management
- Automatic backup of previous local configuration
- Homebrew dependency installation from
Brewfile - Starship prompt and iTerm2 profile/theme setup
- Clear separation of secrets from version-controlled files
.
├── Brewfile
├── LICENSE
├── bootstrap.sh
├── install.sh
├── assets/images/
├── config/.config/
│ ├── iterm2/
│ └── starship.smartmur.toml
└── zsh/
├── .zshrc
└── .zsh/
├── aliases.smartmur.zsh
├── functions.smartmur.zsh
├── nvm.smartmur.zsh
└── starship.smartmur.zsh
- macOS 13+
zsh(default on macOS)- Xcode Command Line Tools
- Homebrew
- Git
git clone https://github.com/SmartMur/dotfiles.git mac-terminal-dotfiles
cd mac-terminal-dotfiles
./install.sh
exec zshbash -n bootstrap.sh
bash -n install.sh
pre-commit run --all-files
python3 scripts/security_scrub.pyIf a leak is detected, stop and follow docs/SECURITY_RULEBOOK.md before any push.
Install hooks once per clone:
brew install pre-commit
pre-commit installDependabot PRs are auto-managed by:
.github/workflows/dependabot-automerge.yml
It updates branches, auto-approves bot PRs, and enables auto-merge after CI passes.
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/SmartMur/dotfiles/main/bootstrap.sh)"The bootstrap script installs prerequisites if needed, clones this repo into ~/.smartmur-dotfiles, and runs install.sh.
- Creates timestamped backups in
~/.terminal_backups/mac-terminal-dotfiles-<timestamp>/ - Symlinks repo-managed files into
~/.zsh*,~/.config/*, and iTerm2 Dynamic Profiles - Sets the iTerm2 default profile GUID to the SmartMur profile
- Runs
brew bundle --file Brewfileunless--skip-brewis passed
- Dynamic profile location:
~/Library/Application Support/iTerm2/DynamicProfiles/smartmur.dynamic.json
- Additional profile assets:
~/.config/iterm2/smartmur.itermcolors~/.config/iterm2/smartmur-profile.json
Brand assets copied from https://smartmur.ca on February 18, 2026:
assets/images/smartmur-white.pngassets/images/smartmur-favicon.png
- Core shell behavior:
zsh/.zshrc - Aliases/functions modules:
zsh/.zsh/* - Prompt style:
config/.config/starship.smartmur.toml - Package list:
Brewfile
After changing files in this repo:
./install.sh --skip-brew
exec zshNever commit API keys or tokens.
Use a local-only file:
~/.zsh/secrets.zsh
Example:
export OPENAI_API_KEY="..."Incident and history-rewrite procedure is documented in docs/SECURITY_RULEBOOK.md.
- Prompt/theme not updating: run
exec zsh - iTerm2 profile not switching: restart iTerm2 and open a new window
- Missing packages: run
brew bundle --file Brewfile - Rollback required: restore files from
~/.terminal_backups/...
git pull
./install.sh --skip-brew
exec zshSee CONTRIBUTING.md.
MIT License. See LICENSE.