1# This module provides the proprietary AMDGPU-PRO drivers.
2
3{ config, lib, pkgs, ... }:
4
5with lib;
6
7let
8
9 drivers = config.services.xserver.videoDrivers;
10
11 enabled = elem "amdgpu-pro" drivers;
12
13 package = config.boot.kernelPackages.amdgpu-pro;
14 package32 = pkgs.pkgsi686Linux.linuxPackages.amdgpu-pro.override { libsOnly = true; kernel = null; };
15
16 opengl = config.hardware.opengl;
17
18 kernel = pkgs.linux_4_9.override {
19 extraConfig = ''
20 KALLSYMS_ALL y
21 '';
22 };
23
24in
25
26{
27
28 config = mkIf enabled {
29
30 nixpkgs.config.xorg.abiCompat = "1.19";
31
32 services.xserver.drivers = singleton
33 { name = "amdgpu"; modules = [ package ]; display = true; };
34
35 hardware.opengl.package = package;
36 hardware.opengl.package32 = package32;
37 hardware.opengl.setLdLibraryPath = true;
38
39 boot.extraModulePackages = [ package ];
40
41 boot.kernelPackages =
42 pkgs.recurseIntoAttrs (pkgs.linuxPackagesFor kernel);
43
44 boot.blacklistedKernelModules = [ "radeon" ];
45
46 hardware.firmware = [ package ];
47
48 system.activationScripts.setup-amdgpu-pro = ''
49 mkdir -p /run/lib
50 ln -sfn ${package}/lib ${package.libCompatDir}
51 ln -sfn ${package} /run/amdgpu-pro
52 '' + optionalString opengl.driSupport32Bit ''
53 ln -sfn ${package32}/lib ${package32.libCompatDir}
54 '';
55
56 system.requiredKernelConfig = with config.lib.kernelConfig; [
57 (isYes "KALLSYMS_ALL")
58 ];
59
60 environment.etc = {
61 "amd/amdrc".source = package + "/etc/amd/amdrc";
62 "amd/amdapfxx.blb".source = package + "/etc/amd/amdapfxx.blb";
63 "gbm/gbm.conf".source = package + "/etc/gbm/gbm.conf";
64 };
65
66 };
67
68}