Personal dotfiles for macOS (Apple Silicon).
# 1. Install Xcode CLI tools (prompted automatically)
xcode-select --install
# 2. Clone this repo
git clone https://github.com/divideby0/dotfiles.git ~/src/divideby0/dotfiles
# 3. Run bootstrap
cd ~/src/divideby0/dotfiles
./bootstrap.shThe bootstrap script will:
- Install Rosetta (Apple Silicon)
- Install Homebrew and all packages from Brewfile
- Install Oh My Zsh
- Create symlinks for all dotfiles
- Install mise and all language runtimes
- Install Python tools via uv (ansible, etc.)
- Install standalone tools (Claude Code, etc.)
- Homebrew: macOS packages and casks (see
Brewfile) - mise: Language runtimes and dev tools (see
mise/tool-versions) - uv: Python CLI tools like ansible
- zsh with Oh My Zsh
- Starship prompt with custom powerline theme
- Lazy-loaded completions for fast startup
- Trimmed plugin set for performance
Languages managed by mise:
- Node.js, Python, Ruby, Go, Rust, Java, Deno, Bun
Kubernetes tools:
- kubectl, helm, k9s, kops, kubie, kind, tilt, skaffold
Infrastructure:
- Terraform, Terragrunt, Pulumi, Ansible
- Cursor and VSCode share the same settings
- Claude Code global configuration
dotfiles/
├── bootstrap.sh # Fresh Mac setup (run this first)
├── install.sh # Symlink installer (idempotent)
├── Brewfile # Homebrew packages and casks
├── scripts/
│ ├── install-homebrew.sh # Homebrew + brew bundle
│ ├── install-mise.sh # mise + tool installations
│ ├── install-oh-my-zsh.sh # Oh My Zsh
│ ├── install-uv-tools.sh # Python tools (ansible, etc.)
│ └── install-standalone.sh # Curl-based tools (Claude Code, etc.)
├── shell/
│ ├── zshrc # Main shell config
│ ├── zshenv # Environment variables
│ └── zprofile # Login shell (Homebrew)
├── git/
│ ├── gitconfig # Git configuration
│ └── gitignore_global # Global gitignore
├── editors/
│ └── settings.json # Shared Cursor/VSCode settings
├── config/
│ └── starship.toml # Prompt configuration
├── claude/
│ └── CLAUDE.md # Claude Code global config
├── mise/
│ ├── config.toml # mise settings
│ └── tool-versions # Global tool versions
├── oh-my-zsh-custom/
│ └── plugins/
│ └── custom-set-path/ # Custom PATH plugin
└── misc/
└── screenrc
Create ~/.gitconfig.local:
[user]
name = Your Name
email = your@email.comCreate ~/.zshrc.local for local aliases, secrets, or overrides.
- mise over brew for dev tools: Version management per-project
- Symlinks over copy: Edit dotfiles, changes apply immediately
- Secrets in
.localfiles: Never tracked in git - Fast startup: Lazy completions, minimal plugins
cd ~/src/divideby0/dotfiles
git pull
./install.sh # Re-run symlinks if structure changed
mise install # Install any new tool versions
brew bundle # Install any new Homebrew packages