nixos/xserver: introduce attr display to xserver.drivers

Specifically for NVIDIA so that only the device section would be created

Changed files
+50 -51
nixos
modules
hardware
services
+1 -1
nixos/modules/hardware/video/amdgpu-pro.nix
···
nixpkgs.config.xorg.abiCompat = "1.19";
services.xserver.drivers = singleton
-
{ name = "amdgpu"; modules = [ package ]; };
+
{ name = "amdgpu"; modules = [ package ]; display = true; };
hardware.opengl.package = package;
hardware.opengl.package32 = package32;
+1 -1
nixos/modules/hardware/video/ati.nix
···
nixpkgs.config.xorg.abiCompat = "1.17";
services.xserver.drivers = singleton
-
{ name = "fglrx"; modules = [ ati_x11 ]; };
+
{ name = "fglrx"; modules = [ ati_x11 ]; display = true; };
hardware.opengl.package = ati_x11;
hardware.opengl.package32 = pkgs.pkgsi686Linux.linuxPackages.ati_drivers_x11.override { libsOnly = true; kernel = null; };
+13 -16
nixos/modules/hardware/video/nvidia.nix
···
}
{
-
assertion = !syncCfg.enable ||
-
(pCfg.nvidiaBusId != "" && pCfg.intelBusId != "");
+
assertion = syncCfg.enable -> pCfg.nvidiaBusId != "" && pCfg.intelBusId != "";
message = ''
When NVIDIA Optimus via PRIME is enabled, the GPU bus IDs must configured.
'';
···
# - Configure the display manager to run specific `xrandr` commands which will
# configure/enable displays connected to the Intel GPU.
-
services.xserver.drivers = singleton {
+
services.xserver.drivers = optional syncCfg.enable {
+
name = "modesetting";
+
display = false;
+
deviceSection = ''
+
BusID "${pCfg.intelBusId}"
+
Option "AccelMethod" "none"
+
'';
+
} ++ singleton {
name = "nvidia";
modules = [ nvidia_x11.bin ];
+
display = true;
deviceSection = optionalString syncCfg.enable
''
BusID "${pCfg.nvidiaBusId}"
···
'';
};
-
services.xserver.extraConfig = optionalString syncCfg.enable
-
''
-
Section "Device"
-
Identifier "nvidia-optimus-intel"
-
Driver "modesetting"
-
BusID "${pCfg.intelBusId}"
-
Option "AccelMethod" "none"
-
EndSection
-
'';
-
services.xserver.serverLayoutSection = optionalString syncCfg.enable
-
''
-
Inactive "nvidia-optimus-intel"
-
'';
+
services.xserver.serverLayoutSection = optionalString syncCfg.enable ''
+
Inactive "Device-modesetting[0]"
+
'';
services.xserver.displayManager.setupCommands = optionalString syncCfg.enable ''
# Added by nvidia configuration module for Optimus/PRIME.
+35 -33
nixos/modules/services/x11/xserver.nix
···
then { modules = [xorg.${"xf86video" + name}]; }
else null)
knownVideoDrivers;
-
in optional (driver != null) ({ inherit name; modules = []; driverName = name; } // driver));
+
in optional (driver != null) ({ inherit name; modules = []; driverName = name; display = true; } // driver));
assertions = [
{ assertion = config.security.polkit.enable;
···
${cfg.serverLayoutSection}
# Reference the Screen sections for each driver. This will
# cause the X server to try each in turn.
-
${flip concatMapStrings cfg.drivers (d: ''
+
${flip concatMapStrings (filter (d: d.display) cfg.drivers) (d: ''
Screen "Screen-${d.name}[0]"
'')}
EndSection
···
${driver.deviceSection or ""}
${xrandrDeviceSection}
EndSection
+
${optionalString driver.display ''
-
Section "Screen"
-
Identifier "Screen-${driver.name}[0]"
-
Device "Device-${driver.name}[0]"
-
${optionalString (cfg.monitorSection != "") ''
-
Monitor "Monitor[0]"
-
''}
+
Section "Screen"
+
Identifier "Screen-${driver.name}[0]"
+
Device "Device-${driver.name}[0]"
+
${optionalString (cfg.monitorSection != "") ''
+
Monitor "Monitor[0]"
+
''}
-
${cfg.screenSection}
-
${driver.screenSection or ""}
+
${cfg.screenSection}
+
${driver.screenSection or ""}
-
${optionalString (cfg.defaultDepth != 0) ''
-
DefaultDepth ${toString cfg.defaultDepth}
-
''}
+
${optionalString (cfg.defaultDepth != 0) ''
+
DefaultDepth ${toString cfg.defaultDepth}
+
''}
-
${optionalString
-
(driver.name != "virtualbox" &&
-
(cfg.resolutions != [] ||
-
cfg.extraDisplaySettings != "" ||
-
cfg.virtualScreen != null))
-
(let
-
f = depth:
-
''
-
SubSection "Display"
-
Depth ${toString depth}
-
${optionalString (cfg.resolutions != [])
-
"Modes ${concatMapStrings (res: ''"${toString res.x}x${toString res.y}"'') cfg.resolutions}"}
-
${cfg.extraDisplaySettings}
-
${optionalString (cfg.virtualScreen != null)
-
"Virtual ${toString cfg.virtualScreen.x} ${toString cfg.virtualScreen.y}"}
-
EndSubSection
-
'';
-
in concatMapStrings f [8 16 24]
-
)}
+
${optionalString
+
(driver.name != "virtualbox" &&
+
(cfg.resolutions != [] ||
+
cfg.extraDisplaySettings != "" ||
+
cfg.virtualScreen != null))
+
(let
+
f = depth:
+
''
+
SubSection "Display"
+
Depth ${toString depth}
+
${optionalString (cfg.resolutions != [])
+
"Modes ${concatMapStrings (res: ''"${toString res.x}x${toString res.y}"'') cfg.resolutions}"}
+
${cfg.extraDisplaySettings}
+
${optionalString (cfg.virtualScreen != null)
+
"Virtual ${toString cfg.virtualScreen.x} ${toString cfg.virtualScreen.y}"}
+
EndSubSection
+
'';
+
in concatMapStrings f [8 16 24]
+
)}
-
EndSection
+
EndSection
+
''}
'')}
${xrandrMonitorSections}