{ config, pkgs, lib, ... }: let keyValues = (key: values: lib.strings.concatStringsSep " " [ key (lib.strings.concatMapStringsSep " " (value: lib.strings.concatStrings [ "\"" value "\"" ]) values) ]); keyValue = (key: value: keyValues key [ value ]); section = (name: strings: lib.strings.concatStrings [ (keyValue "Section" name) (lib.strings.concatStringsSep "\n " strings) "EndSection" ]); nvidia = ({ side, busID }: { system.nixos.tags = [ "eGPU" side ]; # Disable intel graphics boot.kernelParams = [ "module_blacklist=i915" ]; # Set X11 to use Nvidia drivers services.xserver.videoDrivers = [ "nvidia" ]; # Wayland stuff maybe hardware.nvidia.modesetting.enable = true; # 32bit hardware.opengl.driSupport32Bit = true; hardware.opengl.enable = true; hardware.nvidia.package = config.boot.kernelPackages.nvidiaPackages.latest; services.xserver.config = pkgs.lib.mkOverride 0 (lib.strings.concatStringsSep "\n\n" [ (section "Module" [ (keyValue "Load" "modesetting") ]) (section "Device" [ (keyValue "Identifier" "Device0") (keyValue "Driver" "nvidia") (keyValue "BusID" busID) (keyValue "Option" "AllowEmptyInitialConfiguration") (keyValues "Option" [ "AllowExternalGpus" "True" ]) ]) ]); }); in { # eGPU specialisation config specialisation = { eGPUright.configuration = nvidia { side = "right"; busID = "4:0:0"; }; eGPUleft.configuration = nvidia { side = "left"; busID = "2:0:0"; }; }; }