{ config, lib, system, namespace, ... }: let cfg = config.${namespace}.hardware.disko; isArm = builtins.match "aarch64*" system != null; rootDisk = "/dev/nvme0n1"; # BTRFS root partition configuration btrfsRoot = { name = "btrfs-root"; size = "100%"; content = { type = "btrfs"; extraArgs = [ "-f" ]; # Override existing partition # Subvolumes must set a mountpoint in order to be mounted, # unless their parent is mounted subvolumes = { "home" = { mountOptions = [ "compress=zstd" ]; mountpoint = "/home"; }; "root" = { mountOptions = [ "compress=zstd" "noatime" ]; mountpoint = "/root"; }; "nix" = { mountOptions = [ "compress=zstd" "noatime" ]; mountpoint = "/nix"; }; "etc" = { mountOptions = [ "compress=zstd" "noatime" ]; mountpoint = "/etc"; }; "log" = { mountOptions = [ "compress=zstd" "noatime" ]; mountpoint = "/var/log"; }; }; }; }; # BCacheFS root partition configuration bcachefsRoot = { size = "100%"; content = { type = "bcachefs"; # This refers to a filesystem in the `bcachefs_filesystems` attrset below. filesystem = "mounted_subvolumes_in_multi"; label = "ssd.ssd1"; extraFormatArgs = [ "--discard" ]; }; }; in { imports = [ ../options.nix ]; config = lib.mkIf (!isArm && cfg.enable) { disko.devices = lib.mkMerge [ { nodev."/" = { fsType = "tmpfs"; mountOptions = [ "mode=755" "defaults" "size=25%" ]; }; disk = { main = { device = rootDisk; type = "disk"; imageSize = "32G"; content = { type = "gpt"; partitions = { ESP = { type = "EF00"; size = "500M"; content = { type = "filesystem"; format = "vfat"; mountpoint = "/boot"; mountOptions = [ "umask=0077" ]; }; }; root = if cfg.filesystem == "btrfs" then btrfsRoot else bcachefsRoot; }; }; }; }; bcachefs_filesystems = lib.mkIf (cfg.filesystem == "bcachefs") { mounted_subvolumes_in_multi = { type = "bcachefs_filesystem"; # passwordFile = "/etc/nixos/pool.jwe"; extraFormatArgs = [ "--compression=zstd" ]; subvolumes = { "root" = { mountpoint = "/root"; mountOptions = [ "noatime" ]; }; "etc" = { mountOptions = [ "noatime" ]; mountpoint = "/etc"; }; "nix" = { mountOptions = [ "noatime" ]; mountpoint = "/nix"; }; "log" = { mountOptions = [ "noatime" ]; mountpoint = "/var/log"; }; "home" = { mountpoint = "/home"; }; }; }; }; } ]; }; }