My macOS and Linux setup, tracked with git straight in $HOME with no symlinks.
curl -fsSL https://raw.githubusercontent.com/connorads/dotfiles/master/install.sh | bashThis bootstraps macOS, Linux or Codespaces. It targets my machines: users connor/connorads and the hosts listed in install.sh. To fork it, edit the host configs in flake.nix and the VALID_DARWIN/VALID_HM lists in install.sh. On a fresh machine, set DARWIN_HOST or HM_HOST to pick the config.
The stack is nix-darwin or home-manager for packages, Homebrew for macOS apps, mise for runtimes and hk for commit checks.
Symlink managers keep a second copy of the tree and break when a tool replaces a file. Here the git metadata lives in ~/git/dotfiles and core.worktree points at $HOME, so tracked files are the real files. ~/.gitignore ignores everything by default, so an existing home directory stays untouched until a path is un-ignored. Ahead-behind and push state work as normal in LazyGit.
dotfiles add .somefile # after un-ignoring it in ~/.gitignore
dotfiles rm --cached .somefile
up # bump mise.lock and flake.lock, upgrade, rebuild
drs # rebuild macOS (darwin-rebuild switch)
hms # rebuild Linux (home-manager switch)BB loads personal instructions from the tracked .bb/AGENTS.md. BB maintenance covers local configuration and plugins.
Telemetry controls covers persistent CLI and desktop opt-outs.
The Mac mini runs BB independently of desktop login. Remote access describes service ownership and verification. Its system daemon uses local mise deployment pins, independent of the shared tool lock.
Claude, Codex and pi run in tmux panes. Each window tab shows a state dot for its agents: ◐ working, ◆ needs you, ● ready, ○ idle.
- Setup: host selection, manual install, migration, your own repo from scratch
- System platforms: Nix targets, cleanup, sudo with YubiKey
up, mise and lockfiles- Supply-chain controls
- Commands
- Command credentials
- Decision records
- StreakyCobra on Hacker News, for avoiding symlinks with a bare repo
- zwyx's blog post, for the Sublime Merge integration
- Using a YubiKey for sudo via PAM
