{ pkgs, lib, pkgs-unstable, ... }: # https://olai.dev/blog/nvidia-vm-passthrough/ let devices = [ "1002:7480" # Video "1002:ab30" # Audio ]; in { virtualisation.libvirtd = { enable = true; qemu.ovmf.enable = true; onBoot = "ignore"; onShutdown = "shutdown"; }; programs.virt-manager.enable = true; users.users.albert.extraGroups = [ "libvirtd" ]; environment.systemPackages = [ pkgs.virt-manager pkgs.looking-glass-client ]; systemd.tmpfiles.rules = [ "f /dev/shm/looking-glass 0660 albert libvirtd -" ]; boot.kernelParams = [ "vfio-pci.ids=${lib.concatStringsSep "," devices}" "amd_iommu=on" ]; # Make the devices bind to VFIO boot.initrd.kernelModules = [ "vfio_pci" "vfio" "vfio_iommu_type1" ]; # Blacklist the nvidia drivers to make sure they don't get loaded boot.extraModprobeConfig = '' softdep nvidia pre: vfio-pci softdep drm pre: vfio-pci softdep nouveau pre: vfio-pci ''; boot.blacklistedKernelModules = [ "nouveau" "nvidia" "nvidia_drm" "nvidia_modeset" "i2c_nvidia_gpu" ]; virtualisation.spiceUSBRedirection.enable = true; }