aboutsummaryrefslogtreecommitdiffstats
path: root/system/fileSystemLayouts
diff options
context:
space:
mode:
authorene <ene@sils.li>2023-03-20 18:42:26 +0100
committerene <ene@sils.li>2023-03-20 18:44:26 +0100
commit1b5eb56269683dc1eb033e3acae616a013aaca9b (patch)
tree115a25ad69cd361cb7593889cdaf5cff6a21cccb /system/fileSystemLayouts
parentDocs(todo): Update (diff)
downloadnixos-config-1b5eb56269683dc1eb033e3acae616a013aaca9b.zip
Feat(system): Enable swap & zram swap & hibernate
Diffstat (limited to 'system/fileSystemLayouts')
-rw-r--r--system/fileSystemLayouts/default.nix85
1 files changed, 78 insertions, 7 deletions
diff --git a/system/fileSystemLayouts/default.nix b/system/fileSystemLayouts/default.nix
index 215f01d0..f6d374d7 100644
--- a/system/fileSystemLayouts/default.nix
+++ b/system/fileSystemLayouts/default.nix
@@ -1,3 +1,4 @@
+# vim: ts=2
{
config,
lib,
@@ -23,9 +24,65 @@ in {
example = literalExpression "/dev/disk/by-uuid/5143-6136";
description = lib.mdDoc "Path to the main disk";
};
+ ssd = mkOption {
+ type = lib.types.bool;
+ example = literalExpression "true";
+ default = false;
+ description = lib.mdDoc "Enable ssd specific improvements?";
+ };
+ swap = {
+ uuid = mkOption {
+ type = lib.types.str;
+ example = literalExpression "d1d20ae7-3d8a-44da-86da-677dbbb10c89";
+ description = lib.mdDoc "The uuid of the swapfile";
+ };
+ resumeOffset = mkOption {
+ type = lib.types.int;
+ example = literalExpression "134324224";
+ description = lib.mdDoc "The resume offset of the swapfile";
+ };
+ };
};
config = mkIf cfg.enable {
+ systemd = mkIf cfg.ssd {
+ timers.fstrim = {
+ wantedBy = ["timers.target"];
+ wants = ["fstrim.service"];
+ unitConfig = {
+ Description = "Discard unused blocks once a week";
+ Documentation = "man:fstrim";
+ ConditionVirtualization = "!container";
+ ConditionPathExists = "!/etc/initrd-release";
+ };
+ timerConfig = {
+ OnCalendar = "weekly";
+ AccuracySec = "1h";
+ Persistent = "true";
+ RandomizedDelaySec = "6000";
+ };
+ };
+ services.fstrim = {
+ unitConfig = {
+ Description = "Discard unused blocks on filesystems from /etc/fstab";
+ Documentation = "man:fstrim(8)";
+ ConditionVirtualization = "!container";
+ };
+ serviceConfig = {
+ Type = "oneshot";
+ ExecStart = "/usr/bin/fstrim --listed-in /etc/fstab:/proc/self/mountinfo --verbose --quiet-unsupported";
+ PrivateDevices = "no";
+ PrivateNetwork = "yes";
+ PrivateUsers = "no";
+ ProtectKernelTunables = "yes";
+ ProtectKernelModules = "yes";
+ ProtectControlGroups = "yes";
+ MemoryDenyWriteExecute = "yes";
+ SystemCallFilter = "@default @file-system @basic-io @system-service";
+ };
+ };
+ };
+
fileSystems = {
"/" = {
device = "none";
@@ -43,17 +100,31 @@ in {
neededForBoot = true;
options = ["subvol=persistent-storage"] ++ defaultMountOptions;
};
+ "/swap" = {
+ device = cfg.mainDisk;
+ fsType = "btrfs";
+ neededForBoot = true;
+ options = ["subvol=swap"] ++ defaultMountOptions;
+ };
"/boot" = {
device = cfg.efiDisk;
fsType = "vfat";
};
- #"${config.users.users.soispha.home}" = { # TODO this causes infinite recursion
- # "/home" = {
- # device = "none";
- # fsType = "tmpfs"; # Can be stored on normal drive or on tmpfs as well
- # options = ["defaults" "size=4G" "mode=755"];
- # };
};
- swapDevices = [];
+ swapDevices = [
+ {
+ device = "/swap/swapfile";
+ discardPolicy = "both"; # TODO this is the default in swapon, so it should be fine?
+ priority = 1; # should not be used, aside of hibernate
+ }
+ ];
+ zramSwap = {
+ enable = true;
+ priority = 10; # needs to be higher than harware-swap
+ };
+ boot.kernelParams = [
+ "resume=UUID=${cfg.swap.uuid}"
+ "resume_offset=${cfg.swap.resumeOffset}"
+ ];
};
}