{ config, pkgs, lib, ... }: { virtualisation.libvirtd.enable = true; virtualisation.libvirtd.qemu.ovmf.enable = true; virtualisation.libvirtd.qemu.swtpm.enable = true; # IOMMU and VFIO settings boot.kernelParams = [ "amd_iommu=on" # Use "intel_iommu=on" for Intel CPUs "iommu=pt" "vfio-pci.ids=10de:2504,10de:228e" # Replace with your GPU's vendor:device IDs ]; boot.kernelModules = [ "vfio_pci" "vfio" "vfio_iommu_type1" "vfio_virqfd" ]; # Early loading of VFIO boot.initrd.kernelModules = [ "vfio_pci" "vfio" "vfio_iommu_type1" "vfio_virqfd" ]; # Define the Windows 11 VM virtualisation.libvirtd.qemu.verbatimConfig = '' user = "root" group = "root" cgroup_device_acl = [ "/dev/null", "/dev/full", "/dev/zero", "/dev/random", "/dev/urandom", "/dev/ptmx", "/dev/kvm", "/dev/kqemu", "/dev/rtc","/dev/hpet" ] ''; virtualisation.libvirtd.hooks.qemu = { "win11" = '' # Add any VM hooks here if needed ''; }; systemd.services.libvirtd-win11 = { description = "Windows 11 VM"; after = [ "libvirtd.service" ]; requires = [ "libvirtd.service" ]; serviceConfig = { Type = "oneshot"; RemainAfterExit = "yes"; ExecStart = let win11xml = pkgs.writeText "win11.xml" '' win11 16 8 hvm /run/libvirt/nix-ovmf/OVMF_CODE.fd /var/lib/libvirt/qemu/nvram/win11_VARS.fd
''; in "${pkgs.libvirt}/bin/virsh define ${win11xml} && ${pkgs.libvirt}/bin/virsh start win11"; ExecStop = "${pkgs.libvirt}/bin/virsh shutdown win11"; }; wantedBy = [ "multi-user.target" ]; }; # Setup Looking Glass shared memory systemd.tmpfiles.rules = [ "f /dev/shm/looking-glass 0660 root qemu-libvirtd 32M" ]; environment.systemPackages = with pkgs; [ virt-manager OVMF swtpm win-virtio looking-glass-client ]; # Networking for VM networking.bridges.virbr0.interfaces = []; networking.interfaces.virbr0.useDHCP = true; # Enable huge pages for better performance boot.kernel.sysctl."vm.nr_hugepages" = 8192; # Optional: Enable looking glass for low-latency VM display }