96 lines
2.9 KiB
Nix
96 lines
2.9 KiB
Nix
{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";
|
|
};
|
|
};
|
|
}
|