{ lib, root-disk ? throw "Expected a mf disk brother", raid-disks ? [], swap-size ? -1, ... }: { disko.devices = { disk = { main = { type = "disk"; device = root-disk; content = { type = "gpt"; partitions = { boot = { size = "512M"; type = "EF00"; content = { type = "filesystem"; format = "vfat"; mountpoint = "/boot"; mountOptions = ["umask=0077"]; }; }; swap = lib.mkIf (swap-size != -1) { size = swap-size; content = { type = "swap"; discardPolicy = "both"; resumeDevice = true; }; }; root = { size = "100%"; content = { type = "zfs"; pool = "zroot"; }; }; }; }; }; } # Import all disks into raid named "raid5" // lib.attrsets.genAttrs raid-disks (name: { type = "disk"; device = "/dev/" + name; content = { type = "gpt"; partitions = { zfs = { size = "100%"; content = { type = "zfs"; pool = "raid5"; }; }; }; }; }); zpool = { zroot = { type = "zpool"; rootFsOptions = { mountpoint = "none"; acltype = "posixacl"; xattr = "sa"; }; datasets = { root = { type = "zfs_fs"; mountpoint = "/"; }; "nix/store" = { type = "zfs_fs"; mountpoint = "/nix/store"; }; }; }; raid5 = lib.mkIf (builtins.length raid-disks > 0) { type = "zpool"; mode = "raidz"; rootFsOptions = { compression = "zstd"; mountpoint = "none"; acltype = "posixacl"; xattr = "sa"; "com.sun:auto-snapshot" = "true"; }; datasets = { var = { type = "zfs_fs"; mountpoint = "/var"; }; home = { type = "zfs_fs"; mountpoint = "/home"; }; srv = { type = "zfs_fs"; mountpoint = "/srv"; }; opt = { type = "zfs_fs"; mountpoint = "/opt"; }; # media = { # type = "zfs_fs"; # mountpoint = "/media"; # }; }; }; }; }; }