{ config, lib, pkgs, ... }: let cfg = config.soispha.disks; defaultMountOptions = [ "compress-force=zstd:15" # This saves disk space, at a performance cost "noatime" # should have some performance upsides, and I don't use it anyways "lazytime" # make time changes in memory ]; in { options.soispha.disks = { disk = lib.mkOption { type = lib.types.path; example = lib.literalExpression "/dev/disk/by-uuid/0442cb6d-f13a-4635-b487-fa76189774c5"; description = lib.mdDoc "The disk used for installing the OS"; }; ssd = lib.mkOption { type = lib.types.bool; example = lib.literalExpression "true"; default = false; description = lib.mdDoc "Enable ssd specific improvements, like trim"; }; swap = { uuid = lib.mkOption { type = lib.types.str; example = lib.literalExpression "d1d20ae7-3d8a-44da-86da-677dbbb10c89"; description = lib.mdDoc "The uuid of the swapfile"; }; resumeOffset = lib.mkOption { type = lib.types.str; example = lib.literalExpression "134324224"; description = lib.mdDoc "The resume offset of the swapfile"; }; }; }; config = { systemd = lib.recursiveUpdate (import ./hibernate.nix {inherit pkgs;}) (import ./fstrim.nix {inherit pkgs lib cfg;}); disko.devices = { disk = { main = { device = cfg.disk; content = { type = "gpt"; partitions = { root = { size = "100%"; name = "root"; content = { type = "luks"; name = "encrypted"; extraOpenArgs = ["--allow-discards"]; content = { type = "btrfs"; extraArgs = ["-f"]; # Override existing partitions subvolumes = { "nix" = { mountpoint = "/nix"; mountOptions = defaultMountOptions; }; "persistent-storage" = { mountpoint = "/srv"; mountOptions = defaultMountOptions; }; "swap" = { mountpoint = "/swap"; mountOptions = defaultMountOptions; }; }; }; }; }; boot = { type = "EF00"; size = "512M"; name = "boot"; content = { type = "filesystem"; format = "vfat"; mountpoint = "/boot"; }; }; }; }; }; }; nodev = { "/" = { fsType = "tmpfs"; mountOptions = ["defaults" "size=4G" "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? } ]; zramSwap = { enable = true; priority = 10; # needs to be higher than hardware-swap }; boot.kernelParams = [ "resume=UUID=${cfg.swap.uuid}" "resume_offset=${cfg.swap.resumeOffset}" "zswap.enabled=0" # zswap and zram are not really compatible ]; }; } # vim: ts=2