diff --git a/morph/grid/hro-cloud/config.json b/morph/grid/hro-cloud/config.json
index 0048fd8949a95a33350a07440b8f67c6e5e49250..191e375166967d4f7d06833196fbac209615c940 100644
--- a/morph/grid/hro-cloud/config.json
+++ b/morph/grid/hro-cloud/config.json
@@ -15,5 +15,5 @@
 , "allowedChargeOrigins": [
     "https://leastauthority.com"
   ]
-, "monitoringGoogleOAuthClientID": "802959152038-6esn1c6u2lm3j82lf29jvmn8s63hi8dc.apps.googleusercontent.com"
+, "monitoringGoogleOAuthClientID": ""
 }
diff --git a/morph/grid/hro-cloud/storage001-hardware.nix b/morph/grid/hro-cloud/storage001-hardware.nix
index 666c250afce0bf0902427e407c2b714aaefdcb3c..485ef24d83950f4e92bcd0aa043b0a3e461d6c6b 100644
--- a/morph/grid/hro-cloud/storage001-hardware.nix
+++ b/morph/grid/hro-cloud/storage001-hardware.nix
@@ -1,6 +1,4 @@
-# Do not modify this file!  It was generated by ‘nixos-generate-config’
-# and may be overwritten by future invocations.  Please make changes
-# to /etc/nixos/configuration.nix instead.
+# NixOS configuration specific to this node
 { config, lib, pkgs, ... }:
 
 {
diff --git a/morph/grid/hro-cloud/storage002-hardware.nix b/morph/grid/hro-cloud/storage002-hardware.nix
index e12894f93f4f91339d4af0a9942fab99ea6cb942..87ba570133a0d36df174a62454d35c364308e13f 100644
--- a/morph/grid/hro-cloud/storage002-hardware.nix
+++ b/morph/grid/hro-cloud/storage002-hardware.nix
@@ -1,6 +1,4 @@
-# Do not modify this file!  It was generated by ‘nixos-generate-config’
-# and may be overwritten by future invocations.  Please make changes
-# to /etc/nixos/configuration.nix instead.
+# NixOS configuration specific to this node
 { config, lib, pkgs, ... }:
 
 {
diff --git a/morph/grid/hro-cloud/storage003-hardware.nix b/morph/grid/hro-cloud/storage003-hardware.nix
index 5192883c7659c186e03d0669e99be169d7478a77..0ebbf232e6c09f05dd85548f4eb4c1a6de95462b 100644
--- a/morph/grid/hro-cloud/storage003-hardware.nix
+++ b/morph/grid/hro-cloud/storage003-hardware.nix
@@ -1,6 +1,4 @@
-# Do not modify this file!  It was generated by ‘nixos-generate-config’
-# and may be overwritten by future invocations.  Please make changes
-# to /etc/nixos/configuration.nix instead.
+# NixOS configuration specific to this node
 { config, lib, pkgs, modulesPath, ... }:
 
 {
diff --git a/morph/grid/production/public-keys/users.nix b/morph/grid/production/public-keys/users.nix
index f01fa8a8c4aacab521032b38c5cfc7a93f532cbe..88e934acea801c65086777ddb2f79834fb0ade86 100644
--- a/morph/grid/production/public-keys/users.nix
+++ b/morph/grid/production/public-keys/users.nix
@@ -1,8 +1,9 @@
 let
-  jcalderone = ["ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGN4VQm3BIQKEFTw6aPrEwNuShf640N+Py2LOKznFCRT exarkun@bottom"];
   flo = ["ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAII6EUU/KNDr7y3m5OVWBZAuPiMJ4us3YOBEhxpG29yPN flo@la"];
+  last-resort = [ "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIE1hy9mPkJI+7mY2Uq6CLpuFMMLOTfiY2sRJHwpihgRt cardno:26 269 859 - Last Resort A-Key"
+                  "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJPYMUVNuWr2y+FL1GxW6S6jb3BWYhbzJ2zhvQVKu2ll cardno:23 845 763 - Last Resort C-key"
+                ];
 in {
-  "root" = jcalderone ++ flo;
-  "jcalderone" = jcalderone;
-  "flo" = flo;
+  "root" = flo ++ last-resort;
+  inherit  flo    last-resort;
 }
diff --git a/morph/grid/production/storage001-hardware.nix b/morph/grid/production/storage001-hardware.nix
index c6482f3e8e1c4ac6a006935fc6b8cee74ed80dfa..51c5433051343717d2782d815beb8df7bae534b5 100644
--- a/morph/grid/production/storage001-hardware.nix
+++ b/morph/grid/production/storage001-hardware.nix
@@ -1,6 +1,4 @@
-# Do not modify this file!  It was generated by ‘nixos-generate-config’
-# and may be overwritten by future invocations.  Please make changes
-# to /etc/nixos/configuration.nix instead.
+# NixOS configuration specific to this node
 { config, lib, pkgs, ... }:
 
 {
diff --git a/morph/grid/production/storage002-hardware.nix b/morph/grid/production/storage002-hardware.nix
index 009fb0d769603e50096adb7fdec81ff19dff80b0..cf812f1a6468d986ad9f8de9938d1ec05430a8ea 100644
--- a/morph/grid/production/storage002-hardware.nix
+++ b/morph/grid/production/storage002-hardware.nix
@@ -1,6 +1,4 @@
-# Do not modify this file!  It was generated by ‘nixos-generate-config’
-# and may be overwritten by future invocations.  Please make changes
-# to /etc/nixos/configuration.nix instead.
+# NixOS configuration specific to this node
 { config, lib, pkgs, ... }:
 
 {
diff --git a/morph/grid/production/storage003-hardware.nix b/morph/grid/production/storage003-hardware.nix
index e70522d3b7c2934ca741325dd57c322d0af118e1..505209a6357268670930f1297c6cfc88017107a3 100644
--- a/morph/grid/production/storage003-hardware.nix
+++ b/morph/grid/production/storage003-hardware.nix
@@ -1,6 +1,4 @@
-# Do not modify this file!  It was generated by ‘nixos-generate-config’
-# and may be overwritten by future invocations.  Please make changes
-# to /etc/nixos/configuration.nix instead.
+# NixOS configuration specific to this node
 { config, lib, pkgs, modulesPath, ... }:
 
 {
diff --git a/morph/grid/production/storage004-hardware.nix b/morph/grid/production/storage004-hardware.nix
index 582dd73762af5530bcf2f44b8ae06c797ee135e1..4f55590ec45f05008d78ac9046ebfe8fe0524198 100644
--- a/morph/grid/production/storage004-hardware.nix
+++ b/morph/grid/production/storage004-hardware.nix
@@ -1,6 +1,4 @@
-# Do not modify this file!  It was generated by ‘nixos-generate-config’
-# and may be overwritten by future invocations.  Please make changes
-# to /etc/nixos/configuration.nix instead.
+# NixOS configuration specific to this node
 { config, lib, pkgs, ... }:
 
 {
diff --git a/morph/grid/production/storage005-hardware.nix b/morph/grid/production/storage005-hardware.nix
index 0a9a8a2ada689fb79a680051abad6dedf54bdf09..50217b2c1fe81d82a0674e180cf3a44570636f83 100644
--- a/morph/grid/production/storage005-hardware.nix
+++ b/morph/grid/production/storage005-hardware.nix
@@ -1,6 +1,4 @@
-# Do not modify this file!  It was generated by ‘nixos-generate-config’
-# and may be overwritten by future invocations.  Please make changes
-# to /etc/nixos/configuration.nix instead.
+# NixOS configuration specific to this node
 { config, lib, pkgs, ... }:
 
 {
diff --git a/morph/grid/testing/public-keys/users.nix b/morph/grid/testing/public-keys/users.nix
index fb7ba902aa8ebcec4ff798c36af5215641f7e63b..81691ee5500937c13f7e18a0545ae9212bf098a1 100644
--- a/morph/grid/testing/public-keys/users.nix
+++ b/morph/grid/testing/public-keys/users.nix
@@ -1,12 +1,12 @@
 let
-  jcalderone = ["ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIN4GenAY/YLGuf1WoMXyyVa3S9i4JLQ0AG+pt7nvcLlQ exarkun@baryon"];
   flo = ["ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAII78HGtpjFxQo7wol85hqfoCqjdK9Nk7+82rwttyLHpe flo@la-staging"];
   bdonneaux = ["ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGgpTXgxEqQPSl17NzJkAJgeDSFS1Ke/qjCuVMTZLlna benoit@leastauthority.com" "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIZtWY7t8HVnaz6bluYsrAlzZC3MZtb8g0nO5L5fCQKR benoit@leastauthority.com"];
-  shae = ["ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICBODAgs7pGHfxkIZ8mZABUd1LlS9WhxGy0/6FvhlPYq shae@scannedinavian.com"];
   chris = ["ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDT3/sSNoJP3E17oFTYjHN+uOwTY1wVox9tff97iueIo4V88eAc/oXKETiwPkr33qbGwuoXKkxIXJVz8rnNtO6IjTm9qfgzPiRAUJjew8bunL+V7SbhQIv7nk1fyV/efaENElG8bdmzTEpgwGcEnyibqvHJSYX6W+dMCz3G1t/lv97if3ohZKENHuMC5hLfJbGHSGKFO5XdjEjeda9lDd9Ac8XyruaL7iqEefsC7GuUgNRn8V83vwuJMDAC2xXC2V11M65VkGs6WPAct2+llzTtYbsxjxVZXC4yU42eXJYfBZEcCTPtJsKJxQCqSgFOEUnOYiuS6p4Q7a97BfHJ9S9oOV8U/e7YeE4b9Q8TPNzvKTPBAsuKyLyNYekBDB7fOTFziuJy/L578EaDv2BxrsfyCQqtjLko6TIAUbbHvce8urWNvj7H+fNXaURLIQmSTOv/mMl+omkvbP3MNgSFdENpCZaHSTiDxjygf52xcinj6Ijf3uDvPY2UjIRrbWSNV4MYpZDfkqt9THY4QibmxhER/YGvY+0zfiYGqQpQMMbTUB9hhoO5AHnnhMszNG2V9i70VqWyEMsS+Sr1+gOVAPraLp/tqHaqZk7/c4DDpILjA+4davTL6lgaiewx8a0ZEPAKZCZkOMovZKwkVIjyMvfekUkf1cF+QigJPZzcWSWEjQ== cardno:000608671823"];
-  meejah = ["ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEfCDWivT0SCWoMyxUslX0upuhR4X3rNFh5rc/lCcBbe meejah@buyan" "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDkDNUL9OPvTNTijHovvLwdmgATvezS9tkToKrO6U9Gq17SBfFcb2a1nAADt9nmHtu3KExGqGrJeNkoMqGsbo+Y/BCgAz7yutL0PkoDQ4xRcl88kkk+4NtpWFhXelITIJopaNOW5E2qzkvt8FNXKnUfJpmJh+0v1wYseGKMSUncSYTb3vEViVj3DwgLgzQi/YxI/OrEKML0B+vA+n8t0XrqiHh5Ryathk5DFpss5P+0dfWC4PoJZuWbAdQsxqTm7fqmPrX7IfahZpvFHpru2OUICc2sxzoJI7//3bdXfFGkMh0cKG2pRIy2KSJ0IOnLiaACRHeIG2zcnKJLkx6Xbzfr mike@mantle"];
+  last-resort = [ "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIE1hy9mPkJI+7mY2Uq6CLpuFMMLOTfiY2sRJHwpihgRt cardno:26 269 859 - Last Resort A-Key"
+                  "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJPYMUVNuWr2y+FL1GxW6S6jb3BWYhbzJ2zhvQVKu2ll cardno:23 845 763 - Last Resort C-key"
+                ];
 in
   {
-    "root" = jcalderone ++ flo ++ bdonneaux ++ shae ++ chris ++ meejah;
-    inherit  jcalderone    flo    bdonneaux    shae    chris    meejah;
+    "root" = flo ++ bdonneaux ++ chris ++ last-resort;
+    inherit  flo    bdonneaux    chris    last-resort;
   }
diff --git a/morph/lib/issuer-aws.nix b/morph/lib/issuer-aws.nix
index 7455a4375186ec4cf01947d4efc77d5ab9adceff..afda7930ee7dce8faf1d85045f2b379384d3c48d 100644
--- a/morph/lib/issuer-aws.nix
+++ b/morph/lib/issuer-aws.nix
@@ -42,4 +42,8 @@
   # Turn on automatic optimization of nix store
   # https://nixos.wiki/wiki/Storage_optimization
   nix.settings.auto-optimise-store = true;
+
+  # Most of the time, we have ample free & usable memory, but when upgrading
+  # software, we sometimes run out because of Nix.  This is supposed to help:
+  zramSwap.enable = true;
 }
diff --git a/nixos/modules/monitoring/exporters/node.nix b/nixos/modules/monitoring/exporters/node.nix
index 8f183c112cd8246c835c6934aa073309d76a3609..bff40603c68c558e5b50b082c881e9a5af92af10 100644
--- a/nixos/modules/monitoring/exporters/node.nix
+++ b/nixos/modules/monitoring/exporters/node.nix
@@ -77,7 +77,7 @@ in {
     ) ++ (
       optionals (mountsFileSystemType "xfs") [ "xfs" ]
     ) ++ (
-      optionals (mountsFileSystemType "zfs" || elem "zfs" config.boot.supportedFilesystems) [ "zfs" ]
+      optionals (mountsFileSystemType "zfs" || config.boot.supportedFilesystems.zfs or false) [ "zfs" ]
     );
   };
 }
diff --git a/nixos/modules/monitoring/server/loki.nix b/nixos/modules/monitoring/server/loki.nix
index 25f2b548dc882d0bc62543d3972d4e7c2017f742..e9a3056b204e2552351a047ee39152ec562d8390 100644
--- a/nixos/modules/monitoring/server/loki.nix
+++ b/nixos/modules/monitoring/server/loki.nix
@@ -49,7 +49,6 @@ in {
             final_sleep = "0s";
           };
           chunk_target_size = 1536000; # As per https://grafana.com/docs/loki/v2.2.1/best-practices/
-          max_transfer_retries = 0; # Chunk transfers disabled
         };
 
         schema_config = {
@@ -65,6 +64,10 @@ in {
           }];
         };
 
+        limits_config = {
+          allow_structured_metadata = false;
+        };
+
         table_manager = {
           retention_deletes_enabled = true;
           retention_period = logRetention;
diff --git a/nixpkgs.json b/nixpkgs.json
index ba0ac988eff8de6113851f8cff29f88e4fa60354..69da4fe812a072917560afdd54067bbf035b2e42 100644
--- a/nixpkgs.json
+++ b/nixpkgs.json
@@ -1,5 +1,5 @@
 {
   "name": "source",
-  "url": "https://releases.nixos.org/nixos/23.11/nixos-23.11.2962.b8dd8be3c790/nixexprs.tar.xz",
-  "sha256": "053dwx7smszz3a0khbm6zvf9pvy5xz1ifdk9jx6gz5cmwjab0gmp"
+  "url": "https://releases.nixos.org/nixos/24.05/nixos-24.05.2780.53e81e790209/nixexprs.tar.xz",
+  "sha256": "1h593fbz4dc54ns4n2v6v4w03m6m1vm595c1nynwq720zvfpbfq1"
 }
\ No newline at end of file
diff --git a/tools/update-nixpkgs b/tools/update-nixpkgs
index f20acdb1fefbd63ee8a9255d9eae633f2b998b1f..3d0f18f7cc617a02c09cb8590874ea178100964e 100755
--- a/tools/update-nixpkgs
+++ b/tools/update-nixpkgs
@@ -10,7 +10,7 @@ from ps_tools import get_url_hash
 # We pass this to builtins.fetchTarball which only supports sha256
 HASH_TYPE = "sha256"
 
-DEFAULT_CHANNEL = "nixos-23.11"
+DEFAULT_CHANNEL = "nixos-24.05"
 CHANNEL_URL_TEMPLATE = "https://channels.nixos.org/{channel}/nixexprs.tar.xz"