nanuqsaurus/modules/system/justfile.nix
randogoth 86b5c2422e just: parameterize update recipe (system/home/both)
`just update system` re-locks + rebuilds the NixOS system flake,
`just update home` re-locks + switches the Home Manager flake, and
`just update` with no arg does both (system first). Previously update
only touched the system flake, leaving the Home Manager side stale.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-28 11:23:26 +03:00

88 lines
2.1 KiB
Nix

{ ... }:
let
justfileText = ''
[no-cd]
manage module="":
#!/usr/bin/env bash
set -euo pipefail
if [ -z "{{module}}" ]; then
$EDITOR ~/.config/home-manager/home.nix;
else
$EDITOR ~/.config/home-manager/modules/{{module}}.nix;
fi
[no-cd]
switch:
home-manager switch --flake ~/.config/home-manager#$USER
[no-cd]
rebuild:
sudo nixos-rebuild switch --flake "''${NIXOS_FLAKE:-/etc/nixos}#$HOSTNAME"
[no-cd]
clean:
nix-collect-garbage -d
[no-cd]
update target="":
#!/usr/bin/env bash
set -euo pipefail
update_system() {
sudo nix flake update --flake "''${NIXOS_FLAKE:-/etc/nixos}"
just rebuild
}
update_home() {
nix flake update --flake "''${XDG_CONFIG_HOME:-$HOME/.config}/home-manager"
just switch
}
case "{{target}}" in
system) update_system ;;
home) update_home ;;
"") update_system; update_home ;;
*)
echo "usage: just update [system|home] (empty = both)" >&2
exit 1
;;
esac
[no-cd]
init-home:
#!/usr/bin/env bash
set -euo pipefail
src="/etc/skel/.config/home-manager"
dst="''${XDG_CONFIG_HOME:-$HOME/.config}/home-manager"
mkdir -p "$dst"
chmod 700 "$dst" || true
overwrite="0"
if [[ "''${FORCE:-0}" == "1" ]]; then
overwrite="1"
elif [[ -e "$dst/flake.nix" || -e "$dst/home.nix" ]]; then
read -r -p "Home Manager files already exist in $dst. Overwrite? [y/N] " ans
case "''${ans:-}" in
y|Y|yes|YES) overwrite="1" ;;
*) overwrite="0" ;;
esac
fi
for f in flake.nix home.nix; do
if [[ "$overwrite" == "1" || ! -e "$dst/$f" ]]; then
install -m 600 "$src/$f" "$dst/$f"
echo "copied $f -> $dst/$f"
else
echo "kept $dst/$f"
fi
done
'';
in
{
# Global Just recipes
environment.etc."just/justfile".text = justfileText;
}