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