btav macOS setup managed with GNU Stow.
It installs development tools and apps, then links configuration for zsh, Vim, Git, Ghostty, and Zed into the home directory.
The package lists are the sources of truth:
- Brewfile for Homebrew formulae and casks
- scripts/install-npm-globals.sh for global npm packages
- skills for shared AI coding-agent skills
git clone --recurse-submodules https://github.com/btav/dotfiles.git
cd dotfiles
./install.shUse ./install.sh --dry-run to preview the setup. The installer:
- installs Homebrew and the dependencies in
Brewfile - installs nvm, a stable Rust toolchain, and Python 3.13 through uv
- syncs submodules and installs global npm packages and shared skills
- backs up conflicting config files before stowing this repository's config
./update.shThe update script refreshes Homebrew metadata, installs or upgrades dependencies from Brewfile, backs up conflicting managed files, re-links the managed Stow packages so newly added config files are applied, updates the global npm packages (pnpm remains on major version 11), and updates installed Rust toolchains.
The npm packages install under your default nvm Node. Codex, Claude Code, OpenCode, and Pi run through launchers in ~/.local/share/ai-tools/bin, so they stay on that Node after nvm use; pnpm follows the active Node. The launchers point at a specific Node version, so run ./update.sh again after you change the nvm default.
It does not update nvm or installed Python versions. Pass --skills to also update the skills submodule to its latest:
./update.sh --skillsThe submodule bump then shows as a pending change in this repository, ready to commit.
Machine-specific shell configuration belongs in:
~/.zshenv.localfor environment variables, PATH entries, and secrets~/.zshrc.localfor interactive aliases and prompt changes
The installer creates these files from the included examples when they do not already exist and never overwrites them.
After adding files to a Stow package, re-link it from the repository root:
stow --no-folding --restow zsh~/.local/share/ai-tools/bin— launchers pinning AI tools to the default nvm Node (written byscripts/install-npm-globals.sh)~/.dotfiles-backup-<timestamp>— conflicting config backups made by stow-sync; they accumulate and are never cleaned automatically~/.zshenv.local/~/.zshrc.local— machine-specific overrides, never overwritten
EDITOR and VISUAL default to vim; override them in ~/.zshenv.local.
Use e to open the current directory in Zed (zed .).