about summary refs log tree commit diff
path: root/modules/system/kernel/zswap.nix
blob: eabe493146361c281631a1b3b4e5607074f02c11 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
{ 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 <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"}"
    ];
  };
}