{ lib, config, ... }:
let
  inherit (lib) mkOption types mkAfter mkIf;
  robCfg = config.services.zfs.rollbackOnBoot;
in
{
  options.services.zfs.rollbackOnBoot = {
    enable = mkOption {
      type = types.bool;
      default = false;
    };
    snapshot = mkOption {
      type = types.str;
      default = "zpool/local/root@blank";
    };
  };

  config = {
    boot.supportedFilesystems = [ "zfs" ];
    boot.zfs.devNodes = "/dev/disk/by-partuuid";
    services.zfs.autoScrub.enable = true;
    services.zfs.autoSnapshot = {
      enable = true;
      monthly = 1;
    };

    boot.initrd.postDeviceCommands = mkIf robCfg.enable
      (mkAfter ''
        zfs rollback -r ${robCfg.snapshot}
      '');
  };
}