{ config, lib, pkgs, ... }: let cfg = config.custom.kernel.vfio; in { options.custom.kernel.vfio = { enable = lib.mkOption { type = lib.types.bool; default = false; }; }; config = lib.mkIf cfg.enable { hardware.nvidia = lib.mkForce { modesetting.enable = false; }; services.xserver.videoDrivers = [ "amdgpu" ]; boot = { extraModulePackages = [ config.boot.kernelPackages.kvmfr ]; extraModprobeConfig = '' options kvmfr static_size_mb=128 ''; kernelParams = [ "vfio-pci.ids=10de:2204,10de:1aef" ]; kernelModules = [ "kvmfr" ]; initrd.availableKernelModules = [ "nvme" "xhci_pci" "ahci" "usbhid" "sd_mod" "uas" "usbcore" "usb_storage" "vfat" "nls_cp437" "nls_iso8859_1" "virtio_pci" "virtio_blk" "virtio_net" "virtio_ring" ]; initrd.kernelModules = [ "vfio_pci" "vfio_iommu_type1" "vfio" "amdgpu" "kvmfr" "kvm-amd" ]; }; services = { udev.extraRules = '' SUBSYSTEM=="kvmfr", OWNER="user", GROUP="kvm", MODE="0660" ''; }; environment.systemPackages = [ pkgs.looking-glass-client ]; }; }