My development environment configurations and setup. Nice and simple, can be run with one script.
git clone git@github.com:robertbenjamin/env.git ~/Documents/Work/env
cd~/Documents/Work/env
./install.sh # --dry-run to see what it would do
./verify.sh # check the machine matches the repohome/ mirrors $HOME, so the directory structure is the mapping — install.sh walks the tree
and symlinks every file it finds. Editing ~/.config/fish/config.fishis editing
home/.config/fish/config.fish, so git status always shows what has drifted.
Replaced files are moved to ~/.env-backup/<timestamp>/ first. Re-running is safe.
- Fish — Git abbreviations, show/hide hidden files,
sfishto reload, autojump, paths - Starship — minimal two-line prompt with Git status
- Claude Code —
CLAUDE.md,RTK.md, settings and the rtk hook - iTerm2 — full profile, Material Palenight
- Brewfile — CLI tools and apps, all from homebrew-core
- Zsh — a fallback shell only; fish is the login shell
- mise — pins node plus global
typescript/typescript-language-server - Git — user,
autoSetupRemote,ff = only, global gitignore - gh —
coalias, ssh git protocol
install.sh runs six stages — brew, links, runtimes, claude, iterm, shell — any of
which can be run alone with --only <stage>. runtimes follows links because mise reads the
symlinked config.
Then the things that need a browser or a credential:
gh auth login --git-protocol ssh— also generates and uploads the SSH keygcloud auth login && gcloud auth application-default logincolima startbefore first container useclaude, then/login- VS Code — sign in, turn on Settings Sync
- Restart iTerm2 to pick up the repo prefs folder
- VS Code config — Settings Sync already does it
.npmrc,.yarnrc.yml,ghhosts.yml, SSH keys — tokens and credentials~/.ssh/config—id_ed25519is already in ssh's default identity list- macOS
defaults— still by hand, see below
macos-defaults.shfor keyboard repeat, Finder, Dock and screenshot settings