lifetracker/modules/components/virtualization/default.nix

89 lines
1.8 KiB
Nix

{
lib,
config,
pkgs,
username,
vars,
...
}:
let
cfg = config.virtualization;
in
{
options = {
virtualization = {
enable = lib.mkEnableOption "Enable virtualization in NixOS & home-manager";
};
};
config = lib.mkIf cfg.enable {
environment = {
systemPackages = with pkgs; [
docker-compose
podlet
quickemu
spice
spice-protocol
virt-manager
virtiofsd
virtio-win
win-spice
];
};
services = {
spice-vdagentd.enable = true;
};
virtualisation = {
docker = {
enable = true;
enableOnBoot = true;
autoPrune = {
enable = true;
dates = "weekly";
};
defaultNetwork.settings.dns_enabled = true;
enableNvidia = if vars.nvidia then true else false;
};
libvirtd = {
# Make sure you run this once: "sudo virsh net-autostart default"
enable = true;
qemu = {
swtpm.enable = true;
ovmf.enable = true;
ovmf.packages = [ pkgs.OVMFFull.fd ];
};
};
spiceUSBRedirection.enable = true;
vmVariant = {
virtualisation = {
memorySize = 4096;
cores = 3;
};
};
};
users = {
users = {
${username} = {
extraGroups = [
"docker"
"libvirtd"
"podman"
];
# quadlets
autoSubUidGidRange = true;
linger = true;
};
};
};
home-manager.users.${username} = {
dconf.settings = {
"org/virt-manager/virt-manager/connections" = {
autoconnect = [ "qemu:///system" ];
uris = [ "qemu:///system" ];
};
};
};
};
}