aboutsummaryrefslogtreecommitdiff
path: root/hosts/enode/impermenance.nix
diff options
context:
space:
mode:
Diffstat (limited to 'hosts/enode/impermenance.nix')
-rw-r--r--hosts/enode/impermenance.nix36
1 files changed, 36 insertions, 0 deletions
diff --git a/hosts/enode/impermenance.nix b/hosts/enode/impermenance.nix
new file mode 100644
index 0000000..9915bb1
--- /dev/null
+++ b/hosts/enode/impermenance.nix
@@ -0,0 +1,36 @@
+{ lib, ... }: {
+ boot.initrd.postDeviceCommands = lib.mkAfter ''
+ echo "Rollback running" > /mnt/rollback.log
+ mkdir -p /mnt
+ mount -t btrfs /dev/mapper/cryptroot /mnt
+
+ # Recursively delete all nested subvolumes inside /mnt/root
+ btrfs subvolume list -o /mnt/root | cut -f9 -d' ' | while read subvolume; do
+ echo "Deleting /$subvolume subvolume..." >> /mnt/rollback.log
+ btrfs subvolume delete "/mnt/$subvolume"
+ done
+
+ echo "Deleting /root subvolume..." >> /mnt/rollback.log
+ btrfs subvolume delete /mnt/root
+
+ echo "Restoring blank /root subvolume..." >> /mnt/rollback.log
+ btrfs subvolume snapshot /mnt/root-blank /mnt/root
+
+ umount /mnt
+ '';
+
+ # Use /persist as the persistence root, matching Disko's mountpoint
+ environment.persistence."/persist" = {
+ hideMounts = true;
+ directories = [
+ "/var/lib/backups"
+ "/var/lib/headscale"
+ "/var/lib/caddy" # for certs
+ ];
+ files = [
+ "/etc/machine-id"
+ "/etc/shadow"
+ "/etc/passwd"
+ ];
+ };
+}