Two operating systems, one dotfiles repo, no conditionals
One dotfiles repo for macOS workstations and Linux servers, without scattering OS conditionals through twenty files.
The directory layout does the branching instead. home/ symlinks into $HOME,
config/ into ~/.config, bin/ into ~/.bin, with vim/, git_template/
and ctags.d/ as subtree symlinks. Agent settings split the same way:
claude/settings.json is the shared base and claude/local/{mac,linux}.json is
the overlay symlinked to ~/.claude/settings.local.json. Two bootstraps,
install.sh for macOS with a Brewfile and install-linux.sh symlink-only for
Debian, so neither tests for the OS mid-file. Both are idempotent, which is what
makes re-running one on a machine you already use safe.
The service snapshots are deliberately inert. services/launchd/ and
services/systemd/ hold unit files as backups that are never auto-installed,
because a bootstrap that starts background services on a machine you just logged
into is a bad surprise.
New auto-approved permissions land in the local overlay uncommitted, and getting them committed is a manual step.