{lib, ...}: {name, ...}: { options = { type = lib.mkOption { type = lib.types.enum ["zfs_fs" "zfs_volume"]; default = "zfs_fs"; description = "Type of ZFS dataset (filesystem or volume)"; }; # ZFS dataset options that match what's currently hardcoded in rootFsOptions canmount = lib.mkOption { type = lib.types.nullOr (lib.types.enum ["on" "off" "noauto"]); default = null; description = "Controls whether the file system can be mounted"; }; mountpoint = lib.mkOption { type = lib.types.nullOr lib.types.str; default = null; description = "Controls the mount point used for this file system"; }; xattr = lib.mkOption { type = lib.types.nullOr (lib.types.enum ["on" "off" "sa" "dir"]); default = null; description = "Extended attribute storage method"; }; acltype = lib.mkOption { type = lib.types.nullOr (lib.types.enum ["off" "nfsv4" "posixacl"]); default = null; description = "Access control list type"; }; relatime = lib.mkOption { type = lib.types.nullOr (lib.types.enum ["on" "off"]); default = null; description = "Controls when access time is updated"; }; compression = lib.mkOption { type = lib.types.nullOr (lib.types.enum ["on" "off" "lz4" "gzip" "zstd" "lzjb" "zle"]); default = null; description = "Compression algorithm to use"; }; encryption = lib.mkOption { type = lib.types.nullOr (lib.types.enum ["on" "off" "aes-128-ccm" "aes-192-ccm" "aes-256-ccm" "aes-128-gcm" "aes-192-gcm" "aes-256-gcm"]); default = null; description = "Encryption algorithm to use"; }; keyformat = lib.mkOption { type = lib.types.nullOr (lib.types.enum ["raw" "hex" "passphrase"]); default = null; description = "Format of the encryption key"; }; keylocation = lib.mkOption { type = lib.types.nullOr lib.types.str; default = null; description = "Location of the encryption key"; }; autoSnapshot = lib.mkOption { type = lib.types.nullOr lib.types.bool; default = null; description = "Enable automatic snapshots for this dataset"; }; # Additional common ZFS options recordsize = lib.mkOption { type = lib.types.nullOr lib.types.str; default = null; description = "Suggested block size for files in the file system"; }; sync = lib.mkOption { type = lib.types.nullOr (lib.types.enum ["standard" "always" "disabled"]); default = null; description = "Synchronous write behavior"; }; atime = lib.mkOption { type = lib.types.nullOr (lib.types.enum ["on" "off"]); default = null; description = "Controls whether access time is updated"; }; # Custom options for disko integration postCreateHook = lib.mkOption { type = lib.types.str; default = ""; description = "Script to run after dataset creation"; }; }; }