{ pkgs, config, lib, ... }: let cfg = config.holocron.zfs; in { options.holocron.zfs = { enable = lib.mkEnableOption "enables zfs"; }; config = lib.mkIf cfg.enable { # set network host id networking.hostId = "3e6e7055"; # enable zfs support boot.kernelModules = ["zfs"]; boot.supportedFilesystems = ["zfs"]; # arc cache size boot.kernelParams = [ "zfs.zfs_arc_max=12884901888" ]; # pools to import #boot.zfs.extraPools = [ "holocron" "holocron/archives" "/holocron/media" "/holocron/users" ]; #boot.zfs.extraPools = [ "holocron" ]; # enable smart monitoring services.smartd = { enable = true; autodetect = true; defaults.monitored = "-a -o on -s (S/../.././05|L/../01/./05)"; notifications.mail = { enable = true; sender = "zfs@snowbelle.lan"; }; }; # enable zfs services.zfs = { autoScrub.enable = true; autoScrub.interval = "weekly"; # email notifs zed = { enableMail = true; settings = { ZED_EMAIL_ADDR = ["root"]; # send notification if scrub succeeds ZED_NOTIFY_VERBOSE = true; }; }; }; # install userspace tools for acl's environment.systemPackages = with pkgs; [smartmontools]; fileSystems."/holocron" = { device = "holocron"; fsType = "zfs"; options = ["nofail"]; }; fileSystems."/holocron/archives" = { device = "holocron/archives"; fsType = "zfs"; options = ["nofail"]; }; fileSystems."/holocron/users" = { device = "holocron/users"; fsType = "zfs"; options = ["nofail"]; }; fileSystems."/holocron/media" = { device = "holocron/media"; fsType = "zfs"; options = ["nofail"]; }; }; }