{ lib, config, ... }: { options.device = lib.mkOption { type = lib.types.str; example = "/dev/nvme0n1"; }; config = { disko.devices = { disk = { root = { type = "disk"; device = config.device; content = { type = "gpt"; partitions = { ESP = { size = "1G"; type = "EF00"; content = { type = "filesystem"; format = "vfat"; mountpoint = "/boot"; mountOptions = [ "nofail" ]; }; }; zfs = { size = "100%"; content = { type = "zfs"; pool = "zroot"; }; }; }; }; }; }; zpool = { zroot = { type = "zpool"; rootFsOptions = { mountpoint = "none"; compression = "zstd"; acltype = "posixacl"; xattr = "sa"; "com.sun:auto-snapshot" = "true"; }; options.ashift = "12"; datasets = { "root" = { type = "zfs_fs"; options = { encryption = "aes-256-gcm"; keyformat = "passphrase"; #keylocation = "file:///tmp/secret.key"; keylocation = "prompt"; }; mountpoint = "/"; }; "root/nix" = { type = "zfs_fs"; options.mountpoint = "/nix"; mountpoint = "/nix"; }; # # README MORE: https://wiki.archlinux.org/title/ZFS#Swap_volume # "root/swap" = { # type = "zfs_volume"; # size = "10M"; # content = { # type = "swap"; # }; # options = { # volblocksize = "4096"; # compression = "zle"; # logbias = "throughput"; # sync = "always"; # primarycache = "metadata"; # secondarycache = "none"; # "com.sun:auto-snapshot" = "false"; # }; # }; }; }; }; }; }; }