Initial Setup
1. Clone the repository
2. Run init.sh
- Homebrew — Installs Homebrew (if missing) and all formulas/casks from the
Brewfile. - Stow packages — For each module (
neovim,zsh,aerospace,kitty,git), removes any conflicting non-symlink files in~and runsstow --restow --no-folding. - macOS defaults — Applies system preferences (Dock, Finder, keyboard, appearance).
- Swift picker apps — Compiles the Aerospace WorkspacePicker and NotificationPicker SwiftUI apps with optimizations.
--yes to skip all confirmation prompts:
Updating
- Pulls the latest changes from the remote.
- Re-stows all packages (stow is idempotent — safe to re-run).
- Cleans up stale files from previous versions.
- Recompiles all Swift picker apps.
How Stow Works
GNU Stow creates symlinks from a target directory (your home~) into the repository. Each module directory mirrors ~/:
--no-folding flag ensures Stow creates individual file symlinks rather than symlinking
entire directories. This prevents untracked files from leaking into the repo.
Stow commands reference
| Command | What it does |
|---|---|
stow --restow --no-folding -t ~ <pkg> | Install/refresh a package |
stow -D -t ~ <pkg> | Unlink a package |
Ignored files
The.stow-local-ignore file excludes .DS_Store, .git, .gitignore, and
.stow-local-ignore from being symlinked.
Local Overrides
Machine-specific configuration that shouldn’t be tracked in git:- Zsh: Create
~/.zshrc.local— sourced at the end of.zshrc. - Claude Code:
.claude/settings.local.jsonis globally gitignored.