{ config, lib, pkgs, ... }: let cfg = config.sils.disks; defaultMountOptions = [ "noatime" # should have some performance upsides, and I don't use it anyways "lazytime" # make time changes in memory ]; in { options.sils.disks = { enable = lib.mkEnableOption "disk setup with disko"; disk = lib.mkOption { type = lib.types.path; example = lib.literalExpression "/dev/disk/by-uuid/0442cb6d-f13a-4635-b487-fa76189774c5"; description = "The disk used for installing the OS."; }; #swap = { # uuid = lib.mkOption { # type = lib.types.str; # example = lib.literalExpression "d1d20ae7-3d8a-44da-86da-677dbbb10c89"; # description = "The uuid of the swapfile"; # }; # resumeOffset = lib.mkOption { # type = lib.types.str; # example = lib.literalExpression "134324224"; # description = "The resume offset of the swapfile"; # }; #}; }; config = lib.mkIf cfg.enable { disko.devices = { disk = { main = { device = cfg.disk; content = { type = "gpt"; partitions = { root = { size = "100%"; name = "root"; content = { type = "luks"; name = "cryptroot"; extraOpenArgs = ["--allow-discards"]; content = { type = "btrfs"; extraArgs = ["-f" "--label nixos"]; # Override existing partitions subvolumes = { "root" = { mountpoint = "/"; mountOptions = defaultMountOptions; }; "nix" = { mountpoint = "/nix"; mountOptions = defaultMountOptions; }; "persistent-storage" = { mountpoint = "/srv"; mountOptions = defaultMountOptions; }; "persistent-storage@snapshots" = { mountpoint = "/srv/.snapshots"; mountOptions = defaultMountOptions; }; "swap" = { mountpoint = "/swap"; mountOptions = defaultMountOptions; }; "home" = { mountpoint = "/home"; mountOptions = defaultMountOptions; }; }; }; }; }; boot = { type = "EF00"; size = "512M"; name = "boot"; content = { type = "filesystem"; format = "vfat"; mountpoint = "/boot"; }; }; }; }; }; }; nodev = { "/tmp" = { fsType = "tmpfs"; mountOptions = ["defaults" "size=10G" "mode=755"]; }; }; }; fileSystems = { "/srv" = { neededForBoot = true; }; "/swap" = { neededForBoot = true; }; }; swapDevices = [ #{ # device = "/swap/swapfile"; # priority = 1; # lower than zramSwap, just in case # # size = 2048; # TODO: can nixos create a btrfs swapfile correctly? #} ]; boot = { kernelParams = [ #"resume_offset=${cfg.swap.resumeOffset}" ]; #resumeDevice = "/dev/disk/by-uuid/${cfg.swap.uuid}"; }; }; }