about summary refs log tree commit diff
path: root/users
diff options
context:
space:
mode:
Diffstat (limited to 'users')
-rw-r--r--users/glittershark/system/system/default.nix31
-rw-r--r--users/glittershark/system/system/modules/common.nix7
2 files changed, 37 insertions, 1 deletions
diff --git a/users/glittershark/system/system/default.nix b/users/glittershark/system/system/default.nix
index dc9e9a75961d..75e93d533bdd 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
+    '';
 }
diff --git a/users/glittershark/system/system/modules/common.nix b/users/glittershark/system/system/modules/common.nix
index c7f5055a8215..1d578e36f656 100644
--- a/users/glittershark/system/system/modules/common.nix
+++ b/users/glittershark/system/system/modules/common.nix
@@ -1,5 +1,11 @@
 { config, lib, pkgs, ... }:
 
+let
+
+  depot = import ../../../../.. {};
+
+in
+
 {
   imports =
     [
@@ -35,6 +41,7 @@
     libnotify
     file
     lm_sensors
+    depot.users.glittershark.system.system.rebuilder
   ];
 
   # Some programs need SUID wrappers, can be configured further or are