{ pkgs, lib, config, ... }:
{
# none is the recommended elevator with ZFS (which has its own I/O scheduler)
# and/or for SSD, whereas HDD could use mq-deadline.
services.udev.extraRules = ''
  # set none scheduler for non-rotating disks
  ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="none"
  ACTION=="add|change", KERNEL=="nvme[0-9]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="none"
'';

boot.supportedFilesystems = [ "zfs" ];

# Ensure extra safeguards are active that zfs uses to protect zfs pools.
boot.zfs.forceImportAll  = false;
boot.zfs.forceImportRoot = false;

boot.zfs.enableUnstable = true;
boot.zfs.requestEncryptionCredentials = true;

# Enables periodic scrubbing of ZFS pools.
services.zfs.autoScrub.enable = true;

environment.systemPackages = [
  pkgs.mbuffer
  pkgs.zfs
];
}