{ pkgs , lib , config , ... }: with lib; let cfg = config.global.fs; in { options.global.fs.zfs = { persist = mkOption { type = with types; str; default = cfg.store; description = '' pool for persist dataset defaults to nix store dataset ''; }; }; config = mkIf (cfg.type == "zfs") { fileSystems = { "/nix" = { device = "${cfg.store}/nix"; fsType = "zfs"; }; "/nix/persist" = { device = "${cfg.zfs.persist}/persist"; fsType = "zfs"; neededForBoot = true; }; } // (mapAttrs' (name: opts: nameValuePair "/nix/persist/home/${name}" { device = "${cfg.zfs.persist}/home/${name}"; fsType = "zfs"; neededForBoot = true; }) (filterAttrs (n: _: n != "root") config.users.profiles)); services.zfs.trim.enable = true; services.zfs.autoSnapshot.enable = true; services.zfs.autoScrub.enable = true; boot.zfs.devNodes = mkDefault "/dev/disk/by-partuuid"; }; }