{ lib, config, ... }: { # TODO: create all of the datasets from option and home-manager datasets # TODO: set up datasets for systemd services that want a dataset created config = lib.mkMerge [ ( lib.mkIf config.storage.zfs.enable (lib.mkMerge [ { storage.zfs.datasets = { "persist" = { type = "zfs_fs"; }; "persist/local" = { type = "zfs_fs"; }; "persist/replicate" = { type = "zfs_fs"; }; "persist/local/nix" = { type = "zfs_fs"; mount = { enable = true; mountPoint = "/nix"; }; snapshot = { autoSnapshot = false; }; atime = "off"; relatime = "off"; }; "persist/replicate/system/var/log" = { type = "zfs_fs"; mount = { enable = true; mountPoint = "/var/log"; }; }; }; } (lib.mkIf (!config.storage.impermanence.enable) { storage.zfs.rootDataset = { type = "zfs_fs"; mount = { enable = true; mountPoint = "/"; }; compression = "lz4"; acltype = "posixacl"; relatime = "on"; xattr = "sa"; snapshot = { autoSnapshot = true; blankSnapshot = true; }; }; }) (lib.mkIf config.storage.impermanence.enable { boot.initrd.postResumeCommands = lib.mkAfter '' zfs rollback -r rpool/ephemeral/system/root@blank ''; storage.zfs.datasets = { "ephemeral" = { type = "zfs_fs"; }; "ephemeral/system/root" = { type = "zfs_fs"; mount = { enable = true; mountPoint = "/"; }; snapshot = { blankSnapshot = true; }; }; }; storage.impermanence.datasets = { "persist/replicate/system/root" = { mount = { enable = true; mountPoint = "/persist/replicate/system/root"; }; snapshot = { autoSnapshot = true; }; directories = { "/var/lib/nixos".enable = true; "/var/lib/systemd/coredump".enable = true; }; files = { "/etc/machine-id".enable = true; }; }; "persist/replicate/home" = { mount = { enable = true; mountPoint = "/persist/replicate/home"; }; snapshot = { autoSnapshot = true; }; }; }; # TODO: home-manager.users..storage.impermanence.enable # is false then persist the entire directory of the user # if true persist home-manager.users..storage.impermanence.datasets # TODO: systemd.services..storage.datasets persists }) ]) ) # TODO: configure other needed storage modes here ]; }