nix-conf/hosts/common/nvidia/passthrough.nix
2026-01-10 21:54:04 -03:00

52 lines
1.2 KiB
Nix

# Under maintanence
{
pkgs,
...
}:
let
# Optional helper for manual (re)binding at runtime
vfioBindScript = pkgs.writeShellScriptBin "vfio-bind" ''
#!${pkgs.runtimeShell}
DEV="$1" # e.g. 0000:81:00.0
echo vfio-pci > /sys/bus/pci/devices/$DEV/driver_override
${pkgs.kmod}/bin/modprobe -i vfio-pci
echo "$DEV" > /sys/bus/pci/drivers/vfio-pci/bind
'';
in
{
nixpkgs.config.allowUnfree = true;
boot = {
# Load vfio early and bind the second GPU before NVIDIA can claim it
initrd = {
kernelModules = [ "vfio_pci" ];
preDeviceCommands = ''
DEVS="0000:81:00.0 0000:81:00.1"
for DEV in $DEVS; do
echo "vfio-pci" > /sys/bus/pci/devices/$DEV/driver_override
done
modprobe -i vfio-pci
for DEV in $DEVS; do
echo $DEV > /sys/bus/pci/drivers/vfio-pci/bind
done
'';
};
kernelParams = [
"intel_iommu=on"
"iommu=pt"
];
kernelModules = [
"vfio_pci"
"vfio"
"vfio_iommu_type1"
"vfio_virqfd"
];
blacklistedKernelModules = [ "nouveau" ];
};
environment.systemPackages = with pkgs; [
vfioBindScript # optional manual tool
];
}