let gpuIDs = [ "10de:249d" # Graphics "10de:228b" # Audio ]; in { pkgs, lib, config, ... }: { options.vfio.enable = with lib; mkEnableOption "Configure the machine for VFIO"; config = let cfg = config.vfio; in { boot = { initrd.kernelModules = [ "vfio_pci" "vfio" "vfio_iommu_type1" "vfio_virqfd" ]; kernelParams = [ # enable IOMMU "intel_iommu=on" ] ++ lib.optional cfg.enable # isolate the GPU ("vfio-pci.ids=" + lib.concatStringsSep "," gpuIDs); }; hardware.opengl.enable = true; virtualisation.spiceUSBRedirection.enable = true; }; }