#!/usr/bin/env bash # Rebuild nix-darwin + home-manager. Rotates stale home-manager *.backup files # so a second switch never fails with "would be clobbered". set -euo pipefail DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -P)" ln -sfn "$DIR" ~/.dotfiles stamp="$(date +%Y%m%d-%H%M%S)" # Paths home-manager manages via home.file (regular files become out-of-store symlinks). managed=( "$HOME/.grok/config.toml" "$HOME/.grok/AGENTS.md" "$HOME/.claude/settings.json" "$HOME/.claude/CLAUDE.md" "$HOME/.codex/AGENTS.md" "$HOME/.config/opencode/AGENTS.md" "$HOME/.pi/agent/settings.json" "$HOME/.pi/agent/models.json" "$HOME/.pi/agent/AGENTS.md" "$HOME/.pi/agent/extensions/terminal-status-title.js" ) for path in "${managed[@]}"; do bak="${path}.backup" if [ -e "$bak" ] || [ -L "$bak" ]; then mv "$bak" "${bak}.${stamp}" echo "rotated stale backup: ${bak} -> ${bak}.${stamp}" fi done # Directory targets use the same backup suffix on collision. for path in \ "$HOME/.config/wezterm" \ "$HOME/.config/nvim" \ "$HOME/.config/herdr" \ "$HOME/.pi/agent/themes" \ "$HOME/.pi/agent/extensions/calm" do bak="${path}.backup" if [ -e "$bak" ] || [ -L "$bak" ]; then mv "$bak" "${bak}.${stamp}" echo "rotated stale backup: ${bak} -> ${bak}.${stamp}" fi done exec sudo darwin-rebuild switch --flake ~/.dotfiles#lt-mbp