about summary refs log tree commit diff
path: root/users/glittershark/system/system/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'users/glittershark/system/system/default.nix')
-rw-r--r--users/glittershark/system/system/default.nix31
1 files changed, 30 insertions, 1 deletions
diff --git a/users/glittershark/system/system/default.nix b/users/glittershark/system/system/default.nix
index dc9e9a7596..75e93d533b 100644
--- a/users/glittershark/system/system/default.nix
+++ b/users/glittershark/system/system/default.nix
@@ -1,7 +1,36 @@
 { depot, ... }:
 
-{
+rec {
   chupacabra = (depot.third_party.nixos {
     configuration = import ./machines/chupacabra.nix;
   }).system;
+
+  rebuilder =
+    let
+      depotPath = "/home/grfn/code/depot";
+
+      caseFor = hostname: ''
+        ${hostname})
+          echo "Rebuilding NixOS for //users/glittershark/nixos/${hostname}"
+          system=$(nix-build -E '(import ${depotPath} {}).users.glittershark.system.system.${hostname}' --no-out-link)
+          ;;
+      '';
+    in depot.third_party.writeShellScriptBin "rebuilder" ''
+      set -ue
+      if [[ $EUID -ne 0 ]]; then
+        echo "Oh no! Only root is allowed to rebuild the system!" >&2
+        exit 1
+      fi
+
+      case $HOSTNAME in
+      ${caseFor "chupacabra"}
+      *)
+        echo "$HOSTNAME is not a known NixOS host!" >&2
+        exit 1
+        ;;
+      esac
+
+      nix-env -p /nix/var/nix/profiles/system --set $system
+      $system/bin/switch-to-configuration switch
+    '';
 }