38 lines
830 B
Nix
38 lines
830 B
Nix
{ lib, pkgs, config, ... }:
|
|
with lib;
|
|
let
|
|
cfg = config.virtualisation.libvirtd;
|
|
|
|
boolToZeroOne = x: if x then "1" else "0";
|
|
|
|
aclString = with lib.strings;
|
|
concatMapStringsSep ''
|
|
,
|
|
'' escapeNixString cfg.deviceACL;
|
|
in {
|
|
options.virtualisation.libvirtd = {
|
|
deviceACL = mkOption {
|
|
type = types.listOf types.str;
|
|
default = [ ];
|
|
};
|
|
clearEmulationCapabilities = mkOption {
|
|
type = types.bool;
|
|
default = true;
|
|
};
|
|
};
|
|
|
|
config.users.users."qemu-libvirtd" = {
|
|
extraGroups = optionals (!cfg.qemu.runAsRoot) [ "kvm" "input" ];
|
|
isSystemUser = true;
|
|
};
|
|
|
|
config.virtualisation.libvirtd.qemu.verbatimConfig = ''
|
|
clear_emulation_capabilities = ${
|
|
boolToZeroOne cfg.clearEmulationCapabilities
|
|
}
|
|
cgroup_device_acl = [
|
|
${aclString}
|
|
]
|
|
'';
|
|
}
|