about summary refs log tree commit diff
path: root/modules/system
diff options
context:
space:
mode:
Diffstat (limited to 'modules/system')
-rw-r--r--modules/system/kernel/zswap.nix38
1 files changed, 38 insertions, 0 deletions
diff --git a/modules/system/kernel/zswap.nix b/modules/system/kernel/zswap.nix
new file mode 100644
index 00000000..43b89ca6
--- /dev/null
+++ b/modules/system/kernel/zswap.nix
@@ -0,0 +1,38 @@
+{ config, lib, ... }:
+
+let
+  kernelVersion = config.boot.kernelPackages.kernel.version;
+  hasZstd = lib.versionAtLeast kernelVersion "4.18";
+in {
+  options.vuizvui.system.kernel.zswap.enable = lib.mkOption {
+    type = lib.types.bool;
+    default = false;
+    description = ''
+      Whether to enable support for zswap with the use of the
+      <literal>z3fold</literal> for pooling and <literal>zstd</literal> for
+      compression, if available (otherwise it falls back to
+      <literal>lzo</literal>).
+
+      Zswap is a compressed cache for swap pages, which is especially useful
+      for machines with limited RAM.
+    '';
+  };
+
+  config = lib.mkIf config.vuizvui.system.kernel.zswap.enable {
+    boot.kernelPatches = lib.singleton {
+      name = "zswap-config";
+      patch = null;
+      extraConfig = ''
+        CRYPTO_${if hasZstd then "ZSTD" else "LZO"} y
+        ZSWAP y
+        Z3FOLD y
+      '';
+    };
+
+    boot.kernelParams = [
+      "zswap.enabled=1"
+      "zswap.zpool=z3fold"
+      "zswap.compressor=${if hasZstd then "zstd" else "lzo"}"
+    ];
+  };
+}