101 lines
2.2 KiB
Nix
101 lines
2.2 KiB
Nix
{
|
|
inputs,
|
|
lib,
|
|
pkgs,
|
|
config,
|
|
...
|
|
}:
|
|
let
|
|
virtLib = inputs.nixvirt.lib;
|
|
in
|
|
{
|
|
imports = [
|
|
inputs.nixvirt.nixosModules.default
|
|
];
|
|
boot.kernelModules = [ "vfio-pci" ];
|
|
|
|
virtualisation.libvirtd = {
|
|
enable = true;
|
|
qemu = {
|
|
package = pkgs.stable.qemu_kvm;
|
|
runAsRoot = true;
|
|
# HW TPM Emulation (need to check what systems I have already have hw TPM that could be used)
|
|
swtpm.enable = true;
|
|
ovmf = {
|
|
enable = true;
|
|
packages = with pkgs.stable; [
|
|
(OVMFFull.override {
|
|
secureBoot = true;
|
|
tpmSupport = true;
|
|
httpSupport = true;
|
|
}).fd
|
|
];
|
|
};
|
|
};
|
|
};
|
|
|
|
virtualisation.libvirt = {
|
|
enable = true;
|
|
connections."qemu:///system" = {
|
|
networks = [
|
|
{
|
|
active = true;
|
|
definition = virtLib.network.writeXML {
|
|
uuid = "8e91d351-e902-4fce-99b6-e5ea88ac9b80";
|
|
name = "vm-lan";
|
|
forward = {
|
|
mode = "nat";
|
|
nat = {
|
|
nat = {
|
|
port = {
|
|
start = 1024;
|
|
end = 65535;
|
|
};
|
|
};
|
|
ipv6 = false;
|
|
};
|
|
};
|
|
bridge = {
|
|
name = "virbr0";
|
|
stp = true;
|
|
delay = 0;
|
|
};
|
|
ipv6 = false;
|
|
ip = {
|
|
address = "192.168.122.1";
|
|
netmask = "255.255.255.0";
|
|
dhcp = {
|
|
range = {
|
|
start = "192.168.122.100";
|
|
end = "192.168.122.254";
|
|
};
|
|
};
|
|
hosts = [
|
|
# Add any static host entries here if needed
|
|
];
|
|
};
|
|
};
|
|
}
|
|
];
|
|
};
|
|
};
|
|
|
|
# Need to add [File (in the menu bar) -> Add connection] when start for the first time
|
|
programs.virt-manager.enable = true;
|
|
|
|
environment.systemPackages = with pkgs.stable; [
|
|
OVMFFull
|
|
qemu
|
|
qemu_kvm
|
|
spice
|
|
spice-gtk
|
|
spice-protocol
|
|
virtiofsd
|
|
win-spice
|
|
win-virtio
|
|
];
|
|
|
|
users.users.${config.hostSpec.username} = {
|
|
extraGroups = [ "libvirtd" ];
|
|
};
|
|
}
|