about summary refs log tree commit diff
diff options
context:
space:
mode:
authorGriffin Smith <grfn@gws.fyi>2020-07-03T00·02-0400
committerglittershark <grfn@gws.fyi>2020-07-03T00·07+0000
commit6cabc4289c13776aa61ebcb81f15db830c63ebf7 (patch)
tree0cf3e82098339a1cea0ea649f6182db601857165
parent5c96703765ba68b10f0bba8200d801e1ed09fe5e (diff)
feat(gs:system): steal tazjin's rebuilder script r/1181
gonna use this instead of nixos-rebuild switch, in part to get away from
global nixpkgs pins.

Change-Id: I46e2951660465790adfdf75e6e3413b5c2dfd7c7
Reviewed-on: https://cl.tvl.fyi/c/depot/+/886
Reviewed-by: glittershark <grfn@gws.fyi>
Reviewed-by: BuildkiteCI
Tested-by: BuildkiteCI
-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