{ lib, config, util, ... }: { # 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/system/nix" = { type = "zfs_fs"; mountpoint = "/nix"; options = { atime = "off"; relatime = "off"; canmount = "on"; "com.sun:auto-snapshot" = "false"; }; }; "persist/system/var/log" = { type = "zfs_fs"; mountpoint = "/var/log"; options = { "com.sun:auto-snapshot" = "false"; }; }; }; } (util.mkUnless config.storage.impermanence.enable { # TODO: create datasets for systemd.services..storage.impermanence.datasets storage.zfs.datasets = { "persist/system/root" = { type = "zfs_fs"; mountpoint = "/"; canmount = "on"; }; }; }) (lib.mkIf config.storage.impermanence.enable { storage.impermanence.datasets = { "persist/system/root" = { type = "zfs_fs"; }; }; storage.zfs.datasets = { "local/system/root" = { type = "zfs_fs"; mountpoint = "/"; options = { canmount = "on"; }; postCreateHook = '' zfs snapshot rpool/local/system/root@blank ''; directories = { "/var/lib/nixos".enable = true; "/var/lib/systemd/coredump".enable = true; }; files = { "/etc/machine-id".enable = 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 ]; }