Manage macOS using Nix, nix-darwin and Home Manager.
Set hostname to a known (configured) value:
- m4-mbp (macOS)
- macos-virtual (macOS)
- drummer (NixOS)
- xcel (Debian, Home Manager)
- omarchy (Arch/Omarchy, standalone Home Manager)
For Omarchy, use the standalone Home Manager guide, not
the macOS bootstrap or shared dotfile setup below. Its login is johna, not
john.allen. See the Fish guide for the shared shell
setup, the agent guide for Pi and Claude Code
work/personal profiles, and the VNC guide for direct Tailscale access
to its existing desktop.
Install Nix:
sh <(curl -L https://nixos.org/nix/install) --daemonInstall command line tools for git (brute force):
xcode-select --installGive Terminal.app "Full Disk Access" in System Preferences > Privacy & Security > Privacy > Full Disk Access. This is required for some of the I've disabled this for now.nix-darwin system settings to apply successfully.
Install Homebrew:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"Clone system-config
mkdir -p ~/dev/src
cd ~/dev/src
git clone https://github.com/johnallen3d/system-config.git
cd system-configSecrets are managed in the Doppler system-config project. After authenticating the Doppler CLI, initialize this repository using its checked-in defaults:
doppler login
doppler setupRun commands that need secrets with doppler run -- <command>.
Install nix-darwin and initial apply:
nix \
--extra-experimental-features "flakes nix-command" \
run nix-darwin \
-- switch --flake ~/dev/src/system-config# on macOS (run from this repository)
mise update-system
# skip flake input update
mise update-system --switch-only
# also refresh Pi packages and the work Claude Code agent-kit plugin
mise update-system --switch-only --harness-refresh
# refresh both harnesses without rebuilding (or run mise run harness-refresh)
mise update-system --harness-only
# restart Claude Code to load the updated plugin
# on NixOS
sudo nixos-rebuild switch --impure --flake ~/dev/src/system-config/.#
# on Debian/Orb (using home-manager)
home-manager switch -b backup --flake ~/dev/src/system-config/.#john.allen@xcel --impurenix flake update --commit-lock-file
# or from another directory
pushd ~/dev/src/system-config; nix flake update --commit-lock-file; nixswitch; popd