2025-09-17 16:51:24 +03:00
|
|
|
{
|
|
|
|
|
options,
|
2025-09-19 16:28:48 +03:00
|
|
|
config,
|
2025-09-17 16:51:24 +03:00
|
|
|
lib,
|
|
|
|
|
pkgs,
|
|
|
|
|
...
|
|
|
|
|
}:
|
2025-09-19 16:28:48 +03:00
|
|
|
let
|
|
|
|
|
mkIfGuest = import ../lib/mkIfMicrovmGuest.nix { inherit options config lib; };
|
2025-10-09 04:14:16 +03:00
|
|
|
inherit (lib) types;
|
2025-09-19 16:28:48 +03:00
|
|
|
in
|
2025-09-17 16:51:24 +03:00
|
|
|
{
|
|
|
|
|
imports = [
|
|
|
|
|
./vsock-connect-guest.nix
|
|
|
|
|
./uvms-users.nix
|
|
|
|
|
];
|
2025-10-09 04:14:16 +03:00
|
|
|
options = {
|
|
|
|
|
uvms.zswap.enable = lib.mkEnableOption "Pass zswap.enabled=1 to kernelParams (and disable zramSwap)";
|
|
|
|
|
uvms.zswap.settings = lib.mkOption {
|
|
|
|
|
description = "Zswap kernel module configuration";
|
|
|
|
|
type = types.submodule {
|
|
|
|
|
freeformType = types.attrsOf types.str;
|
|
|
|
|
options.max_pool_percent = lib.mkOption {
|
|
|
|
|
type = types.int;
|
|
|
|
|
default = 25;
|
|
|
|
|
description = "...";
|
|
|
|
|
};
|
|
|
|
|
options.compressor = lib.mkOption {
|
|
|
|
|
type = types.str;
|
|
|
|
|
default = "zstd";
|
|
|
|
|
description = "...";
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
};
|
2025-09-19 16:28:48 +03:00
|
|
|
config = lib.mkMerge [
|
|
|
|
|
(mkIfGuest {
|
|
|
|
|
microvm = {
|
|
|
|
|
hypervisor = "cloud-hypervisor";
|
|
|
|
|
volumes = [
|
|
|
|
|
{
|
|
|
|
|
image = "swapfile.img";
|
|
|
|
|
mountPoint = "/var/swapfiles";
|
|
|
|
|
size = 1024;
|
|
|
|
|
}
|
|
|
|
|
];
|
|
|
|
|
};
|
|
|
|
|
swapDevices = [
|
2025-09-17 16:51:24 +03:00
|
|
|
{
|
2025-09-19 16:28:48 +03:00
|
|
|
device = "/var/swapfiles/swap0";
|
|
|
|
|
size = 768;
|
2025-09-17 16:51:24 +03:00
|
|
|
}
|
|
|
|
|
];
|
2025-10-09 04:14:16 +03:00
|
|
|
systemd.services."microvm@".serviceConfig.ExecStartPost = [
|
|
|
|
|
(pkgs.writeShellScript "microvm-fix-umask" ''
|
2025-10-09 04:22:43 +03:00
|
|
|
if [[ -e vsock.sock ]] ; then
|
|
|
|
|
chmod g+rw vsock.sock
|
2025-10-09 04:14:16 +03:00
|
|
|
fi
|
|
|
|
|
'')
|
|
|
|
|
];
|
2025-09-19 16:28:48 +03:00
|
|
|
})
|
2025-10-09 04:14:16 +03:00
|
|
|
(lib.mkIf config.uvms.zswap.enable {
|
2025-09-19 16:28:48 +03:00
|
|
|
zramSwap.enable = false;
|
2025-10-09 04:14:16 +03:00
|
|
|
boot.kernelParams =
|
|
|
|
|
builtins.attrValues ((lib.mapAttrs (
|
|
|
|
|
name: value: "zswap.${name}=${toString value}"
|
|
|
|
|
)) config.uvms.zswap.settings)
|
|
|
|
|
++ [ "zswap.enabled=1" ];
|
|
|
|
|
})
|
2025-09-19 16:28:48 +03:00
|
|
|
];
|
2025-09-17 16:51:24 +03:00
|
|
|
}
|