{config, ...}: { disko.devices = { # Partition the physical disk disk = { active = { type = "disk"; device = "/dev/nvme0n1"; content = { type = "gpt"; partitions = { esp = { size = "2G"; type = "ef00"; content = { type = "filesystem"; format = "vfat"; mountpoint = "/boot"; mountOptions = ["umask=0077"]; }; }; zfs = { size = "100%"; content = { type = "zfs"; pool = "zactive"; }; }; }; }; }; archive = { type = "disk"; device = "/dev/sda"; content = { type = "gpt"; partitions.zfs = { size = "100%"; content = { type = "zfs"; pool = "zarchive"; }; }; }; }; }; # Declare zfs pools for this system. zpool = let inherit (config.constants) zfsPoolOptions zfsRootFsOptions; in { zactive = { type = "zpool"; options = zfsPoolOptions; rootFsOptions = zfsRootFsOptions; datasets = { # Encrypt main dataset main = { type = "zfs_fs"; options = { encryption = "on"; keyformat = "passphrase"; }; }; # Create dataset for home "main/home" = { type = "zfs_fs"; mountpoint = "/home"; }; # Create dataset for nix store "main/nix" = { type = "zfs_fs"; mountpoint = "/nix"; }; # Create dataset for root "main/root" = { type = "zfs_fs"; mountpoint = "/"; }; # Reserve space for performance reservation = { type = "zfs_fs"; options.refreservation = "256G"; }; }; }; zarchive = { type = "zpool"; options = zfsPoolOptions; rootFsOptions = zfsRootFsOptions; datasets = { snapshot.type = "zfs_fs"; # Reserve space for performance reservation = { type = "zfs_fs"; options.refreservation = "512G"; }; }; }; }; }; }