Personal macOS dotfiles organized as installable packages. Each directory under packages/ mirrors the path it should occupy under $HOME, and install.sh links those packages with GNU Stow.
sudo softwareupdate -i -a
xcode-select --installThe default checkout location is ~/.dotfiles:
git clone https://github.com/kalupas226/dotfiles.git ~/.dotfiles
cd ~/.dotfiles
./install.shinstall.sh prompts before running official remote installer scripts. To skip those prompts:
./install.sh --skip-confirmationTo run only part of the installation, pass one or more targets. Targets always run in installation order:
./install.sh link
./install.sh brew miseAvailable targets are brew, link, tpm, mise, and claude. Use all, or omit targets, to run the full installation. Selected targets do not automatically run missing prerequisites; for example, link reports an error if GNU Stow is unavailable.
Restart your terminal, or run exec zsh, after installation.
- Installs Homebrew if missing
- Runs
brew bundle -v --file=Brewfile - Links package dotfiles into
$HOMEwithstow --no-folding - Installs TPM if missing
- Activates mise and runs
mise install - Installs Claude Code if missing
- Prints manual setup reminders
After the first install, use the helper in ~/.local/bin for routine maintenance:
dotfiles outdatedSome tools need one-time manual setup after install.sh.
The current checklist is printed by install.sh at the end of the install so the manual steps have one source of truth.
- Check managed updates:
dotfiles outdated - Refresh update metadata before checking:
dotfiles outdated --refresh - Check a single source:
dotfiles outdated brew,dotfiles outdated mise, ordotfiles outdated sheldon - Diagnose local symlink health:
dotfiles doctor - Install or relink everything:
dotfiles install - Run selected installation targets:
dotfiles install linkordotfiles install brew mise - Generate Claude Code settings:
dotfiles claude-settings - Node.js is pinned in
packages/mise/.config/mise/config.toml - Homebrew packages are defined in
Brewfile - Manual setup reminders are maintained in
install.sh - Neovim plugins are locked in
packages/nvim/.config/nvim/lazy-lock.json - Git identity defaults to GitHub noreply; override per machine with
~/.gitconfig.local - Git and lazygit render diffs with
git-delta(installed viaBrewfile) - Prefer project-local
devDependencies,npm dlx/npx, or Homebrew over global npm installs
If brew bundle or mise install fails mid-run, fix the cause and rerun dotfiles install brew or dotfiles install mise. Running dotfiles install still reruns the full installation.
If Stow reports conflicts from legacy symlinks created by older versions of install.sh, run:
scripts/migrate-legacy-links-to-stow.sh --dry-run
scripts/migrate-legacy-links-to-stow.sh
./install.sh~/.claude/settings.jsonis generated manually withdotfiles claude-settingspackages/claude/.claude/_settings-source/shared.jsonis repo-managed- Add machine-specific Claude settings as any other
*.jsonfile in~/.claude/_settings-source/ - Claude Code uses
packages/claude/.claude/statusline-command.shfor a compact two-row statusline
- tmux opens shells, panes, and lazygit from the active pane's current directory
- tmux libexec helpers provide the project picker, the file reference picker, and the scrollback text picker
- Interactive zsh auto-starts a
hometmux session with amainwindow, except in Claude, Codex, and VS Code terminals
.
├── Brewfile
├── install.sh
├── packages/
│ ├── aerospace/ # AeroSpace configuration
│ ├── bin/ # User-facing helpers installed into ~/.local/bin
│ ├── claude/ # Claude Code settings source and statusline
│ ├── git/ # Git configuration
│ ├── karabiner/ # Karabiner-Elements configuration
│ ├── lazygit/ # Lazygit configuration
│ ├── mise/ # mise tool pins
│ ├── npm/ # npm defaults
│ ├── nvim/ # Neovim configuration
│ ├── sheldon/ # zsh plugin pins
│ ├── starship/ # Starship prompt
│ ├── tmux/ # tmux configuration and tmux-only libexec helpers
│ ├── wezterm/ # WezTerm configuration
│ └── zsh/ # zsh startup files and helpers
├── scripts/ # Maintenance, diagnostics, and update-check scripts
├── skills/ # Shared Agent Skills
└── tests/ # Shell regression tests
Useful references:
skills/README.md- shared Agent Skills in this repoAGENTS.md- guidance for AI coding agents working in this repository