uvms/profiles/uvms-guest.nix

72 lines
1.7 KiB
Nix
Raw Normal View History

2025-09-17 16:51:24 +03:00
{
options,
config,
2025-09-17 16:51:24 +03:00
lib,
pkgs,
...
}:
let
mkIfGuest = import ../lib/mkIfMicrovmGuest.nix { inherit options config lib; };
2025-10-09 04:14:16 +03:00
inherit (lib) types;
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 = "...";
};
};
};
};
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
{
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" ''
if [[ -e vsock.sock ]] ; then
chmod g+rw vsock.sock
2025-10-09 04:14:16 +03:00
fi
'')
];
})
2025-10-09 04:14:16 +03:00
(lib.mkIf config.uvms.zswap.enable {
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-17 16:51:24 +03:00
}