nix/nixos/hosts/framework16/vm-gpu.nix

52 lines
1.2 KiB
Nix

{ 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;
}