mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-06-12 20:55:31 +03:00
Merge pull request #320228 from K900/opengl-cleanups
treewide: big opengl cleanups
This commit is contained in:
commit
20b7b4f619
31 changed files with 180 additions and 524 deletions
|
@ -30,7 +30,7 @@ $ export \
|
||||||
```
|
```
|
||||||
|
|
||||||
The second mechanism is to add the OpenCL driver package to
|
The second mechanism is to add the OpenCL driver package to
|
||||||
[](#opt-hardware.opengl.extraPackages).
|
[](#opt-hardware.graphics.extraPackages).
|
||||||
This links the ICD file under `/run/opengl-driver`, where it will be visible
|
This links the ICD file under `/run/opengl-driver`, where it will be visible
|
||||||
to the ICD loader.
|
to the ICD loader.
|
||||||
|
|
||||||
|
@ -51,12 +51,12 @@ Platform Vendor Advanced Micro Devices, Inc.
|
||||||
Modern AMD [Graphics Core
|
Modern AMD [Graphics Core
|
||||||
Next](https://en.wikipedia.org/wiki/Graphics_Core_Next) (GCN) GPUs are
|
Next](https://en.wikipedia.org/wiki/Graphics_Core_Next) (GCN) GPUs are
|
||||||
supported through the rocmPackages.clr.icd package. Adding this package to
|
supported through the rocmPackages.clr.icd package. Adding this package to
|
||||||
[](#opt-hardware.opengl.extraPackages)
|
[](#opt-hardware.graphics.extraPackages)
|
||||||
enables OpenCL support:
|
enables OpenCL support:
|
||||||
|
|
||||||
```nix
|
```nix
|
||||||
{
|
{
|
||||||
hardware.opengl.extraPackages = [
|
hardware.graphics.extraPackages = [
|
||||||
rocmPackages.clr.icd
|
rocmPackages.clr.icd
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
@ -71,13 +71,13 @@ intel-compute-runtime package. The proprietary Intel OpenCL runtime, in
|
||||||
the intel-ocl package, is an alternative for Gen7 GPUs.
|
the intel-ocl package, is an alternative for Gen7 GPUs.
|
||||||
|
|
||||||
The intel-compute-runtime or intel-ocl package can be added to
|
The intel-compute-runtime or intel-ocl package can be added to
|
||||||
[](#opt-hardware.opengl.extraPackages)
|
[](#opt-hardware.graphics.extraPackages)
|
||||||
to enable OpenCL support. For example, for Gen8 and later GPUs, the following
|
to enable OpenCL support. For example, for Gen8 and later GPUs, the following
|
||||||
configuration can be used:
|
configuration can be used:
|
||||||
|
|
||||||
```nix
|
```nix
|
||||||
{
|
{
|
||||||
hardware.opengl.extraPackages = [
|
hardware.graphics.extraPackages = [
|
||||||
intel-compute-runtime
|
intel-compute-runtime
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
@ -90,8 +90,8 @@ compute API for GPUs. It is used directly by games or indirectly though
|
||||||
compatibility layers like
|
compatibility layers like
|
||||||
[DXVK](https://github.com/doitsujin/dxvk/wiki).
|
[DXVK](https://github.com/doitsujin/dxvk/wiki).
|
||||||
|
|
||||||
By default, if [](#opt-hardware.opengl.driSupport)
|
By default, if [](#opt-hardware.graphics.enable)
|
||||||
is enabled, mesa is installed and provides Vulkan for supported hardware.
|
is enabled, Mesa is installed and provides Vulkan for supported hardware.
|
||||||
|
|
||||||
Similar to OpenCL, Vulkan drivers are loaded through the *Installable
|
Similar to OpenCL, Vulkan drivers are loaded through the *Installable
|
||||||
Client Driver* (ICD) mechanism. ICD files for Vulkan are JSON files that
|
Client Driver* (ICD) mechanism. ICD files for Vulkan are JSON files that
|
||||||
|
@ -110,7 +110,7 @@ $ export \
|
||||||
```
|
```
|
||||||
|
|
||||||
The second mechanism is to add the Vulkan driver package to
|
The second mechanism is to add the Vulkan driver package to
|
||||||
[](#opt-hardware.opengl.extraPackages).
|
[](#opt-hardware.graphics.extraPackages).
|
||||||
This links the ICD file under `/run/opengl-driver`, where it will be
|
This links the ICD file under `/run/opengl-driver`, where it will be
|
||||||
visible to the ICD loader.
|
visible to the ICD loader.
|
||||||
|
|
||||||
|
@ -140,18 +140,18 @@ Modern AMD [Graphics Core
|
||||||
Next](https://en.wikipedia.org/wiki/Graphics_Core_Next) (GCN) GPUs are
|
Next](https://en.wikipedia.org/wiki/Graphics_Core_Next) (GCN) GPUs are
|
||||||
supported through either radv, which is part of mesa, or the amdvlk
|
supported through either radv, which is part of mesa, or the amdvlk
|
||||||
package. Adding the amdvlk package to
|
package. Adding the amdvlk package to
|
||||||
[](#opt-hardware.opengl.extraPackages)
|
[](#opt-hardware.graphics.extraPackages)
|
||||||
makes amdvlk the default driver and hides radv and lavapipe from the device list.
|
makes amdvlk the default driver and hides radv and lavapipe from the device list.
|
||||||
A specific driver can be forced as follows:
|
A specific driver can be forced as follows:
|
||||||
|
|
||||||
```nix
|
```nix
|
||||||
{
|
{
|
||||||
hardware.opengl.extraPackages = [
|
hardware.graphics.extraPackages = [
|
||||||
pkgs.amdvlk
|
pkgs.amdvlk
|
||||||
];
|
];
|
||||||
|
|
||||||
# To enable Vulkan support for 32-bit applications, also add:
|
# To enable Vulkan support for 32-bit applications, also add:
|
||||||
hardware.opengl.extraPackages32 = [
|
hardware.graphics.extraPackages32 = [
|
||||||
pkgs.driversi686Linux.amdvlk
|
pkgs.driversi686Linux.amdvlk
|
||||||
];
|
];
|
||||||
|
|
||||||
|
@ -171,7 +171,7 @@ graphics hardware acceleration capabilities for video processing.
|
||||||
|
|
||||||
VA-API drivers are loaded by `libva`. The version in nixpkgs is built to search
|
VA-API drivers are loaded by `libva`. The version in nixpkgs is built to search
|
||||||
the opengl driver path, so drivers can be installed in
|
the opengl driver path, so drivers can be installed in
|
||||||
[](#opt-hardware.opengl.extraPackages).
|
[](#opt-hardware.graphics.extraPackages).
|
||||||
|
|
||||||
VA-API can be tested using:
|
VA-API can be tested using:
|
||||||
|
|
||||||
|
@ -185,7 +185,7 @@ Modern Intel GPUs use the iHD driver, which can be installed with:
|
||||||
|
|
||||||
```nix
|
```nix
|
||||||
{
|
{
|
||||||
hardware.opengl.extraPackages = [
|
hardware.graphics.extraPackages = [
|
||||||
intel-media-driver
|
intel-media-driver
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
@ -195,7 +195,7 @@ Older Intel GPUs use the i965 driver, which can be installed with:
|
||||||
|
|
||||||
```nix
|
```nix
|
||||||
{
|
{
|
||||||
hardware.opengl.extraPackages = [
|
hardware.graphics.extraPackages = [
|
||||||
intel-vaapi-driver
|
intel-vaapi-driver
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
|
@ -79,7 +79,7 @@ Wine, you should also set the following:
|
||||||
|
|
||||||
```nix
|
```nix
|
||||||
{
|
{
|
||||||
hardware.opengl.driSupport32Bit = true;
|
hardware.graphics.enable32Bit = true;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -183,23 +183,6 @@ If you have an older card, you may have to use one of the legacy drivers:
|
||||||
You may need to reboot after enabling this driver to prevent a clash
|
You may need to reboot after enabling this driver to prevent a clash
|
||||||
with other kernel modules.
|
with other kernel modules.
|
||||||
|
|
||||||
## Proprietary AMD drivers {#sec-x11--graphics-cards-amd}
|
|
||||||
|
|
||||||
AMD provides a proprietary driver for its graphics cards that is not
|
|
||||||
enabled by default because it's not Free Software, is often broken in
|
|
||||||
nixpkgs and as of this writing doesn't offer more features or
|
|
||||||
performance. If you still want to use it anyway, you need to explicitly
|
|
||||||
set:
|
|
||||||
|
|
||||||
```nix
|
|
||||||
{
|
|
||||||
services.xserver.videoDrivers = [ "amdgpu-pro" ];
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
You will need to reboot after enabling this driver to prevent a clash
|
|
||||||
with other kernel modules.
|
|
||||||
|
|
||||||
## Touchpads {#sec-x11-touchpads}
|
## Touchpads {#sec-x11-touchpads}
|
||||||
|
|
||||||
Support for Synaptics touchpads (found in many laptops such as the Dell
|
Support for Synaptics touchpads (found in many laptops such as the Dell
|
||||||
|
|
126
nixos/modules/hardware/graphics.nix
Normal file
126
nixos/modules/hardware/graphics.nix
Normal file
|
@ -0,0 +1,126 @@
|
||||||
|
{ config, lib, pkgs, ... }:
|
||||||
|
let
|
||||||
|
cfg = config.hardware.graphics;
|
||||||
|
|
||||||
|
driversEnv = pkgs.buildEnv {
|
||||||
|
name = "graphics-drivers";
|
||||||
|
paths = [ cfg.package ] ++ cfg.extraPackages;
|
||||||
|
};
|
||||||
|
|
||||||
|
driversEnv32 = pkgs.buildEnv {
|
||||||
|
name = "graphics-drivers-32bit";
|
||||||
|
paths = [ cfg.package32 ] ++ cfg.extraPackages32;
|
||||||
|
};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
(lib.mkRenamedOptionModule [ "services" "xserver" "vaapiDrivers" ] [ "hardware" "opengl" "extraPackages" ])
|
||||||
|
(lib.mkRemovedOptionModule [ "hardware" "opengl" "s3tcSupport" ] "S3TC support is now always enabled in Mesa.")
|
||||||
|
(lib.mkRemovedOptionModule [ "hardware" "opengl" "driSupport"] "The setting can be removed.")
|
||||||
|
|
||||||
|
(lib.mkRenamedOptionModule [ "hardware" "opengl" "enable"] [ "hardware" "graphics" "enable" ])
|
||||||
|
(lib.mkRenamedOptionModule [ "hardware" "opengl" "driSupport32Bit"] [ "hardware" "graphics" "enable32Bit" ])
|
||||||
|
(lib.mkRenamedOptionModule [ "hardware" "opengl" "package"] [ "hardware" "graphics" "package" ])
|
||||||
|
(lib.mkRenamedOptionModule [ "hardware" "opengl" "package32"] [ "hardware" "graphics" "package32" ])
|
||||||
|
(lib.mkRenamedOptionModule [ "hardware" "opengl" "extraPackages"] [ "hardware" "graphics" "extraPackages" ])
|
||||||
|
(lib.mkRenamedOptionModule [ "hardware" "opengl" "extraPackages32"] [ "hardware" "graphics" "extraPackages32" ])
|
||||||
|
];
|
||||||
|
|
||||||
|
options.hardware.graphics = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
description = ''
|
||||||
|
Whether to enable hardware accelerated graphics drivers.
|
||||||
|
|
||||||
|
This is required to allow most graphical applications and
|
||||||
|
environments to use hardware rendering, video encode/decode
|
||||||
|
acceleration, etc.
|
||||||
|
|
||||||
|
This option should be enabled by default by the corresponding modules,
|
||||||
|
so you do not usually have to set it yourself.
|
||||||
|
'';
|
||||||
|
type = lib.types.bool;
|
||||||
|
default = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
enable32Bit = lib.mkOption {
|
||||||
|
description = ''
|
||||||
|
On 64-bit systems, whether to also install 32-bit drivers for
|
||||||
|
32-bit applications (such as Wine).
|
||||||
|
'';
|
||||||
|
type = lib.types.bool;
|
||||||
|
default = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
package = lib.mkOption {
|
||||||
|
description = ''
|
||||||
|
The package that provides the default driver set.
|
||||||
|
'';
|
||||||
|
type = lib.types.package;
|
||||||
|
internal = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
package32 = lib.mkOption {
|
||||||
|
description = ''
|
||||||
|
The package that provides the 32-bit driver set. Used when {option}`enable32Bit` is enabled.
|
||||||
|
set.
|
||||||
|
'';
|
||||||
|
type = lib.types.package;
|
||||||
|
internal = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
extraPackages = lib.mkOption {
|
||||||
|
description = ''
|
||||||
|
Additional packages to add to the default graphics driver lookup path.
|
||||||
|
This can be used to add OpenCL drivers, VA-API/VDPAU drivers, etc.
|
||||||
|
|
||||||
|
::: {.note}
|
||||||
|
intel-media-driver supports hardware Broadwell (2014) or newer. Older hardware should use the mostly unmaintained intel-vaapi-driver driver.
|
||||||
|
:::
|
||||||
|
'';
|
||||||
|
type = lib.types.listOf lib.types.package;
|
||||||
|
default = [];
|
||||||
|
example = lib.literalExpression "with pkgs; [ intel-media-driver intel-ocl intel-vaapi-driver ]";
|
||||||
|
};
|
||||||
|
|
||||||
|
extraPackages32 = lib.mkOption {
|
||||||
|
description = ''
|
||||||
|
Additional packages to add to 32-bit graphics driver lookup path on 64-bit systems.
|
||||||
|
Used when {option}`enable32Bit` is set. This can be used to add OpenCL drivers, VA-API/VDPAU drivers, etc.
|
||||||
|
|
||||||
|
::: {.note}
|
||||||
|
intel-media-driver supports hardware Broadwell (2014) or newer. Older hardware should use the mostly unmaintained intel-vaapi-driver driver.
|
||||||
|
:::
|
||||||
|
'';
|
||||||
|
type = lib.types.listOf lib.types.package;
|
||||||
|
default = [];
|
||||||
|
example = lib.literalExpression "with pkgs.pkgsi686Linux; [ intel-media-driver intel-vaapi-driver ]";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = lib.mkIf cfg.enable {
|
||||||
|
assertions = [
|
||||||
|
{
|
||||||
|
assertion = cfg.enable32Bit -> pkgs.stdenv.isx86_64;
|
||||||
|
message = "`hardware.graphics.enable32Bit` only makes sense on a 64-bit system.";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
assertion = cfg.enable32Bit -> (config.boot.kernelPackages.kernel.features.ia32Emulation or false);
|
||||||
|
message = "`hardware.graphics.enable32Bit` requires a kernel that supports 32-bit emulation";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
systemd.tmpfiles.settings.graphics-driver = {
|
||||||
|
"/run/opengl-driver"."L+".argument = toString driversEnv;
|
||||||
|
"/run/opengl-driver-32" =
|
||||||
|
if pkgs.stdenv.isi686 then
|
||||||
|
{ "L+".argument = "opengl-driver"; }
|
||||||
|
else if cfg.enable32Bit then
|
||||||
|
{ "L+".argument = toString driversEnv32; }
|
||||||
|
else
|
||||||
|
{ "r" = {}; };
|
||||||
|
};
|
||||||
|
|
||||||
|
hardware.graphics.package = lib.mkDefault pkgs.mesa.drivers;
|
||||||
|
hardware.graphics.package32 = lib.mkDefault pkgs.pkgsi686Linux.mesa.drivers;
|
||||||
|
};
|
||||||
|
}
|
|
@ -1,158 +0,0 @@
|
||||||
{ config, lib, pkgs, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
|
|
||||||
cfg = config.hardware.opengl;
|
|
||||||
|
|
||||||
kernelPackages = config.boot.kernelPackages;
|
|
||||||
|
|
||||||
videoDrivers = config.services.xserver.videoDrivers;
|
|
||||||
|
|
||||||
package = pkgs.buildEnv {
|
|
||||||
name = "opengl-drivers";
|
|
||||||
paths = [ cfg.package ] ++ cfg.extraPackages;
|
|
||||||
};
|
|
||||||
|
|
||||||
package32 = pkgs.buildEnv {
|
|
||||||
name = "opengl-drivers-32bit";
|
|
||||||
paths = [ cfg.package32 ] ++ cfg.extraPackages32;
|
|
||||||
};
|
|
||||||
|
|
||||||
in
|
|
||||||
|
|
||||||
{
|
|
||||||
|
|
||||||
imports = [
|
|
||||||
(lib.mkRenamedOptionModule [ "services" "xserver" "vaapiDrivers" ] [ "hardware" "opengl" "extraPackages" ])
|
|
||||||
(lib.mkRemovedOptionModule [ "hardware" "opengl" "s3tcSupport" ] "S3TC support is now always enabled in Mesa.")
|
|
||||||
];
|
|
||||||
|
|
||||||
options = {
|
|
||||||
|
|
||||||
hardware.opengl = {
|
|
||||||
enable = lib.mkOption {
|
|
||||||
description = ''
|
|
||||||
Whether to enable OpenGL drivers. This is needed to enable
|
|
||||||
OpenGL support in X11 systems, as well as for Wayland compositors
|
|
||||||
like sway and Weston. It is enabled by default
|
|
||||||
by the corresponding modules, so you do not usually have to
|
|
||||||
set it yourself, only if there is no module for your wayland
|
|
||||||
compositor of choice. See services.xserver.enable and
|
|
||||||
programs.sway.enable.
|
|
||||||
'';
|
|
||||||
type = lib.types.bool;
|
|
||||||
default = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
driSupport = lib.mkOption {
|
|
||||||
type = lib.types.bool;
|
|
||||||
default = true;
|
|
||||||
description = ''
|
|
||||||
Whether to enable accelerated OpenGL rendering through the
|
|
||||||
Direct Rendering Interface (DRI).
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
driSupport32Bit = lib.mkOption {
|
|
||||||
type = lib.types.bool;
|
|
||||||
default = false;
|
|
||||||
description = ''
|
|
||||||
On 64-bit systems, whether to support Direct Rendering for
|
|
||||||
32-bit applications (such as Wine). This is currently only
|
|
||||||
supported for the `nvidia` as well as
|
|
||||||
`Mesa`.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
package = lib.mkOption {
|
|
||||||
type = lib.types.package;
|
|
||||||
internal = true;
|
|
||||||
description = ''
|
|
||||||
The package that provides the OpenGL implementation.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
package32 = lib.mkOption {
|
|
||||||
type = lib.types.package;
|
|
||||||
internal = true;
|
|
||||||
description = ''
|
|
||||||
The package that provides the 32-bit OpenGL implementation on
|
|
||||||
64-bit systems. Used when {option}`driSupport32Bit` is
|
|
||||||
set.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
extraPackages = lib.mkOption {
|
|
||||||
type = lib.types.listOf lib.types.package;
|
|
||||||
default = [];
|
|
||||||
example = lib.literalExpression "with pkgs; [ intel-media-driver intel-ocl intel-vaapi-driver ]";
|
|
||||||
description = ''
|
|
||||||
Additional packages to add to OpenGL drivers.
|
|
||||||
This can be used to add OpenCL drivers, VA-API/VDPAU drivers etc.
|
|
||||||
|
|
||||||
::: {.note}
|
|
||||||
intel-media-driver supports hardware Broadwell (2014) or newer. Older hardware should use the mostly unmaintained intel-vaapi-driver driver.
|
|
||||||
:::
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
extraPackages32 =lib. mkOption {
|
|
||||||
type = lib.types.listOf lib.types.package;
|
|
||||||
default = [];
|
|
||||||
example = lib.literalExpression "with pkgs.pkgsi686Linux; [ intel-media-driver intel-vaapi-driver ]";
|
|
||||||
description = ''
|
|
||||||
Additional packages to add to 32-bit OpenGL drivers on 64-bit systems.
|
|
||||||
Used when {option}`driSupport32Bit` is set. This can be used to add OpenCL drivers, VA-API/VDPAU drivers etc.
|
|
||||||
|
|
||||||
::: {.note}
|
|
||||||
intel-media-driver supports hardware Broadwell (2014) or newer. Older hardware should use the mostly unmaintained intel-vaapi-driver driver.
|
|
||||||
:::
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
setLdLibraryPath = lib.mkOption {
|
|
||||||
type = lib.types.bool;
|
|
||||||
internal = true;
|
|
||||||
default = false;
|
|
||||||
description = ''
|
|
||||||
Whether the `LD_LIBRARY_PATH` environment variable
|
|
||||||
should be set to the locations of driver libraries. Drivers which
|
|
||||||
rely on overriding libraries should set this to true. Drivers which
|
|
||||||
support `libglvnd` and other dispatch libraries
|
|
||||||
instead of overriding libraries should not set this.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
config = lib.mkIf cfg.enable {
|
|
||||||
assertions = [
|
|
||||||
{ assertion = cfg.driSupport32Bit -> pkgs.stdenv.isx86_64;
|
|
||||||
message = "Option driSupport32Bit only makes sense on a 64-bit system.";
|
|
||||||
}
|
|
||||||
{ assertion = cfg.driSupport32Bit -> (config.boot.kernelPackages.kernel.features.ia32Emulation or false);
|
|
||||||
message = "Option driSupport32Bit requires a kernel that supports 32bit emulation";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
systemd.tmpfiles.settings.opengl = {
|
|
||||||
"/run/opengl-driver"."L+".argument = toString package;
|
|
||||||
"/run/opengl-driver-32" =
|
|
||||||
if pkgs.stdenv.isi686 then
|
|
||||||
{ "L+".argument = "opengl-driver"; }
|
|
||||||
else if cfg.driSupport32Bit then
|
|
||||||
{ "L+".argument = toString package32; }
|
|
||||||
else
|
|
||||||
{ "r" = {}; };
|
|
||||||
};
|
|
||||||
|
|
||||||
environment.sessionVariables.LD_LIBRARY_PATH = lib.mkIf cfg.setLdLibraryPath
|
|
||||||
([ "/run/opengl-driver/lib" ] ++ lib.optional cfg.driSupport32Bit "/run/opengl-driver-32/lib");
|
|
||||||
|
|
||||||
hardware.opengl.package = lib.mkDefault pkgs.mesa.drivers;
|
|
||||||
hardware.opengl.package32 = lib.mkDefault pkgs.pkgsi686Linux.mesa.drivers;
|
|
||||||
|
|
||||||
boot.extraModulePackages = lib.optional (lib.elem "virtualbox" videoDrivers) kernelPackages.virtualboxGuestAdditions;
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,69 +0,0 @@
|
||||||
# This module provides the proprietary AMDGPU-PRO drivers.
|
|
||||||
|
|
||||||
{ config, lib, pkgs, ... }:
|
|
||||||
|
|
||||||
with lib;
|
|
||||||
|
|
||||||
let
|
|
||||||
|
|
||||||
drivers = config.services.xserver.videoDrivers;
|
|
||||||
|
|
||||||
enabled = elem "amdgpu-pro" drivers;
|
|
||||||
|
|
||||||
package = config.boot.kernelPackages.amdgpu-pro;
|
|
||||||
package32 = pkgs.pkgsi686Linux.linuxPackages.amdgpu-pro.override { kernel = null; };
|
|
||||||
|
|
||||||
opengl = config.hardware.opengl;
|
|
||||||
|
|
||||||
in
|
|
||||||
|
|
||||||
{
|
|
||||||
|
|
||||||
config = mkIf enabled {
|
|
||||||
services.xserver.drivers = singleton
|
|
||||||
{ name = "amdgpu"; modules = [ package ]; display = true; };
|
|
||||||
|
|
||||||
hardware.opengl.package = package;
|
|
||||||
hardware.opengl.package32 = package32;
|
|
||||||
hardware.opengl.setLdLibraryPath = true;
|
|
||||||
|
|
||||||
boot.extraModulePackages = [ package.kmod ];
|
|
||||||
|
|
||||||
boot.kernelPackages = pkgs.linuxKernel.packagesFor
|
|
||||||
(pkgs.linuxKernel.kernels.linux_5_10.override {
|
|
||||||
structuredExtraConfig = {
|
|
||||||
DEVICE_PRIVATE = kernel.yes;
|
|
||||||
KALLSYMS_ALL = kernel.yes;
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
hardware.firmware = [ package.fw ];
|
|
||||||
|
|
||||||
systemd.tmpfiles.settings.amdgpu-pro = {
|
|
||||||
"/run/amdgpu"."L+".argument = "${package}/opt/amdgpu";
|
|
||||||
"/run/amdgpu-pro"."L+".argument = "${package}/opt/amdgpu-pro";
|
|
||||||
};
|
|
||||||
|
|
||||||
system.requiredKernelConfig = with config.lib.kernelConfig; [
|
|
||||||
(isYes "DEVICE_PRIVATE")
|
|
||||||
(isYes "KALLSYMS_ALL")
|
|
||||||
];
|
|
||||||
|
|
||||||
boot.initrd.extraUdevRulesCommands = mkIf (!config.boot.initrd.systemd.enable) ''
|
|
||||||
cp -v ${package}/etc/udev/rules.d/*.rules $out/
|
|
||||||
'';
|
|
||||||
boot.initrd.services.udev.packages = [ package ];
|
|
||||||
|
|
||||||
environment.systemPackages =
|
|
||||||
[ package.vulkan ] ++
|
|
||||||
# this isn't really DRI, but we'll reuse this option for now
|
|
||||||
optional config.hardware.opengl.driSupport32Bit package32.vulkan;
|
|
||||||
|
|
||||||
environment.etc = {
|
|
||||||
"modprobe.d/blacklist-radeon.conf".source = package + "/etc/modprobe.d/blacklist-radeon.conf";
|
|
||||||
amd.source = package + "/etc/amd";
|
|
||||||
};
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
|
|
@ -297,7 +297,7 @@ in
|
||||||
KERNEL=="nvidia_uvm", RUN+="${pkgs.runtimeShell} -c 'mknod -m 666 /dev/nvidia-uvm c $$(grep nvidia-uvm /proc/devices | cut -d \ -f 1) 0'"
|
KERNEL=="nvidia_uvm", RUN+="${pkgs.runtimeShell} -c 'mknod -m 666 /dev/nvidia-uvm c $$(grep nvidia-uvm /proc/devices | cut -d \ -f 1) 0'"
|
||||||
KERNEL=="nvidia_uvm", RUN+="${pkgs.runtimeShell} -c 'mknod -m 666 /dev/nvidia-uvm-tools c $$(grep nvidia-uvm /proc/devices | cut -d \ -f 1) 1'"
|
KERNEL=="nvidia_uvm", RUN+="${pkgs.runtimeShell} -c 'mknod -m 666 /dev/nvidia-uvm-tools c $$(grep nvidia-uvm /proc/devices | cut -d \ -f 1) 1'"
|
||||||
'';
|
'';
|
||||||
hardware.opengl = {
|
hardware.graphics = {
|
||||||
extraPackages = [ nvidia_x11.out ];
|
extraPackages = [ nvidia_x11.out ];
|
||||||
extraPackages32 = [ nvidia_x11.lib32 ];
|
extraPackages32 = [ nvidia_x11.lib32 ];
|
||||||
};
|
};
|
||||||
|
@ -467,7 +467,7 @@ in
|
||||||
"egl/egl_external_platform.d".source = "/run/opengl-driver/share/egl/egl_external_platform.d/";
|
"egl/egl_external_platform.d".source = "/run/opengl-driver/share/egl/egl_external_platform.d/";
|
||||||
};
|
};
|
||||||
|
|
||||||
hardware.opengl = {
|
hardware.graphics = {
|
||||||
extraPackages = [ pkgs.nvidia-vaapi-driver ];
|
extraPackages = [ pkgs.nvidia-vaapi-driver ];
|
||||||
extraPackages32 = [ pkgs.pkgsi686Linux.nvidia-vaapi-driver ];
|
extraPackages32 = [ pkgs.pkgsi686Linux.nvidia-vaapi-driver ];
|
||||||
};
|
};
|
||||||
|
|
7
nixos/modules/hardware/video/virtualbox.nix
Normal file
7
nixos/modules/hardware/video/virtualbox.nix
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
{ lib, config, ... }:
|
||||||
|
let
|
||||||
|
inherit (config.boot) kernelPackages;
|
||||||
|
inherit (config.services.xserver) videoDrivers;
|
||||||
|
in {
|
||||||
|
boot.extraModulePackages = lib.mkIf (lib.elem "virtualbox" videoDrivers) [ kernelPackages.virtualboxGuestAdditions ];
|
||||||
|
}
|
|
@ -67,6 +67,7 @@
|
||||||
./hardware/gkraken.nix
|
./hardware/gkraken.nix
|
||||||
./hardware/glasgow.nix
|
./hardware/glasgow.nix
|
||||||
./hardware/gpgsmartcards.nix
|
./hardware/gpgsmartcards.nix
|
||||||
|
./hardware/graphics.nix
|
||||||
./hardware/hackrf.nix
|
./hardware/hackrf.nix
|
||||||
./hardware/i2c.nix
|
./hardware/i2c.nix
|
||||||
./hardware/infiniband.nix
|
./hardware/infiniband.nix
|
||||||
|
@ -84,7 +85,6 @@
|
||||||
./hardware/new-lg4ff.nix
|
./hardware/new-lg4ff.nix
|
||||||
./hardware/nitrokey.nix
|
./hardware/nitrokey.nix
|
||||||
./hardware/onlykey/default.nix
|
./hardware/onlykey/default.nix
|
||||||
./hardware/opengl.nix
|
|
||||||
./hardware/openrazer.nix
|
./hardware/openrazer.nix
|
||||||
./hardware/opentabletdriver.nix
|
./hardware/opentabletdriver.nix
|
||||||
./hardware/pcmcia.nix
|
./hardware/pcmcia.nix
|
||||||
|
@ -103,7 +103,6 @@
|
||||||
./hardware/uni-sync.nix
|
./hardware/uni-sync.nix
|
||||||
./hardware/usb-modeswitch.nix
|
./hardware/usb-modeswitch.nix
|
||||||
./hardware/usb-storage.nix
|
./hardware/usb-storage.nix
|
||||||
./hardware/video/amdgpu-pro.nix
|
|
||||||
./hardware/video/bumblebee.nix
|
./hardware/video/bumblebee.nix
|
||||||
./hardware/video/capture/mwprocapture.nix
|
./hardware/video/capture/mwprocapture.nix
|
||||||
./hardware/video/displaylink.nix
|
./hardware/video/displaylink.nix
|
||||||
|
@ -111,6 +110,7 @@
|
||||||
./hardware/video/nvidia.nix
|
./hardware/video/nvidia.nix
|
||||||
./hardware/video/switcheroo-control.nix
|
./hardware/video/switcheroo-control.nix
|
||||||
./hardware/video/uvcvideo/default.nix
|
./hardware/video/uvcvideo/default.nix
|
||||||
|
./hardware/video/virtualbox.nix
|
||||||
./hardware/video/webcam/facetimehd.nix
|
./hardware/video/webcam/facetimehd.nix
|
||||||
./hardware/video/webcam/ipu6.nix
|
./hardware/video/webcam/ipu6.nix
|
||||||
./hardware/wooting.nix
|
./hardware/wooting.nix
|
||||||
|
|
|
@ -65,7 +65,7 @@ in {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
hardware.opengl.enable = lib.mkDefault true;
|
hardware.graphics.enable = lib.mkDefault true;
|
||||||
fonts.enableDefaultPackages = lib.mkDefault true;
|
fonts.enableDefaultPackages = lib.mkDefault true;
|
||||||
programs.dconf.enable = lib.mkDefault true;
|
programs.dconf.enable = lib.mkDefault true;
|
||||||
programs.xwayland.enable = lib.mkDefault true;
|
programs.xwayland.enable = lib.mkDefault true;
|
||||||
|
|
|
@ -50,7 +50,7 @@ in {
|
||||||
}) // (prev.extraEnv or {});
|
}) // (prev.extraEnv or {});
|
||||||
extraLibraries = pkgs: let
|
extraLibraries = pkgs: let
|
||||||
prevLibs = if prev ? extraLibraries then prev.extraLibraries pkgs else [ ];
|
prevLibs = if prev ? extraLibraries then prev.extraLibraries pkgs else [ ];
|
||||||
additionalLibs = with config.hardware.opengl;
|
additionalLibs = with config.hardware.graphics;
|
||||||
if pkgs.stdenv.hostPlatform.is64bit
|
if pkgs.stdenv.hostPlatform.is64bit
|
||||||
then [ package ] ++ extraPackages
|
then [ package ] ++ extraPackages
|
||||||
else [ package32 ] ++ extraPackages32;
|
else [ package32 ] ++ extraPackages32;
|
||||||
|
@ -176,10 +176,9 @@ in {
|
||||||
};
|
};
|
||||||
|
|
||||||
config = lib.mkIf cfg.enable {
|
config = lib.mkIf cfg.enable {
|
||||||
hardware.opengl = { # this fixes the "glXChooseVisual failed" bug, context: https://github.com/NixOS/nixpkgs/issues/47932
|
hardware.graphics = { # this fixes the "glXChooseVisual failed" bug, context: https://github.com/NixOS/nixpkgs/issues/47932
|
||||||
enable = true;
|
enable = true;
|
||||||
driSupport = true;
|
enable32Bit = true;
|
||||||
driSupport32Bit = true;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
security.wrappers = lib.mkIf (cfg.gamescopeSession.enable && gamescopeCfg.capSysNice) {
|
security.wrappers = lib.mkIf (cfg.gamescopeSession.enable && gamescopeCfg.capSysNice) {
|
||||||
|
|
|
@ -17,7 +17,7 @@ in
|
||||||
Whether to set up NixOS such that TurboVNC's built-in software OpenGL
|
Whether to set up NixOS such that TurboVNC's built-in software OpenGL
|
||||||
implementation works.
|
implementation works.
|
||||||
|
|
||||||
This will enable {option}`hardware.opengl.enable` so that OpenGL
|
This will enable {option}`hardware.graphics.enable` so that OpenGL
|
||||||
programs can find Mesa's llvmpipe drivers.
|
programs can find Mesa's llvmpipe drivers.
|
||||||
|
|
||||||
Setting this option to `false` does not mean that software
|
Setting this option to `false` does not mean that software
|
||||||
|
@ -46,7 +46,7 @@ in
|
||||||
# can find the llvmpipe `swrast.so` software rendering DRI lib via `libglvnd`.
|
# can find the llvmpipe `swrast.so` software rendering DRI lib via `libglvnd`.
|
||||||
# This comment exists to explain why `hardware.` is involved,
|
# This comment exists to explain why `hardware.` is involved,
|
||||||
# even though 100% software rendering is used.
|
# even though 100% software rendering is used.
|
||||||
hardware.opengl.enable = true;
|
hardware.graphics.enable = true;
|
||||||
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
pam.services.swaylock = {};
|
pam.services.swaylock = {};
|
||||||
};
|
};
|
||||||
|
|
||||||
hardware.opengl.enable = lib.mkDefault true;
|
hardware.graphics.enable = lib.mkDefault true;
|
||||||
fonts.enableDefaultPackages = lib.mkDefault true;
|
fonts.enableDefaultPackages = lib.mkDefault true;
|
||||||
|
|
||||||
programs = {
|
programs = {
|
||||||
|
|
|
@ -63,7 +63,7 @@ in {
|
||||||
];
|
];
|
||||||
|
|
||||||
# Copy-pasted basic stuff
|
# Copy-pasted basic stuff
|
||||||
hardware.opengl.enable = lib.mkDefault true;
|
hardware.graphics.enable = lib.mkDefault true;
|
||||||
fonts.enableDefaultPackages = lib.mkDefault true;
|
fonts.enableDefaultPackages = lib.mkDefault true;
|
||||||
programs.dconf.enable = lib.mkDefault true;
|
programs.dconf.enable = lib.mkDefault true;
|
||||||
|
|
||||||
|
|
|
@ -212,9 +212,7 @@ in
|
||||||
after = [ "acpid.service" "systemd-logind.service" "systemd-user-sessions.service" ];
|
after = [ "acpid.service" "systemd-logind.service" "systemd-user-sessions.service" ];
|
||||||
restartIfChanged = false;
|
restartIfChanged = false;
|
||||||
|
|
||||||
environment = lib.optionalAttrs config.hardware.opengl.setLdLibraryPath {
|
environment = cfg.environment;
|
||||||
LD_LIBRARY_PATH = lib.makeLibraryPath [ pkgs.addOpenGLRunpath.driverLink ];
|
|
||||||
} // cfg.environment;
|
|
||||||
|
|
||||||
preStart = cfg.preStart;
|
preStart = cfg.preStart;
|
||||||
script = lib.mkIf (config.systemd.services.display-manager.enable == true) cfg.execCmd;
|
script = lib.mkIf (config.systemd.services.display-manager.enable == true) cfg.execCmd;
|
||||||
|
|
|
@ -31,11 +31,9 @@ in {
|
||||||
};
|
};
|
||||||
|
|
||||||
config = lib.mkIf cfg.enable {
|
config = lib.mkIf cfg.enable {
|
||||||
hardware.opengl = {
|
hardware.graphics = {
|
||||||
enable = true;
|
enable = true;
|
||||||
driSupport = true;
|
|
||||||
extraPackages = [ cfg.package ];
|
extraPackages = [ cfg.package ];
|
||||||
driSupport32Bit = cfg.support32Bit.enable;
|
|
||||||
extraPackages32 = [ cfg.support32Bit.package ];
|
extraPackages32 = [ cfg.support32Bit.package ];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -38,7 +38,7 @@ in
|
||||||
|
|
||||||
fonts.enableDefaultPackages = lib.mkDefault true;
|
fonts.enableDefaultPackages = lib.mkDefault true;
|
||||||
|
|
||||||
hardware.opengl.enable = lib.mkDefault true;
|
hardware.graphics.enable = lib.mkDefault true;
|
||||||
|
|
||||||
programs.gnupg.agent.pinentryPackage = lib.mkOverride 1100 pkgs.pinentry-gnome3;
|
programs.gnupg.agent.pinentryPackage = lib.mkOverride 1100 pkgs.pinentry-gnome3;
|
||||||
|
|
||||||
|
|
|
@ -107,7 +107,7 @@ in {
|
||||||
fonts = optional (cfg.fonts != null) "font-name=${lib.concatMapStringsSep ", " (f: f.name) cfg.fonts}";
|
fonts = optional (cfg.fonts != null) "font-name=${lib.concatMapStringsSep ", " (f: f.name) cfg.fonts}";
|
||||||
in lib.concatStringsSep "\n" (render ++ fonts);
|
in lib.concatStringsSep "\n" (render ++ fonts);
|
||||||
|
|
||||||
hardware.opengl.enable = mkIf cfg.hwRender true;
|
hardware.graphics.enable = mkIf cfg.hwRender true;
|
||||||
|
|
||||||
fonts = mkIf (cfg.fonts != null) {
|
fonts = mkIf (cfg.fonts != null) {
|
||||||
fontconfig.enable = true;
|
fontconfig.enable = true;
|
||||||
|
|
|
@ -101,7 +101,7 @@ in {
|
||||||
session required ${config.systemd.package}/lib/security/pam_systemd.so
|
session required ${config.systemd.package}/lib/security/pam_systemd.so
|
||||||
'';
|
'';
|
||||||
|
|
||||||
hardware.opengl.enable = mkDefault true;
|
hardware.graphics.enable = mkDefault true;
|
||||||
|
|
||||||
systemd.targets.graphical.wants = [ "cage-tty1.service" ];
|
systemd.targets.graphical.wants = [ "cage-tty1.service" ];
|
||||||
|
|
||||||
|
|
|
@ -216,7 +216,7 @@ in
|
||||||
|
|
||||||
security.pam.services.phosh = {};
|
security.pam.services.phosh = {};
|
||||||
|
|
||||||
hardware.opengl.enable = mkDefault true;
|
hardware.graphics.enable = mkDefault true;
|
||||||
|
|
||||||
services.gnome.core-shell.enable = true;
|
services.gnome.core-shell.enable = true;
|
||||||
services.gnome.core-os-services.enable = true;
|
services.gnome.core-os-services.enable = true;
|
||||||
|
|
|
@ -302,7 +302,7 @@ in
|
||||||
default = [ "modesetting" "fbdev" ];
|
default = [ "modesetting" "fbdev" ];
|
||||||
example = [
|
example = [
|
||||||
"nvidia"
|
"nvidia"
|
||||||
"amdgpu-pro"
|
"amdgpu"
|
||||||
];
|
];
|
||||||
# TODO(@oxij): think how to easily add the rest, like those nvidia things
|
# TODO(@oxij): think how to easily add the rest, like those nvidia things
|
||||||
relatedPackages = concatLists
|
relatedPackages = concatLists
|
||||||
|
@ -716,10 +716,7 @@ in
|
||||||
|
|
||||||
restartIfChanged = false;
|
restartIfChanged = false;
|
||||||
|
|
||||||
environment =
|
environment = config.services.displayManager.environment;
|
||||||
optionalAttrs config.hardware.opengl.setLdLibraryPath
|
|
||||||
{ LD_LIBRARY_PATH = lib.makeLibraryPath [ pkgs.addOpenGLRunpath.driverLink ]; }
|
|
||||||
// config.services.displayManager.environment;
|
|
||||||
|
|
||||||
preStart =
|
preStart =
|
||||||
''
|
''
|
||||||
|
|
|
@ -244,8 +244,8 @@ in
|
||||||
};
|
};
|
||||||
|
|
||||||
assertions = [
|
assertions = [
|
||||||
{ assertion = cfg.enableNvidia && pkgs.stdenv.isx86_64 -> config.hardware.opengl.driSupport32Bit or false;
|
{ assertion = cfg.enableNvidia && pkgs.stdenv.isx86_64 -> config.hardware.graphics.enable32Bit or false;
|
||||||
message = "Option enableNvidia on x86_64 requires 32bit support libraries";
|
message = "Option enableNvidia on x86_64 requires 32-bit support libraries";
|
||||||
}];
|
}];
|
||||||
|
|
||||||
virtualisation.docker.daemon.settings = {
|
virtualisation.docker.daemon.settings = {
|
||||||
|
|
|
@ -12,7 +12,7 @@ let
|
||||||
{ pkgs, ... }:
|
{ pkgs, ... }:
|
||||||
|
|
||||||
{ imports = [ ./common/user-account.nix ./common/x11.nix ];
|
{ imports = [ ./common/user-account.nix ./common/x11.nix ];
|
||||||
hardware.opengl.driSupport = true;
|
hardware.graphics.enable = true;
|
||||||
virtualisation.memorySize = 256;
|
virtualisation.memorySize = 256;
|
||||||
environment = {
|
environment = {
|
||||||
systemPackages = [ pkgs.armagetronad ];
|
systemPackages = [ pkgs.armagetronad ];
|
||||||
|
|
|
@ -14,9 +14,7 @@ in
|
||||||
};
|
};
|
||||||
|
|
||||||
nodes.machine = { config, ... }:
|
nodes.machine = { config, ... }:
|
||||||
let
|
{
|
||||||
alice = config.users.users.alice;
|
|
||||||
in {
|
|
||||||
# Automatically login on tty1 as a normal user:
|
# Automatically login on tty1 as a normal user:
|
||||||
imports = [ ./common/user-account.nix ];
|
imports = [ ./common/user-account.nix ];
|
||||||
services.getty.autologinUser = "alice";
|
services.getty.autologinUser = "alice";
|
||||||
|
@ -31,7 +29,7 @@ in
|
||||||
fi
|
fi
|
||||||
'';
|
'';
|
||||||
|
|
||||||
hardware.opengl.enable = true;
|
hardware.graphics.enable = true;
|
||||||
programs.xwayland.enable = true;
|
programs.xwayland.enable = true;
|
||||||
security.polkit.enable = true;
|
security.polkit.enable = true;
|
||||||
environment.systemPackages = [ pkgs.cagebreak pkgs.wayland-utils ];
|
environment.systemPackages = [ pkgs.cagebreak pkgs.wayland-utils ];
|
||||||
|
|
|
@ -5,7 +5,7 @@ import ./make-test-python.nix ({ pkgs, ... }: {
|
||||||
{ pkgs, ... }:
|
{ pkgs, ... }:
|
||||||
|
|
||||||
{
|
{
|
||||||
hardware.opengl.enable = true;
|
hardware.graphics.enable = true;
|
||||||
users.users.alice = {
|
users.users.alice = {
|
||||||
isNormalUser = true;
|
isNormalUser = true;
|
||||||
uid = 1000;
|
uid = 1000;
|
||||||
|
|
|
@ -5,7 +5,7 @@ let
|
||||||
{ pkgs, ... }:
|
{ pkgs, ... }:
|
||||||
|
|
||||||
{ imports = [ ./common/x11.nix ];
|
{ imports = [ ./common/x11.nix ];
|
||||||
hardware.opengl.driSupport = true;
|
hardware.graphics.enable = true;
|
||||||
environment.systemPackages = [ pkgs.openarena ];
|
environment.systemPackages = [ pkgs.openarena ];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,7 @@ let
|
||||||
{ pkgs, ... }:
|
{ pkgs, ... }:
|
||||||
|
|
||||||
{ imports = [ ./common/x11.nix ];
|
{ imports = [ ./common/x11.nix ];
|
||||||
hardware.opengl.driSupport = true;
|
hardware.graphics.enable = true;
|
||||||
environment.systemPackages = [ pkgs.quake3demo ];
|
environment.systemPackages = [ pkgs.quake3demo ];
|
||||||
nixpkgs.config.packageOverrides = overrides;
|
nixpkgs.config.packageOverrides = overrides;
|
||||||
nixpkgs.config.allowUnfreePredicate = unfreePredicate;
|
nixpkgs.config.allowUnfreePredicate = unfreePredicate;
|
||||||
|
|
|
@ -39,7 +39,7 @@ in
|
||||||
dwl -s 'foot touch /tmp/foot_started'
|
dwl -s 'foot touch /tmp/foot_started'
|
||||||
'';
|
'';
|
||||||
|
|
||||||
hardware.opengl.enable = true;
|
hardware.graphics.enable = true;
|
||||||
virtualisation.qemu.options = [ "-vga none -device virtio-gpu-pci" ];
|
virtualisation.qemu.options = [ "-vga none -device virtio-gpu-pci" ];
|
||||||
services.seatd.enable = true;
|
services.seatd.enable = true;
|
||||||
};
|
};
|
||||||
|
|
|
@ -16,7 +16,7 @@ import ./make-test-python.nix ({ pkgs, lib, ... }:
|
||||||
systemPackages = with pkgs; [ tinywl foot wayland-utils ];
|
systemPackages = with pkgs; [ tinywl foot wayland-utils ];
|
||||||
};
|
};
|
||||||
|
|
||||||
hardware.opengl.enable = true;
|
hardware.graphics.enable = true;
|
||||||
|
|
||||||
# Automatically start TinyWL when logging in on tty1:
|
# Automatically start TinyWL when logging in on tty1:
|
||||||
programs.bash.loginShellInit = ''
|
programs.bash.loginShellInit = ''
|
||||||
|
|
|
@ -280,7 +280,7 @@ in buildFHSEnv rec {
|
||||||
WARNING: Steam is not set up. Add the following options to /etc/nixos/configuration.nix
|
WARNING: Steam is not set up. Add the following options to /etc/nixos/configuration.nix
|
||||||
and then run \`sudo nixos-rebuild switch\`:
|
and then run \`sudo nixos-rebuild switch\`:
|
||||||
{
|
{
|
||||||
hardware.opengl.driSupport32Bit = true;
|
hardware.graphics.enable32Bit = true;
|
||||||
hardware.pulseaudio.support32Bit = true;
|
hardware.pulseaudio.support32Bit = true;
|
||||||
}
|
}
|
||||||
**
|
**
|
||||||
|
|
|
@ -1,222 +0,0 @@
|
||||||
{ lib
|
|
||||||
, stdenv
|
|
||||||
, fetchurl
|
|
||||||
, elfutils
|
|
||||||
, xorg
|
|
||||||
, patchelf
|
|
||||||
, libxcb
|
|
||||||
, libxshmfence
|
|
||||||
, perl
|
|
||||||
, zlib
|
|
||||||
, expat
|
|
||||||
, libffi_3_3
|
|
||||||
, libselinux
|
|
||||||
, libdrm
|
|
||||||
, udev
|
|
||||||
, kernel ? null
|
|
||||||
}:
|
|
||||||
|
|
||||||
with lib;
|
|
||||||
|
|
||||||
let
|
|
||||||
|
|
||||||
bitness = if stdenv.is64bit then "64" else "32";
|
|
||||||
|
|
||||||
libArch =
|
|
||||||
if stdenv.hostPlatform.system == "i686-linux" then
|
|
||||||
"i386-linux-gnu"
|
|
||||||
else if stdenv.hostPlatform.system == "x86_64-linux" then
|
|
||||||
"x86_64-linux-gnu"
|
|
||||||
else throw "amdgpu-pro is Linux only. Sorry ${stdenv.hostPlatform.system}.";
|
|
||||||
|
|
||||||
in stdenv.mkDerivation rec {
|
|
||||||
|
|
||||||
version = "21.30";
|
|
||||||
pname = "amdgpu-pro";
|
|
||||||
build = "${version}-1290604";
|
|
||||||
|
|
||||||
src = fetchurl {
|
|
||||||
url = "https://drivers.amd.com/drivers/linux/amdgpu-pro-${build}-ubuntu-20.04.tar.xz";
|
|
||||||
sha256 = "sha256-WECqxjo2WLP3kMWeVyJgYufkvHTzwGaj57yeMGXiQ4I=";
|
|
||||||
curlOpts = "--referer https://www.amd.com/en/support/kb/release-notes/rn-amdgpu-unified-linux-21-30";
|
|
||||||
};
|
|
||||||
|
|
||||||
postUnpack = ''
|
|
||||||
mkdir root
|
|
||||||
pushd $sourceRoot
|
|
||||||
for deb in *_all.deb *_${if stdenv.is64bit then "amd64" else "i386"}.deb
|
|
||||||
do
|
|
||||||
ar p $deb data.tar.xz | tar -C ../root -xJ
|
|
||||||
done
|
|
||||||
popd
|
|
||||||
# if we don't use a short sourceRoot, compilation can fail due to command
|
|
||||||
# line length
|
|
||||||
sourceRoot=root
|
|
||||||
'';
|
|
||||||
|
|
||||||
passthru = optionalAttrs (kernel != null) {
|
|
||||||
kmod = stdenv.mkDerivation rec {
|
|
||||||
inherit version src postUnpack;
|
|
||||||
name = "${pname}-${version}-kmod-${kernel.dev.version}";
|
|
||||||
|
|
||||||
postPatch = ''
|
|
||||||
pushd usr/src/amdgpu-*
|
|
||||||
patchShebangs amd/dkms/*.sh
|
|
||||||
substituteInPlace amd/dkms/pre-build.sh --replace "./configure" "./configure --with-linux=${kernel.dev}/lib/modules/${kernel.modDirVersion}/source --with-linux-obj=${kernel.dev}/lib/modules/${kernel.modDirVersion}/build"
|
|
||||||
popd
|
|
||||||
'';
|
|
||||||
|
|
||||||
preConfigure = ''
|
|
||||||
pushd usr/src/amdgpu-*
|
|
||||||
makeFlags="$makeFlags M=$(pwd)"
|
|
||||||
amd/dkms/pre-build.sh ${kernel.version}
|
|
||||||
popd
|
|
||||||
'';
|
|
||||||
|
|
||||||
postBuild = ''
|
|
||||||
pushd usr/src/amdgpu-*
|
|
||||||
find -name \*.ko -exec xz {} \;
|
|
||||||
popd
|
|
||||||
'';
|
|
||||||
|
|
||||||
makeFlags = optionalString (kernel != null) "-C ${kernel.dev}/lib/modules/${kernel.modDirVersion}/build modules";
|
|
||||||
|
|
||||||
installPhase = ''
|
|
||||||
runHook preInstall
|
|
||||||
|
|
||||||
pushd usr/src/amdgpu-*
|
|
||||||
find -name \*.ko.xz -exec install -Dm444 {} $out/lib/modules/${kernel.modDirVersion}/kernel/drivers/gpu/drm/{} \;
|
|
||||||
popd
|
|
||||||
|
|
||||||
runHook postInstall
|
|
||||||
'';
|
|
||||||
|
|
||||||
# without this we get a collision with the ttm module from linux
|
|
||||||
meta.priority = 4;
|
|
||||||
};
|
|
||||||
|
|
||||||
fw = stdenv.mkDerivation rec {
|
|
||||||
inherit version src postUnpack;
|
|
||||||
name = "${pname}-${version}-fw";
|
|
||||||
|
|
||||||
installPhase = ''
|
|
||||||
runHook preInstall
|
|
||||||
|
|
||||||
mkdir -p $out/lib
|
|
||||||
cp -r usr/src/amdgpu-*/firmware $out/lib/firmware
|
|
||||||
|
|
||||||
runHook postInstall
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
outputs = [ "out" "vulkan" ];
|
|
||||||
|
|
||||||
depLibPath = makeLibraryPath [
|
|
||||||
stdenv.cc.cc.lib
|
|
||||||
zlib
|
|
||||||
libxcb
|
|
||||||
libxshmfence
|
|
||||||
elfutils
|
|
||||||
expat
|
|
||||||
libffi_3_3
|
|
||||||
libselinux
|
|
||||||
# libudev is not listed in any dependencies, but is loaded dynamically
|
|
||||||
udev
|
|
||||||
xorg.libXext
|
|
||||||
xorg.libX11
|
|
||||||
xorg.libXfixes
|
|
||||||
xorg.libXdamage
|
|
||||||
xorg.libXxf86vm
|
|
||||||
];
|
|
||||||
|
|
||||||
installPhase = ''
|
|
||||||
runHook preInstall
|
|
||||||
|
|
||||||
mkdir -p $out
|
|
||||||
|
|
||||||
cp -r usr/lib/${libArch} $out/lib
|
|
||||||
cp -r usr/share $out/share
|
|
||||||
|
|
||||||
mkdir -p $out/opt/amdgpu{,-pro}
|
|
||||||
cp -r opt/amdgpu-pro/lib/${libArch} $out/opt/amdgpu-pro/lib
|
|
||||||
cp -r opt/amdgpu/lib/${libArch} $out/opt/amdgpu/lib
|
|
||||||
|
|
||||||
pushd $out/lib
|
|
||||||
ln -s ../opt/amdgpu-pro/lib/libGL.so* .
|
|
||||||
ln -s ../opt/amdgpu-pro/lib/libEGL.so* .
|
|
||||||
popd
|
|
||||||
|
|
||||||
# short name to allow replacement below
|
|
||||||
ln -s lib/dri $out/dri
|
|
||||||
|
|
||||||
'' + optionalString (stdenv.is64bit) ''
|
|
||||||
mkdir -p $out/etc
|
|
||||||
pushd etc
|
|
||||||
cp -r modprobe.d udev amd $out/etc
|
|
||||||
popd
|
|
||||||
|
|
||||||
cp -r lib/udev/rules.d/* $out/etc/udev/rules.d
|
|
||||||
cp -r opt/amdgpu/lib/xorg $out/lib/xorg
|
|
||||||
cp -r opt/amdgpu-pro/lib/xorg/* $out/lib/xorg
|
|
||||||
cp -r opt/amdgpu/share $out/opt/amdgpu/share
|
|
||||||
'' + ''
|
|
||||||
|
|
||||||
mkdir -p $vulkan/share/vulkan/icd.d
|
|
||||||
install opt/amdgpu-pro/etc/vulkan/icd.d/amd_icd${bitness}.json $vulkan/share/vulkan/icd.d
|
|
||||||
|
|
||||||
runHook postInstall
|
|
||||||
'';
|
|
||||||
|
|
||||||
preFixup = (if stdenv.is64bit
|
|
||||||
# this could also be done with LIBGL_DRIVERS_PATH, but it would need to be
|
|
||||||
# set in the user session and for Xorg
|
|
||||||
then ''
|
|
||||||
expr1='s:/opt/amdgpu/lib/x86_64-linux-gnu/dri\0:/run/opengl-driver/lib/dri\0\0\0\0\0\0\0\0\0\0\0:g'
|
|
||||||
expr2='s:/usr/lib/x86_64-linux-gnu/dri[\0\:]:/run/opengl-driver/lib/dri\0\0\0\0:g'
|
|
||||||
perl -pi -e "$expr2" $out/lib/xorg/modules/extensions/libglx.so
|
|
||||||
''
|
|
||||||
else ''
|
|
||||||
expr1='s:/opt/amdgpu/lib/i386-linux-gnu/dri\0:/run/opengl-driver-32/lib/dri\0\0\0\0\0\0:g'
|
|
||||||
# we replace a different path on 32-bit because it's the only one long
|
|
||||||
# enough to fit the target path :(
|
|
||||||
expr2='s:/usr/lib/i386-linux-gnu/dri[\0\:]:/run/opengl-driver-32/dri\0\0\0:g'
|
|
||||||
'') + ''
|
|
||||||
perl -pi -e "$expr1" \
|
|
||||||
$out/opt/amdgpu/lib/libEGL.so.1.0.0 \
|
|
||||||
$out/opt/amdgpu/lib/libgbm.so.1.0.0 \
|
|
||||||
$out/opt/amdgpu/lib/libGL.so.1.2.0
|
|
||||||
|
|
||||||
perl -pi -e "$expr2" \
|
|
||||||
$out/opt/amdgpu-pro/lib/libEGL.so.1 \
|
|
||||||
$out/opt/amdgpu-pro/lib/libGL.so.1.2 \
|
|
||||||
$out/opt/amdgpu-pro/lib/libGLX_amd.so.0
|
|
||||||
|
|
||||||
find $out -type f -exec perl -pi -e 's:/opt/amdgpu-pro/:/run/amdgpu-pro/:g' {} \;
|
|
||||||
find $out -type f -exec perl -pi -e 's:/opt/amdgpu/:/run/amdgpu/:g' {} \;
|
|
||||||
|
|
||||||
substituteInPlace $vulkan/share/vulkan/icd.d/*.json --replace /opt/amdgpu-pro/lib/${libArch} "$out/opt/amdgpu-pro/lib"
|
|
||||||
'';
|
|
||||||
|
|
||||||
# doing this in post because shrinking breaks things that dynamically load
|
|
||||||
postFixup = ''
|
|
||||||
libPath="$out/opt/amdgpu/lib:$out/opt/amdgpu-pro/lib:$depLibPath"
|
|
||||||
find "$out" -name '*.so*' -type f -exec patchelf --set-rpath "$libPath" {} \;
|
|
||||||
'';
|
|
||||||
|
|
||||||
buildInputs = [
|
|
||||||
libdrm
|
|
||||||
patchelf
|
|
||||||
perl
|
|
||||||
];
|
|
||||||
|
|
||||||
enableParallelBuilding = true;
|
|
||||||
|
|
||||||
meta = with lib; {
|
|
||||||
description = "AMDGPU-PRO drivers";
|
|
||||||
homepage = "https://www.amd.com/en/support";
|
|
||||||
license = licenses.unfree;
|
|
||||||
platforms = platforms.linux;
|
|
||||||
maintainers = with maintainers; [ corngood ];
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -318,8 +318,6 @@ in {
|
||||||
|
|
||||||
akvcam = callPackage ../os-specific/linux/akvcam { };
|
akvcam = callPackage ../os-specific/linux/akvcam { };
|
||||||
|
|
||||||
amdgpu-pro = callPackage ../os-specific/linux/amdgpu-pro { };
|
|
||||||
|
|
||||||
apfs = callPackage ../os-specific/linux/apfs { };
|
apfs = callPackage ../os-specific/linux/apfs { };
|
||||||
|
|
||||||
ax99100 = callPackage ../os-specific/linux/ax99100 {};
|
ax99100 = callPackage ../os-specific/linux/ax99100 {};
|
||||||
|
@ -605,6 +603,7 @@ in {
|
||||||
rtl8723bs = throw "rtl8723bs was added in mainline kernel version 4.12"; # Added 2023-06-14
|
rtl8723bs = throw "rtl8723bs was added in mainline kernel version 4.12"; # Added 2023-06-14
|
||||||
vm-tools = self.mm-tools;
|
vm-tools = self.mm-tools;
|
||||||
xmm7360-pci = throw "Support for the XMM7360 WWAN card was added to the iosm kmod in mainline kernel version 5.18";
|
xmm7360-pci = throw "Support for the XMM7360 WWAN card was added to the iosm kmod in mainline kernel version 5.18";
|
||||||
|
amdgpu-pro = throw "amdgpu-pro was removed due to lack of maintenance"; # Added 2024-06-16
|
||||||
});
|
});
|
||||||
|
|
||||||
hardenedPackagesFor = kernel: overrides: packagesFor (hardenedKernelFor kernel overrides);
|
hardenedPackagesFor = kernel: overrides: packagesFor (hardenedKernelFor kernel overrides);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue