Shared shell and git config for the four-box fleet: m5pro and m4max (macOS), vinelab and fedora (Linux). All zsh.
install.sh symlinks everything into $HOME (idempotent; a real file at a target is backed up to <name>.pre-dotfiles). Files that support ~/.config live there instead, to keep $HOME less crowded.
git clone https://github.com/jakesciotto/dotfiles ~/github/dotfiles
~/github/dotfiles/install.sh
.zshrc-- shared core: fleet identity + prompt, aliases, functions. Sources the OS layer, then an optional host layer.os/darwin.zsh,os/linux.zsh-- OS-specific: brew and g-prefixed coreutils vs native GNU tools.hosts/<box>.zsh-- optional per-box one-offs, sourced last. Intentional divergence goes here, tracked, instead of hand-edits on the box.config/dircolors-- terminal colorization rules (256-color), shared by bothgdircolors(mac) anddircolors(linux). Links to~/.config/dircolors; the OS layers pass that path explicitly.config/git/config-- identity + per-repo PostHog includes. Personal (gmail) is the default on every box; work dirs override viaincludeIf.config/git/posthog-- work identity include for PostHog repo dirs.config/git/signing-- SSH commit signing.install.shlinks it only when~/.ssh/id_ed25519_signing.pubexists on the box;config/git/configloads it with a plaininclude, and git ignores the missing file everywhere else. A box without the key never seescommit.gpgsign=true.~/.config/git/local-- machine-local include, never tracked: credential helpers (gh auth git-credentialpaths differ per box) and any box-specific overrides..vimrc-- yanked a good .vimrc from online.hammerspoon/init.lua-- mac only; bindsCmd+Shift+Vto clean-paste (strips leading whitespace from clipboard before pasting)config/iterm2/fleet.json-- mac only; iTerm2 Dynamic Profile namedFleet: Menlo 11,xterm-256color,Cmd+BackspacesendsCtrl-U. Links into~/Library/Application Support/iTerm2/DynamicProfiles/; every setting not listed inherits from the box's default profile. Set it as default once: Settings > Profiles > Fleet > Other Actions > Set as Default. iTerm2 reloads the folder on change; after editing the file,touchthe link or restart iTerm2.Brewfile-- mac only;brew bundle --file ~/github/dotfiles/Brewfile.install.shdoes not run it.scripts/preview-dir-colors.sh-- prints everyconfig/dircolorsrule in its own colorarchive/-- not deployed, historical reference
Each box shows its fleet name in the prompt, in its own color: m5pro 212, m4max 39, vinelab 120, fedora 196. The name comes from host.name in ~/.claude/settings.local.json (seeded by claude-config's bootstrap.sh), because hostnames are DHCP-unreliable on the Macs. Fallback is $HOST.
- Git reads
~/.config/git/config, but only when~/.gitconfigdoes not exist.install.shremoves the old~/.gitconfiglink for you. If a box has a real~/.gitconfig, the script leaves it and the new config stays inert. - Work repos are matched by
includeIf "gitdir:..."blocks inconfig/git/config(posthog, posthog.com, gtm-toolkit, runbooks). Add one block per new work repo dir. - Verify:
git -C ~/github/posthog config user.email->jake.s@posthog.com; anywhere else -> gmail. - GitHub squash-merges attribute commits by the account's verified email, independent of this local config. Keep
jake.s@posthog.comverified at github.com/settings/emails.
- Install:
brew install --cask hammerspoon - Launch once. Grant Accessibility permission: System Settings → Privacy & Security → Accessibility → enable Hammerspoon.
install.shlinks the config on macOS.- Menubar icon → Reload Config. "Config loaded" toast confirms.
- Use
Cmd+Shift+Vto paste clipboard with leading whitespace stripped.Cmd+Vuntouched.