{ config, pkgs, 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 z3fold for
pooling and zstd for compression, if available
(otherwise it falls back to lzo).
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"}"
];
};
}