diff --git a/hosts/siit-dc/configuration.nix b/hosts/siit-dc/configuration.nix index eb1a09a..9e9c7ef 100644 --- a/hosts/siit-dc/configuration.nix +++ b/hosts/siit-dc/configuration.nix @@ -1,9 +1,13 @@ { ... }: { + networking.hostId = "f1636fe0"; imports = [ ../../shared/base.nix + + ../../shared/hardware/impermanence.nix ../../shared/hardware/vm.nix - ../../shared/disko/hetzner-ext4.nix + + ../../shared/disko/hetzner-zfs-impermanence.nix ../../servers/siit-dc.nix ]; diff --git a/shared/disko/hetzner-zfs-impermanence.nix b/shared/disko/hetzner-zfs-impermanence.nix new file mode 100644 index 0000000..0f6e361 --- /dev/null +++ b/shared/disko/hetzner-zfs-impermanence.nix @@ -0,0 +1,76 @@ +{ + disko.devices = { + disk = { + main = { + device = "/dev/sda"; + type = "disk"; + content = { + type = "gpt"; + partitions = { + boot = { + size = "1M"; + type = "EF02"; + priority = 1; + }; + ESP = { + size = "512M"; + type = "EF00"; + content = { + type = "filesystem"; + format = "vfat"; + mountpoint = "/boot"; + mountOptions = [ "umask=0077" ]; + }; + }; + zfs = { + size = "100%"; + content = { + type = "zfs"; + pool = "zroot"; + }; + }; + }; + }; + }; + }; + zpool = { + zroot = { + type = "zpool"; + rootFsOptions = { + canmount = "off"; + compression = "zstd"; + }; + datasets = { + root = { + type = "zfs_fs"; + mountpoint = "/"; + options.mountpoint = "legacy"; + postCreateHook = "zfs snapshot zroot/root@blank"; + }; + nix = { + type = "zfs_fs"; + mountpoint = "/nix"; + options.mountpoint = "legacy"; + }; + persist = { + type = "zfs_fs"; + options = { + mountpoint = "legacy"; + "com.sun:auto-snapshot" = "true"; + }; + mountpoint = "/persist"; + }; + home = { + type = "zfs_fs"; + options = { + mountpoint = "legacy"; + "com.sun:auto-snapshot" = "true"; + }; + mountpoint = "/home"; + postCreateHook = "zfs snapshot zroot/home@blank"; + }; + }; + }; + }; + }; +} diff --git a/shared/hardware/impermanence.nix b/shared/hardware/impermanence.nix new file mode 100644 index 0000000..a219ca5 --- /dev/null +++ b/shared/hardware/impermanence.nix @@ -0,0 +1,15 @@ +{ lib, ... }: +{ + services.zfs = { + autoScrub.enable = true; + autoSnapshot = { + enable = true; + flags = "-k -p --utc"; + }; + }; + + boot.initrd.postResumeCommands = lib.mkAfter '' + zfs rollback -r zroot/root@blank + zfs rollback -r zroot/home@blank + ''; +}