New Machine Setup¶
This is where haven shines. One command takes you from a fresh OS install to a fully configured development environment.
The one-command setup¶
# Install haven
curl -fsSL https://raw.githubusercontent.com/johnstegeman/haven/main/install.sh | sh
# Clone your environment repo and apply everything
haven init gh:you/my-env --apply
haven init --apply clones your repo, then runs haven apply — deploying your dotfiles, running Homebrew, triggering mise, and deploying AI skills in sequence.
Selecting a profile¶
If you have multiple profiles (work, personal, minimal), specify which to use:
haven init gh:you/my-env --apply --profile work
haven init gh:you/my-env --apply --profile personal
See Profiles & Modules for how to set up profiles.
Applying sections selectively¶
If you want to apply only certain sections:
haven apply # everything: files + brews + mise + ai skills
haven apply --files # dotfiles only
haven apply --brews # Homebrew packages only
haven apply --ai # AI skills only
Keeping your environment in sync¶
After the initial setup, staying in sync is straightforward:
# Pull the latest changes from your repo
cd ~/.local/share/haven && git pull
# Apply changes
haven apply
No haven update shortcut
haven does not have a haven update command that wraps pull + apply. This is intentional: haven does not assume your VCS workflow. If you use jj:
sh
jj git fetch && jj rebase -d main@origin && haven apply
Checking for drift after a pull¶
haven status # quick overview of what's changed
haven diff # full diff between source and live files
Re-applying externals¶
External git repos (extdir_ entries, like plugin managers) are cloned on first apply but not updated automatically. To pull updates:
haven apply --apply-externals
Complete new machine checklist¶
- Install haven
haven init gh:you/my-env --apply --profile <name>- Set up shell completions (see Installation)
- Verify:
haven status - If using 1Password:
op signin && haven apply(to render secrets into templates) - If using AI skills:
haven apply --ai