1{
2 lib,
3 callPackage,
4 fetchFromGitHub,
5 fetchgit,
6 fetchpatch,
7 stdenv,
8 pkgsi686Linux,
9}:
10
11let
12 generic =
13 args:
14 let
15 imported = import ./generic.nix args;
16 in
17 callPackage imported {
18 lib32 =
19 (pkgsi686Linux.callPackage imported {
20 libsOnly = true;
21 kernel = null;
22 }).out;
23 };
24
25 kernel =
26 # a hacky way of extracting parameters from callPackage
27 callPackage (
28 {
29 kernel,
30 libsOnly ? false,
31 }:
32 if libsOnly then { } else kernel
33 ) { };
34
35 selectHighestVersion = a: b: if lib.versionOlder a.version b.version then b else a;
36
37 # https://forums.developer.nvidia.com/t/linux-6-7-3-545-29-06-550-40-07-error-modpost-gpl-incompatible-module-nvidia-ko-uses-gpl-only-symbol-rcu-read-lock/280908/19
38 rcu_patch = fetchpatch {
39 url = "https://github.com/gentoo/gentoo/raw/c64caf53/x11-drivers/nvidia-drivers/files/nvidia-drivers-470.223.02-gpl-pfn_valid.patch";
40 hash = "sha256-eZiQQp2S/asE7MfGvfe6dA/kdCvek9SYa/FFGp24dVg=";
41 };
42
43 # Fixes drm device not working with linux 6.12
44 # https://github.com/NVIDIA/open-gpu-kernel-modules/issues/712
45 drm_fop_flags_linux_612_patch = fetchpatch {
46 url = "https://github.com/Binary-Eater/open-gpu-kernel-modules/commit/8ac26d3c66ea88b0f80504bdd1e907658b41609d.patch";
47 hash = "sha256-+SfIu3uYNQCf/KXhv4PWvruTVKQSh4bgU1moePhe57U=";
48 };
49
50 # Source corresponding to https://aur.archlinux.org/packages/nvidia-390xx-dkms
51 aurPatches = fetchgit {
52 url = "https://aur.archlinux.org/nvidia-390xx-utils.git";
53 rev = "94dffc01e23a93c354a765ea7ac64484a3ef96c1";
54 hash = "sha256-c94qXNZyMrSf7Dik7jvz2ECaGELqN7WEYNpnbUkzeeU=";
55 };
56
57 # https://github.com/NVIDIA/open-gpu-kernel-modules/issues/840
58 gpl_symbols_linux_615_patch = fetchpatch {
59 url = "https://github.com/CachyOS/kernel-patches/raw/914aea4298e3744beddad09f3d2773d71839b182/6.15/misc/nvidia/0003-Workaround-nv_vm_flags_-calling-GPL-only-code.patch";
60 hash = "sha256-YOTAvONchPPSVDP9eJ9236pAPtxYK5nAePNtm2dlvb4=";
61 stripLen = 1;
62 extraPrefix = "kernel/";
63 };
64in
65rec {
66 mkDriver = generic;
67
68 # Official Unix Drivers - https://www.nvidia.com/en-us/drivers/unix/
69 # Branch/Maturity data - http://people.freedesktop.org/~aplattner/nvidia-versions.txt
70
71 # Policy: use the highest stable version as the default (on our master).
72 stable = if stdenv.hostPlatform.system == "i686-linux" then legacy_390 else production;
73
74 production = generic {
75 version = "570.172.08";
76 sha256_64bit = "sha256-AlaGfggsr5PXsl+nyOabMWBiqcbHLG4ij617I4xvoX0=";
77 sha256_aarch64 = "sha256-FVRyFvK1FKznckpatMMydmmQSkHK+41NkEjTybYJY9g=";
78 openSha256 = "sha256-aTV5J4zmEgRCOavo6wLwh5efOZUG+YtoeIT/tnrC1Hg=";
79 settingsSha256 = "sha256-N/1Ra8Teq93U3T898ImAT2DceHjDHZL1DuriJeTYEa4=";
80 persistencedSha256 = "sha256-x4K0Gp89LdL5YJhAI0AydMRxl6fyBylEnj+nokoBrK8=";
81 };
82
83 latest = selectHighestVersion production (generic {
84 version = "575.64.05";
85 sha256_64bit = "sha256-hfK1D5EiYcGRegss9+H5dDr/0Aj9wPIJ9NVWP3dNUC0=";
86 sha256_aarch64 = "sha256-GRE9VEEosbY7TL4HPFoyo0Ac5jgBHsZg9sBKJ4BLhsA=";
87 openSha256 = "sha256-mcbMVEyRxNyRrohgwWNylu45vIqF+flKHnmt47R//KU=";
88 settingsSha256 = "sha256-o2zUnYFUQjHOcCrB0w/4L6xI1hVUXLAWgG2Y26BowBE=";
89 persistencedSha256 = "sha256-2g5z7Pu8u2EiAh5givP5Q1Y4zk4Cbb06W37rf768NFU=";
90 });
91
92 beta = selectHighestVersion latest (generic {
93 version = "575.51.02";
94 sha256_64bit = "sha256-XZ0N8ISmoAC8p28DrGHk/YN1rJsInJ2dZNL8O+Tuaa0=";
95 sha256_aarch64 = "sha256-NNeQU9sPfH1sq3d5RUq1MWT6+7mTo1SpVfzabYSVMVI=";
96 openSha256 = "sha256-NQg+QDm9Gt+5bapbUO96UFsPnz1hG1dtEwT/g/vKHkw=";
97 settingsSha256 = "sha256-6n9mVkEL39wJj5FB1HBml7TTJhNAhS/j5hqpNGFQE4w=";
98 persistencedSha256 = "sha256-dgmco+clEIY8bedxHC4wp+fH5JavTzyI1BI8BxoeJJI=";
99 });
100
101 # Vulkan developer beta driver
102 # See here for more information: https://developer.nvidia.com/vulkan-driver
103 vulkan_beta = generic rec {
104 version = "570.123.19";
105 persistencedVersion = "570.169";
106 settingsVersion = "570.169";
107 sha256_64bit = "sha256-K1ElpoTBjlLUG7slBrAhKqnEjUFwupiF7TS/8ogCf7c=";
108 openSha256 = "sha256-uGH2lnnADf5AGl5ShcbCOULsCIWtJlbxgHiz7I2efVE=";
109 settingsSha256 = "sha256-0E3UnpMukGMWcX8td6dqmpakaVbj4OhhKXgmqz77XZc=";
110 persistencedSha256 = "sha256-dttFu+TmbFI+mt1MbbmJcUnc1KIJ20eHZDR7YzfWmgE=";
111 url = "https://developer.nvidia.com/downloads/vulkan-beta-${lib.concatStrings (lib.splitVersion version)}-linux";
112
113 broken = kernel.kernelAtLeast "6.15";
114 };
115
116 # data center driver compatible with current default cudaPackages
117 dc = dc_570;
118
119 dc_535 = generic rec {
120 version = "535.154.05";
121 url = "https://us.download.nvidia.com/tesla/${version}/NVIDIA-Linux-x86_64-${version}.run";
122 sha256_64bit = "sha256-fpUGXKprgt6SYRDxSCemGXLrEsIA6GOinp+0eGbqqJg=";
123 persistencedSha256 = "sha256-d0Q3Lk80JqkS1B54Mahu2yY/WocOqFFbZVBh+ToGhaE=";
124 fabricmanagerSha256 = "sha256-/HQfV7YA3MYVmre/sz897PF6tc6MaMiS/h7Q10m2p/o=";
125 useSettings = false;
126 usePersistenced = true;
127 useFabricmanager = true;
128
129 patches = [ rcu_patch ];
130 };
131
132 # Drop after next nixos release
133 dc_565 = generic rec {
134 version = "565.57.01";
135 url = "https://us.download.nvidia.com/tesla/${version}/NVIDIA-Linux-x86_64-${version}.run";
136 sha256_64bit = "sha256-buvpTlheOF6IBPWnQVLfQUiHv4GcwhvZW3Ks0PsYLHo=";
137 persistencedSha256 = "sha256-hdszsACWNqkCh8G4VBNitDT85gk9gJe1BlQ8LdrYIkg=";
138 fabricmanagerSha256 = "sha256-umhyehddbQ9+xhhoiKC7SOSVxscA5pcnqvkQOOLIdsM=";
139 useSettings = false;
140 usePersistenced = true;
141 useFabricmanager = true;
142 };
143
144 dc_570 = generic rec {
145 version = "570.172.08";
146 url = "https://us.download.nvidia.com/tesla/${version}/NVIDIA-Linux-x86_64-${version}.run";
147 sha256_64bit = "sha256-AlaGfggsr5PXsl+nyOabMWBiqcbHLG4ij617I4xvoX0=";
148 persistencedSha256 = "sha256-x4K0Gp89LdL5YJhAI0AydMRxl6fyBylEnj+nokoBrK8=";
149 fabricmanagerSha256 = "sha256-jSTKzeRVTUcYma1Cb0ajSdXKCi6KzUXCp2OByPSWSR4=";
150 useSettings = false;
151 usePersistenced = true;
152 useFabricmanager = true;
153 };
154
155 # Update note:
156 # If you add a legacy driver here, also update `top-level/linux-kernels.nix`,
157 # adding to the `nvidia_x11_legacy*` entries.
158
159 # Last one without the bug reported here:
160 # https://bbs.archlinux.org/viewtopic.php?pid=2155426#p2155426
161 legacy_535 = generic {
162 version = "535.216.01";
163 sha256_64bit = "sha256-Xd6hFHgQAS4zlnwxgTQbzWYkvT1lTGP4Rd+DO07Oavc=";
164 sha256_aarch64 = "sha256-SGmuA0W1iSsqUK7VZsgibT4HgT0RkKpGb+ul6eIbM7k=";
165 openSha256 = "sha256-ey96oMbY32ahcHSOj1+MykvJrep6mhHPVl+V8+B2ZDk=";
166 settingsSha256 = "sha256-9PgaYJbP1s7hmKCYmkuLQ58nkTruhFdHAs4W84KQVME=";
167 persistencedSha256 = "sha256-ckF/BgDA6xSFqFk07rn3HqXuR0iGfwA4PRxpP38QZgw=";
168 };
169
170 # Last one supporting Kepler architecture
171 legacy_470 = generic {
172 version = "470.256.02";
173 sha256_64bit = "sha256-1kUYYt62lbsER/O3zWJo9z6BFowQ4sEFl/8/oBNJsd4=";
174 sha256_aarch64 = "sha256-e+QvE+S3Fv3JRqC9ZyxTSiCu8gJdZXSz10gF/EN6DY0=";
175 settingsSha256 = "sha256-kftQ4JB0iSlE8r/Ze/+UMnwLzn0nfQtqYXBj+t6Aguk=";
176 persistencedSha256 = "sha256-iYoSib9VEdwjOPBP1+Hx5wCIMhW8q8cCHu9PULWfnyQ=";
177
178 patches = [
179 "${aurPatches}/gcc-14.patch"
180 # fixes 6.10 follow_pfn
181 ./follow_pfn.patch
182 # https://gist.github.com/joanbm/a6d3f7f873a60dec0aa4a734c0f1d64e
183 (fetchpatch {
184 url = "https://gist.github.com/joanbm/a6d3f7f873a60dec0aa4a734c0f1d64e/raw/6bae5606c033b6c6c08233523091992370e357b7/nvidia-470xx-fix-linux-6.12.patch";
185 hash = "sha256-6nbzcRTRCxW8GDAhB8Zwx9rVcCzwPtVYlqoUhL9gxlY=";
186 stripLen = 1;
187 extraPrefix = "kernel/";
188 })
189 ];
190 };
191
192 # Last one supporting x86
193 legacy_390 = generic {
194 version = "390.157";
195 sha256_32bit = "sha256-VdZeCkU5qct5YgDF8Qgv4mP7CVHeqvlqnP/rioD3B5k=";
196 sha256_64bit = "sha256-W+u8puj+1da52BBw+541HxjtxTSVJVPL3HHo/QubMoo=";
197 settingsSha256 = "sha256-uJZO4ak/w/yeTQ9QdXJSiaURDLkevlI81de0q4PpFpw=";
198 persistencedSha256 = "sha256-NuqUQbVt80gYTXgIcu0crAORfsj9BCRooyH3Gp1y1ns=";
199
200 patches = map (patch: "${aurPatches}/${patch}") [
201 "kernel-4.16+-memory-encryption.patch"
202 "kernel-6.2.patch"
203 "kernel-6.3.patch"
204 "kernel-6.4.patch"
205 "kernel-6.5.patch"
206 "kernel-6.6.patch"
207 "kernel-6.8.patch"
208 "gcc-14.patch"
209 "kernel-6.10.patch"
210 "kernel-6.12.patch"
211 ];
212 broken = kernel.kernelAtLeast "6.13";
213
214 # fixes the bug described in https://bbs.archlinux.org/viewtopic.php?pid=2083439#p2083439
215 # see https://bbs.archlinux.org/viewtopic.php?pid=2083651#p2083651
216 # and https://bbs.archlinux.org/viewtopic.php?pid=2083699#p2083699
217 postInstall = ''
218 mv $out/lib/tls/* $out/lib
219 rmdir $out/lib/tls
220 '';
221 };
222
223 legacy_340 =
224 let
225 # Source corresponding to https://aur.archlinux.org/packages/nvidia-340xx-dkms
226 aurPatches = fetchFromGitHub {
227 owner = "archlinux-jerry";
228 repo = "nvidia-340xx";
229 rev = "7616dfed253aa93ca7d2e05caf6f7f332c439c90";
230 hash = "sha256-1qlYc17aEbLD4W8XXn1qKryBk2ltT6cVIv5zAs0jXZo=";
231 };
232 patchset = [
233 "0001-kernel-5.7.patch"
234 "0002-kernel-5.8.patch"
235 "0003-kernel-5.9.patch"
236 "0004-kernel-5.10.patch"
237 "0005-kernel-5.11.patch"
238 "0006-kernel-5.14.patch"
239 "0007-kernel-5.15.patch"
240 "0008-kernel-5.16.patch"
241 "0009-kernel-5.17.patch"
242 "0010-kernel-5.18.patch"
243 "0011-kernel-6.0.patch"
244 "0012-kernel-6.2.patch"
245 "0013-kernel-6.3.patch"
246 "0014-kernel-6.5.patch"
247 "0015-kernel-6.6.patch"
248 ];
249 in
250 generic {
251 version = "340.108";
252 sha256_32bit = "1jkwa1phf0x4sgw8pvr9d6krmmr3wkgwyygrxhdazwyr2bbalci0";
253 sha256_64bit = "06xp6c0sa7v1b82gf0pq0i5p0vdhmm3v964v0ypw36y0nzqx8wf6";
254 settingsSha256 = "0zm29jcf0mp1nykcravnzb5isypm8l8mg2gpsvwxipb7nk1ivy34";
255 persistencedSha256 = "1ax4xn3nmxg1y6immq933cqzw6cj04x93saiasdc0kjlv0pvvnkn";
256 useGLVND = false;
257
258 broken = kernel.kernelAtLeast "6.7";
259 patches = map (patch: "${aurPatches}/${patch}") patchset;
260
261 # fixes the bug described in https://bbs.archlinux.org/viewtopic.php?pid=2083439#p2083439
262 # see https://bbs.archlinux.org/viewtopic.php?pid=2083651#p2083651
263 # and https://bbs.archlinux.org/viewtopic.php?pid=2083699#p2083699
264 postInstall = ''
265 mv $out/lib/tls/* $out/lib
266 rmdir $out/lib/tls
267 '';
268 };
269}