From d22a2336c19fc1fd08e3b1f9d88629b319558cab Mon Sep 17 00:00:00 2001 From: sommerfeld Date: Wed, 20 May 2026 13:56:09 +0100 Subject: feat(bootstrap): install nix + Home-Manager on Arch host (p8) Append two steps to the root bootstrap.sh: 5a. install nix via the Determinate Systems multi-user installer (same as remote-dev/nix; gives us a proper nix-daemon.service). 5b. chsh to ~/.nix-profile/bin/zsh after appending to /etc/shells. Add a 'just nix-switch' recipe that auto-picks the host vs vm profile based on /etc/os-release ID, and wire it into 'just init' and 'just sync' so day-to-day reconciliation also re-applies Home-Manager. The recipe is a no-op when nix isn't installed, so it stays safe for pre-bootstrap states and for hosts where the user opts out. Phase 8 of the nix-on-host migration plan. --- justfile | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) (limited to 'justfile') diff --git a/justfile b/justfile index 8cb4dc6..fa80823 100644 --- a/justfile +++ b/justfile @@ -6,20 +6,39 @@ default: # Setup # ═══════════════════════════════════════════════════════════════════ -# First-time machine setup: regenerate chezmoi config, install git hooks, deploy dotfiles, install base packages, enable curated units -init: _chezmoi-init _install-hooks apply (pkg-apply "base") unit-apply +# First-time machine setup: regenerate chezmoi config, install git hooks, deploy dotfiles, install base packages, enable curated units, switch Home-Manager +init: _chezmoi-init _install-hooks apply (pkg-apply "base") unit-apply nix-switch # ═══════════════════════════════════════════════════════════════════ # Day-to-day # ═══════════════════════════════════════════════════════════════════ -# Reconcile everything: deploy dotfiles + /etc, top up packages, enable curated units -sync: apply pkg-fix unit-apply +# Reconcile everything: deploy dotfiles + /etc, top up packages, enable curated units, sync Home-Manager +sync: apply pkg-fix unit-apply nix-switch # Deploy dotfiles AND /etc atomically (chezmoi apply; /etc handled by onchange template) apply: chezmoi apply -S . -v +# Apply Home-Manager profile (host on Arch, vm on Ubuntu remote-dev). Falls + +# back to a no-op when nix isn't installed (pre-bootstrap state). +nix-switch: + #!/bin/sh + set -eu + if ! command -v nix >/dev/null 2>&1; then + echo "nix not installed; skipping home-manager switch" >&2 + exit 0 + fi + profile=host + [ -f /etc/os-release ] && . /etc/os-release || true + case "${ID:-}" in + ubuntu|debian) profile=vm ;; + esac + nix --extra-experimental-features 'nix-command flakes' \ + run home-manager/master -- \ + switch --impure --flake "{{ justfile_directory() }}/nix#${profile}" -b backup + # ═══════════════════════════════════════════════════════════════════ # Updates # ═══════════════════════════════════════════════════════════════════ -- cgit v1.3.1