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)Telemetry controls covers persistent CLI and desktop opt-outs.
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
- 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
