2024-10-30 19:45:26 +10:00
|
|
|
#!/usr/bin/env bash
|
2025-02-11 15:47:56 +10:00
|
|
|
set -e
|
|
|
|
|
|
2025-07-07 22:38:59 +10:00
|
|
|
# TODO: use `nixos-rebuild build-vm`
|
|
|
|
|
|
2025-02-11 15:47:56 +10:00
|
|
|
usage="Usage: $(basename $0) [OPTIONS]
|
|
|
|
|
|
|
|
|
|
Options:
|
|
|
|
|
-f, --fresh Remove old content in the nixstore (good for debugging)
|
|
|
|
|
-b, --bootloader Reinstall the bootloader
|
2025-02-24 13:19:36 +10:00
|
|
|
-r, --remote Locally build and remotely deploy Colmena hive
|
2025-02-11 15:47:56 +10:00
|
|
|
-h, --help Show this message (^_^)"
|
|
|
|
|
|
|
|
|
|
# delete all cached entries
|
|
|
|
|
# to make the system from scratch
|
|
|
|
|
collect_garbage () {
|
|
|
|
|
sudo nix-collect-garbage --delete-old
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
rebuild_flake () {
|
|
|
|
|
# make sure all changes are visible to nixos
|
|
|
|
|
git add . --verbose
|
2025-07-19 23:22:24 +10:00
|
|
|
local FLAGS=
|
2025-02-11 15:47:56 +10:00
|
|
|
if [ "$1" = "reinstall-bootloader" ]; then
|
2025-07-21 01:18:51 +10:00
|
|
|
FLAGS="--install-bootloader"
|
2025-07-19 23:22:24 +10:00
|
|
|
# sudo nixos-rebuild switch --flake . --install-bootloader
|
2025-02-26 08:42:18 +10:00
|
|
|
# STC_DISPLAY_ALL_UNITS=1 (verbose, show output of all units)
|
2025-02-11 15:47:56 +10:00
|
|
|
fi
|
2025-07-19 23:22:24 +10:00
|
|
|
|
|
|
|
|
# LOG="$(mktemp /tmp/rebuild-XXXXXXXX)"
|
|
|
|
|
LOG="./rebuild.log"
|
|
|
|
|
echo "[*] Deployment stdout(&1) directed to $LOG"
|
2025-07-21 01:18:51 +10:00
|
|
|
sudo nixos-rebuild switch --flake . "$FLAGS" 2>&1 | tee $LOG
|
2025-07-19 23:22:24 +10:00
|
|
|
#nixos-rebuild build --flake .# --cores 8 -j 1
|
2025-02-11 15:47:56 +10:00
|
|
|
}
|
|
|
|
|
|
2025-02-24 13:19:36 +10:00
|
|
|
deploy_hive () {
|
|
|
|
|
echo "[+] Adding keys to ssh-agent"
|
|
|
|
|
ssh-add ~/.ssh/id_hyrule
|
|
|
|
|
printf "\n"
|
|
|
|
|
|
|
|
|
|
git add . --verbose
|
|
|
|
|
# Deploy to all Colmena hives
|
|
|
|
|
colmena build --experimental-flake-eval
|
|
|
|
|
colmena apply --experimental-flake-eval
|
|
|
|
|
# colmena apply --on hyrule --experimental-flake-eval
|
|
|
|
|
}
|
|
|
|
|
|
2025-02-11 15:47:56 +10:00
|
|
|
# check which flags were given
|
|
|
|
|
flag_fresh=false
|
|
|
|
|
flag_bootloader=false
|
|
|
|
|
for flag in "$@"; do
|
|
|
|
|
case "$flag" in
|
2025-02-24 13:19:36 +10:00
|
|
|
-r|--remote)
|
|
|
|
|
deploy_hive
|
|
|
|
|
exit 0 ;;
|
2025-02-11 15:47:56 +10:00
|
|
|
-f|--fresh)
|
|
|
|
|
flag_fresh=true ;;
|
|
|
|
|
-b|--bootloader)
|
|
|
|
|
flag_bootloader=true ;;
|
|
|
|
|
-h|--help)
|
|
|
|
|
echo "$usage"
|
|
|
|
|
exit 0 ;;
|
|
|
|
|
*)
|
|
|
|
|
echo "[!] Unknown flag \"$flag\""
|
|
|
|
|
exit 1 ;;
|
|
|
|
|
esac
|
|
|
|
|
done
|
|
|
|
|
|
|
|
|
|
# delete cached items in nixstore
|
|
|
|
|
if [ "$flag_fresh" = true ]; then
|
2025-02-19 12:14:25 +10:00
|
|
|
collect_garbage
|
2025-02-11 15:47:56 +10:00
|
|
|
exit 0
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
# nixos-rebuild switch ...
|
|
|
|
|
if [ "$flag_bootloader" = true ]; then
|
2025-02-19 12:14:25 +10:00
|
|
|
collect_garbage
|
2025-02-11 15:47:56 +10:00
|
|
|
rebuild_flake "reinstall-bootloader"
|
|
|
|
|
else
|
|
|
|
|
rebuild_flake
|
|
|
|
|
fi
|