1{
2 pkgs,
3 linuxKernel,
4 config,
5 buildPackages,
6 callPackage,
7 makeOverridable,
8 recurseIntoAttrs,
9 dontRecurseIntoAttrs,
10 stdenv,
11 stdenvNoCC,
12 newScope,
13 lib,
14 fetchurl,
15 gcc10Stdenv,
16}:
17
18# When adding a kernel:
19# - Update packageAliases.linux_latest to the latest version
20# - Update the rev in ../os-specific/linux/kernel/linux-libre.nix to the latest one.
21# - Update linux_latest_hardened when the patches become available
22
23with linuxKernel;
24
25let
26 deblobKernel =
27 kernel:
28 callPackage ../os-specific/linux/kernel/linux-libre.nix {
29 linux = kernel;
30 };
31
32 markBroken =
33 drv:
34 drv.overrideAttrs (
35 {
36 meta ? { },
37 ...
38 }:
39 {
40 meta = meta // {
41 broken = true;
42 };
43 }
44 );
45
46 # Hardened Linux
47 hardenedKernelFor =
48 kernel': overrides:
49 let
50 kernel = kernel'.override overrides;
51 version = kernelPatches.hardened.${kernel.meta.branch}.version;
52 major = lib.versions.major version;
53 sha256 = kernelPatches.hardened.${kernel.meta.branch}.sha256;
54 modDirVersion' = builtins.replaceStrings [ kernel.version ] [ version ] kernel.modDirVersion;
55 in
56 kernel.override {
57 structuredExtraConfig = import ../os-specific/linux/kernel/hardened/config.nix {
58 inherit stdenv lib version;
59 };
60 argsOverride = {
61 inherit version;
62 pname = "linux-hardened";
63 modDirVersion = modDirVersion' + kernelPatches.hardened.${kernel.meta.branch}.extra;
64 src = fetchurl {
65 url = "mirror://kernel/linux/kernel/v${major}.x/linux-${version}.tar.xz";
66 inherit sha256;
67 };
68 extraMeta = {
69 broken = kernel.meta.broken;
70 };
71 };
72 kernelPatches = kernel.kernelPatches ++ [
73 kernelPatches.hardened.${kernel.meta.branch}
74 ];
75 isHardened = true;
76 };
77in
78{
79 kernelPatches = callPackage ../os-specific/linux/kernel/patches.nix { };
80
81 kernels = recurseIntoAttrs (
82 lib.makeExtensible (
83 self:
84 with self;
85 let
86 callPackage = newScope self;
87 in
88 {
89
90 # NOTE: PLEASE DO NOT ADD NEW DOWNSTREAM KERNELS TO NIXPKGS.
91 # New vendor kernels should go to nixos-hardware instead.
92 # e.g. https://github.com/NixOS/nixos-hardware/tree/master/microsoft/surface/kernel
93
94 linux_rpi1 = callPackage ../os-specific/linux/kernel/linux-rpi.nix {
95 kernelPatches = with kernelPatches; [
96 bridge_stp_helper
97 request_key_helper
98 ];
99 rpiVersion = 1;
100 };
101
102 linux_rpi2 = callPackage ../os-specific/linux/kernel/linux-rpi.nix {
103 kernelPatches = with kernelPatches; [
104 bridge_stp_helper
105 request_key_helper
106 ];
107 rpiVersion = 2;
108 };
109
110 linux_rpi3 = callPackage ../os-specific/linux/kernel/linux-rpi.nix {
111 kernelPatches = with kernelPatches; [
112 bridge_stp_helper
113 request_key_helper
114 ];
115 rpiVersion = 3;
116 };
117
118 linux_rpi4 = callPackage ../os-specific/linux/kernel/linux-rpi.nix {
119 kernelPatches = with kernelPatches; [
120 bridge_stp_helper
121 request_key_helper
122 ];
123 rpiVersion = 4;
124 };
125
126 linux_5_4 = callPackage ../os-specific/linux/kernel/mainline.nix {
127 branch = "5.4";
128 kernelPatches = [
129 kernelPatches.bridge_stp_helper
130 kernelPatches.request_key_helper
131 kernelPatches.rtl8761b_support
132 ];
133 };
134
135 linux_rt_5_4 = callPackage ../os-specific/linux/kernel/linux-rt-5.4.nix {
136 kernelPatches = [
137 kernelPatches.bridge_stp_helper
138 kernelPatches.request_key_helper
139 ];
140 };
141
142 linux_5_10 = callPackage ../os-specific/linux/kernel/mainline.nix {
143 branch = "5.10";
144 kernelPatches = [
145 kernelPatches.bridge_stp_helper
146 kernelPatches.request_key_helper
147 ];
148 };
149
150 linux_rt_5_10 = callPackage ../os-specific/linux/kernel/linux-rt-5.10.nix {
151 kernelPatches = [
152 kernelPatches.bridge_stp_helper
153 kernelPatches.request_key_helper
154 kernelPatches.export-rt-sched-migrate
155 ];
156 };
157
158 linux_5_15 = callPackage ../os-specific/linux/kernel/mainline.nix {
159 branch = "5.15";
160 kernelPatches = [
161 kernelPatches.bridge_stp_helper
162 kernelPatches.request_key_helper
163 ];
164 };
165
166 linux_rt_5_15 = callPackage ../os-specific/linux/kernel/linux-rt-5.15.nix {
167 kernelPatches = [
168 kernelPatches.bridge_stp_helper
169 kernelPatches.request_key_helper
170 kernelPatches.export-rt-sched-migrate
171 ];
172 };
173
174 linux_6_1 = callPackage ../os-specific/linux/kernel/mainline.nix {
175 branch = "6.1";
176 kernelPatches = [
177 kernelPatches.bridge_stp_helper
178 kernelPatches.request_key_helper
179 ];
180 };
181
182 linux_ham = callPackage ../os-specific/linux/kernel/mainline.nix {
183 branch = "6.13";
184 kernelPatches = [
185 kernelPatches.bridge_stp_helper
186 kernelPatches.request_key_helper
187 {
188 name = "ax25-ham";
189 patch = null;
190 extraStructuredConfig = {
191 HAMRADIO = lib.kernel.yes;
192 AX25 = lib.kernel.module;
193 };
194 }
195 ];
196 };
197
198 linux_rt_6_1 = callPackage ../os-specific/linux/kernel/linux-rt-6.1.nix {
199 kernelPatches = [
200 kernelPatches.bridge_stp_helper
201 kernelPatches.request_key_helper
202 kernelPatches.export-rt-sched-migrate
203 ];
204 };
205
206 linux_6_6 = callPackage ../os-specific/linux/kernel/mainline.nix {
207 branch = "6.6";
208 kernelPatches = [
209 kernelPatches.bridge_stp_helper
210 kernelPatches.request_key_helper
211 ];
212 };
213
214 linux_rt_6_6 = callPackage ../os-specific/linux/kernel/linux-rt-6.6.nix {
215 kernelPatches = [
216 kernelPatches.bridge_stp_helper
217 kernelPatches.request_key_helper
218 kernelPatches.export-rt-sched-migrate
219 ];
220 };
221
222 linux_6_12 = callPackage ../os-specific/linux/kernel/mainline.nix {
223 branch = "6.12";
224 kernelPatches = [
225 kernelPatches.bridge_stp_helper
226 kernelPatches.request_key_helper
227 ];
228 };
229
230 linux_6_13 = callPackage ../os-specific/linux/kernel/mainline.nix {
231 branch = "6.13";
232 kernelPatches = [
233 kernelPatches.bridge_stp_helper
234 kernelPatches.request_key_helper
235 ];
236 };
237
238 linux_6_14 = callPackage ../os-specific/linux/kernel/mainline.nix {
239 branch = "6.14";
240 kernelPatches = [
241 kernelPatches.bridge_stp_helper
242 kernelPatches.request_key_helper
243 ];
244 };
245
246 linux_6_15 = callPackage ../os-specific/linux/kernel/mainline.nix {
247 branch = "6.15";
248 kernelPatches = [
249 kernelPatches.bridge_stp_helper
250 kernelPatches.request_key_helper
251 ];
252 };
253
254 linux_testing =
255 let
256 testing = callPackage ../os-specific/linux/kernel/mainline.nix {
257 # A special branch that tracks the kernel under the release process
258 # i.e. which has at least a public rc1 and is not released yet.
259 branch = "testing";
260 kernelPatches = [
261 kernelPatches.bridge_stp_helper
262 kernelPatches.request_key_helper
263 ];
264 };
265 latest = packageAliases.linux_latest.kernel;
266 in
267 if latest.kernelAtLeast testing.baseVersion then latest else testing;
268
269 linux_default = packageAliases.linux_default.kernel;
270
271 linux_latest = packageAliases.linux_latest.kernel;
272
273 # Using zenKernels like this due lqx&zen came from one source, but may have different base kernel version
274 # https://github.com/NixOS/nixpkgs/pull/161773#discussion_r820134708
275 zenKernels = callPackage ../os-specific/linux/kernel/zen-kernels.nix;
276
277 linux_zen = zenKernels {
278 variant = "zen";
279 kernelPatches = [
280 kernelPatches.bridge_stp_helper
281 kernelPatches.request_key_helper
282 ];
283 };
284
285 linux_lqx = zenKernels {
286 variant = "lqx";
287 kernelPatches = [
288 kernelPatches.bridge_stp_helper
289 kernelPatches.request_key_helper
290 ];
291 };
292
293 # This contains the variants of the XanMod kernel
294 xanmodKernels = callPackage ../os-specific/linux/kernel/xanmod-kernels.nix;
295
296 linux_xanmod = xanmodKernels {
297 variant = "lts";
298 kernelPatches = [
299 kernelPatches.bridge_stp_helper
300 kernelPatches.request_key_helper
301 ];
302 };
303 linux_xanmod_stable = xanmodKernels {
304 variant = "main";
305 kernelPatches = [
306 kernelPatches.bridge_stp_helper
307 kernelPatches.request_key_helper
308 ];
309 };
310 linux_xanmod_latest = xanmodKernels {
311 variant = "main";
312 kernelPatches = [
313 kernelPatches.bridge_stp_helper
314 kernelPatches.request_key_helper
315 ];
316 };
317
318 linux_libre = deblobKernel packageAliases.linux_default.kernel;
319
320 linux_latest_libre = deblobKernel packageAliases.linux_latest.kernel;
321
322 linux_hardened = hardenedKernelFor packageAliases.linux_default.kernel { };
323
324 linux_5_4_hardened = markBroken (
325 hardenedKernelFor kernels.linux_5_4 {
326 stdenv = gcc10Stdenv;
327 buildPackages = buildPackages // {
328 stdenv = buildPackages.gcc10Stdenv;
329 };
330 }
331 );
332 linux_5_10_hardened = hardenedKernelFor kernels.linux_5_10 { };
333 linux_5_15_hardened = hardenedKernelFor kernels.linux_5_15 { };
334 linux_6_1_hardened = hardenedKernelFor kernels.linux_6_1 { };
335 linux_6_6_hardened = hardenedKernelFor kernels.linux_6_6 { };
336 linux_6_12_hardened = hardenedKernelFor kernels.linux_6_12 { };
337 linux_6_13_hardened = hardenedKernelFor kernels.linux_6_13 { };
338 linux_6_14_hardened = hardenedKernelFor kernels.linux_6_14 { };
339
340 }
341 // lib.optionalAttrs config.allowAliases {
342 linux_4_19 = throw "linux 4.19 was removed because it will reach its end of life within 24.11";
343 linux_6_9 = throw "linux 6.9 was removed because it has reached its end of life upstream";
344 linux_6_10 = throw "linux 6.10 was removed because it has reached its end of life upstream";
345 linux_6_11 = throw "linux 6.11 was removed because it has reached its end of life upstream";
346
347 linux_4_19_hardened = throw "linux 4.19 was removed because it will reach its end of life within 24.11";
348 linux_6_9_hardened = throw "linux 6.9 was removed because it has reached its end of life upstream";
349 linux_6_10_hardened = throw "linux 6.10 was removed because it has reached its end of life upstream";
350 linux_6_11_hardened = throw "linux 6.11 was removed because it has reached its end of life upstream";
351 }
352 )
353 );
354 /*
355 Linux kernel modules are inherently tied to a specific kernel. So
356 rather than provide specific instances of those packages for a
357 specific kernel, we have a function that builds those packages
358 for a specific kernel. This function can then be called for
359 whatever kernel you're using.
360 */
361
362 packagesFor =
363 kernel_:
364 lib.makeExtensible (
365 self:
366 with self;
367 let
368 callPackage = newScope self;
369 in
370 {
371 inherit callPackage;
372 kernel = kernel_;
373 inherit (kernel) stdenv; # in particular, use the same compiler by default
374
375 # to help determine module compatibility
376 inherit (kernel) isZen isHardened isLibre;
377 inherit (kernel) kernelOlder kernelAtLeast;
378 kernelModuleMakeFlags = self.kernel.commonMakeFlags ++ [
379 "KBUILD_OUTPUT=${kernel.dev}/lib/modules/${kernel.modDirVersion}/build"
380 ];
381 # Obsolete aliases (these packages do not depend on the kernel).
382 inherit (pkgs) odp-dpdk pktgen; # added 2018-05
383 inherit (pkgs) bcc bpftrace; # added 2021-12
384 inherit (pkgs) oci-seccomp-bpf-hook; # added 2022-11
385 inherit (pkgs) dpdk; # added 2024-03
386
387 acpi_call = callPackage ../os-specific/linux/acpi-call { };
388
389 ajantv2 = callPackage ../os-specific/linux/ajantv2 { };
390
391 akvcam = callPackage ../os-specific/linux/akvcam { };
392
393 amdgpu-i2c = callPackage ../os-specific/linux/amdgpu-i2c { };
394
395 amneziawg = callPackage ../os-specific/linux/amneziawg { };
396
397 apfs = callPackage ../os-specific/linux/apfs { };
398
399 ax99100 = callPackage ../os-specific/linux/ax99100 { };
400
401 batman_adv = callPackage ../os-specific/linux/batman-adv { };
402
403 bbswitch = callPackage ../os-specific/linux/bbswitch { };
404
405 ch9344 = callPackage ../os-specific/linux/ch9344 { };
406
407 chipsec = callPackage ../tools/security/chipsec {
408 inherit kernel;
409 withDriver = true;
410 };
411
412 cryptodev = callPackage ../os-specific/linux/cryptodev { };
413
414 cpupower = callPackage ../os-specific/linux/cpupower { };
415
416 deepin-anything-module = callPackage ../os-specific/linux/deepin-anything-module { };
417
418 ddcci-driver = callPackage ../os-specific/linux/ddcci { };
419
420 dddvb = callPackage ../os-specific/linux/dddvb { };
421
422 decklink = callPackage ../os-specific/linux/decklink { };
423
424 digimend = callPackage ../os-specific/linux/digimend { };
425
426 dpdk-kmods = callPackage ../os-specific/linux/dpdk-kmods { };
427
428 exfat-nofuse =
429 if lib.versionOlder kernel.version "5.8" then callPackage ../os-specific/linux/exfat { } else null;
430
431 evdi = callPackage ../os-specific/linux/evdi { };
432
433 fanout = callPackage ../os-specific/linux/fanout { };
434
435 framework-laptop-kmod = callPackage ../os-specific/linux/framework-laptop-kmod { };
436
437 fwts-efi-runtime = callPackage ../os-specific/linux/fwts/module.nix { };
438
439 gasket = callPackage ../os-specific/linux/gasket { };
440
441 gcadapter-oc-kmod = callPackage ../os-specific/linux/gcadapter-oc-kmod { };
442
443 hyperv-daemons = callPackage ../os-specific/linux/hyperv-daemons { };
444
445 e1000e =
446 if lib.versionOlder kernel.version "4.10" then
447 callPackage ../os-specific/linux/e1000e { }
448 else
449 null;
450
451 iio-utils =
452 if lib.versionAtLeast kernel.version "4.1" then
453 callPackage ../os-specific/linux/iio-utils { }
454 else
455 null;
456
457 intel-speed-select =
458 if lib.versionAtLeast kernel.version "5.3" then
459 callPackage ../os-specific/linux/intel-speed-select { }
460 else
461 null;
462
463 ipu6-drivers = callPackage ../os-specific/linux/ipu6-drivers { };
464
465 ivsc-driver = callPackage ../os-specific/linux/ivsc-driver { };
466
467 ixgbevf = callPackage ../os-specific/linux/ixgbevf { };
468
469 it87 = callPackage ../os-specific/linux/it87 { };
470
471 asus-ec-sensors = callPackage ../os-specific/linux/asus-ec-sensors { };
472
473 ena = callPackage ../os-specific/linux/ena { };
474
475 lenovo-legion-module = callPackage ../os-specific/linux/lenovo-legion { };
476
477 linux-gpib = callPackage ../applications/science/electronics/linux-gpib/kernel.nix { };
478
479 liquidtux = callPackage ../os-specific/linux/liquidtux { };
480
481 lkrg = callPackage ../os-specific/linux/lkrg { };
482
483 v4l2loopback = callPackage ../os-specific/linux/v4l2loopback { };
484
485 lttng-modules = callPackage ../os-specific/linux/lttng-modules { };
486
487 mstflint_access = callPackage ../os-specific/linux/mstflint_access { };
488
489 broadcom_sta = callPackage ../os-specific/linux/broadcom-sta { };
490
491 tbs = callPackage ../os-specific/linux/tbs { };
492
493 mbp2018-bridge-drv = callPackage ../os-specific/linux/mbp-modules/mbp2018-bridge-drv { };
494
495 nct6687d = callPackage ../os-specific/linux/nct6687d { };
496
497 new-lg4ff = callPackage ../os-specific/linux/new-lg4ff { };
498
499 zenergy = callPackage ../os-specific/linux/zenergy { };
500
501 nvidiabl = callPackage ../os-specific/linux/nvidiabl { };
502
503 nvidiaPackages = dontRecurseIntoAttrs (
504 lib.makeExtensible (_: callPackage ../os-specific/linux/nvidia-x11 { })
505 );
506
507 nvidia_x11 = nvidiaPackages.stable;
508 nvidia_x11_beta = nvidiaPackages.beta;
509 nvidia_x11_latest = nvidiaPackages.latest;
510 nvidia_x11_legacy340 = nvidiaPackages.legacy_340;
511 nvidia_x11_legacy390 = nvidiaPackages.legacy_390;
512 nvidia_x11_legacy470 = nvidiaPackages.legacy_470;
513 nvidia_x11_legacy535 = nvidiaPackages.legacy_535;
514 nvidia_x11_production = nvidiaPackages.production;
515 nvidia_x11_vulkan_beta = nvidiaPackages.vulkan_beta;
516 nvidia_dc = nvidiaPackages.dc;
517 nvidia_dc_535 = nvidiaPackages.dc_535;
518 nvidia_dc_565 = nvidiaPackages.dc_565;
519
520 # this is not a replacement for nvidia_x11*
521 # only the opensource kernel driver exposed for hydra to build
522 nvidia_x11_beta_open = nvidiaPackages.beta.open;
523 nvidia_x11_latest_open = nvidiaPackages.latest.open;
524 nvidia_x11_production_open = nvidiaPackages.production.open;
525 nvidia_x11_stable_open = nvidiaPackages.stable.open;
526 nvidia_x11_vulkan_beta_open = nvidiaPackages.vulkan_beta.open;
527
528 nxp-pn5xx = callPackage ../os-specific/linux/nxp-pn5xx { };
529
530 openrazer = callPackage ../os-specific/linux/openrazer/driver.nix { };
531
532 ply = callPackage ../os-specific/linux/ply { };
533
534 r8125 = callPackage ../os-specific/linux/r8125 { };
535
536 r8168 = callPackage ../os-specific/linux/r8168 { };
537
538 rtl8188eus-aircrack = callPackage ../os-specific/linux/rtl8188eus-aircrack { };
539
540 rtl8192eu = callPackage ../os-specific/linux/rtl8192eu { };
541
542 rtl8189es = callPackage ../os-specific/linux/rtl8189es { };
543
544 rtl8189fs = callPackage ../os-specific/linux/rtl8189fs { };
545
546 rtl8723ds = callPackage ../os-specific/linux/rtl8723ds { };
547
548 rtl8812au = callPackage ../os-specific/linux/rtl8812au { };
549
550 rtl8814au = callPackage ../os-specific/linux/rtl8814au { };
551
552 rtl8852au = callPackage ../os-specific/linux/rtl8852au { };
553
554 rtl8852bu = callPackage ../os-specific/linux/rtl8852bu { };
555
556 rtl88xxau-aircrack = callPackage ../os-specific/linux/rtl88xxau-aircrack { };
557
558 rtl8821au = callPackage ../os-specific/linux/rtl8821au { };
559
560 rtl8821ce = callPackage ../os-specific/linux/rtl8821ce { };
561
562 rtl88x2bu = callPackage ../os-specific/linux/rtl88x2bu { };
563
564 rtl8821cu = callPackage ../os-specific/linux/rtl8821cu { };
565
566 rtw88 = callPackage ../os-specific/linux/rtw88 { };
567
568 rtw89 =
569 if lib.versionOlder kernel.version "5.16" then callPackage ../os-specific/linux/rtw89 { } else null;
570
571 openafs_1_8 = callPackage ../servers/openafs/1.8/module.nix { };
572 # Current stable release; don't backport release updates!
573 openafs = openafs_1_8;
574
575 opensnitch-ebpf =
576 if lib.versionAtLeast kernel.version "5.10" then
577 callPackage ../os-specific/linux/opensnitch-ebpf { }
578 else
579 null;
580
581 facetimehd = callPackage ../os-specific/linux/facetimehd { };
582
583 rust-out-of-tree-module =
584 if lib.versionAtLeast kernel.version "6.7" then
585 callPackage ../os-specific/linux/rust-out-of-tree-module { }
586 else
587 null;
588
589 tuxedo-drivers =
590 if lib.versionAtLeast kernel.version "4.14" then
591 callPackage ../os-specific/linux/tuxedo-drivers { }
592 else
593 null;
594
595 jool = callPackage ../os-specific/linux/jool { };
596
597 kvmfr = callPackage ../os-specific/linux/kvmfr { };
598
599 mba6x_bl = callPackage ../os-specific/linux/mba6x_bl { };
600
601 mwprocapture = callPackage ../os-specific/linux/mwprocapture { };
602
603 mxu11x0 = callPackage ../os-specific/linux/mxu11x0 { };
604
605 # compiles but has to be integrated into the kernel somehow
606 # Let's have it uncommented and finish it..
607 ndiswrapper = callPackage ../os-specific/linux/ndiswrapper { };
608
609 netatop = callPackage ../os-specific/linux/netatop { };
610
611 perf = callPackage ../os-specific/linux/kernel/perf { };
612
613 phc-intel =
614 if lib.versionAtLeast kernel.version "4.10" then
615 callPackage ../os-specific/linux/phc-intel { }
616 else
617 null;
618
619 prl-tools = callPackage ../os-specific/linux/prl-tools { };
620
621 isgx = callPackage ../os-specific/linux/isgx { };
622
623 rr-zen_workaround = callPackage ../development/tools/analysis/rr/zen_workaround.nix { };
624
625 shufflecake = callPackage ../os-specific/linux/shufflecake { };
626
627 sysdig = callPackage ../os-specific/linux/sysdig { };
628
629 systemtap = callPackage ../development/tools/profiling/systemtap { };
630
631 system76 = callPackage ../os-specific/linux/system76 { };
632
633 system76-acpi = callPackage ../os-specific/linux/system76-acpi { };
634
635 system76-io = callPackage ../os-specific/linux/system76-io { };
636
637 tmon = callPackage ../os-specific/linux/tmon { };
638
639 tp_smapi = callPackage ../os-specific/linux/tp_smapi { };
640
641 turbostat = callPackage ../os-specific/linux/turbostat { };
642
643 corefreq = callPackage ../os-specific/linux/corefreq { };
644
645 trelay = callPackage ../os-specific/linux/trelay { };
646
647 universal-pidff = callPackage ../os-specific/linux/universal-pidff { };
648
649 usbip = callPackage ../os-specific/linux/usbip { };
650
651 v86d = callPackage ../os-specific/linux/v86d { };
652
653 veikk-linux-driver = callPackage ../os-specific/linux/veikk-linux-driver { };
654 vendor-reset = callPackage ../os-specific/linux/vendor-reset { };
655
656 vhba = callPackage ../applications/emulators/cdemu/vhba.nix { };
657
658 virtio_vmmci = callPackage ../os-specific/linux/virtio_vmmci { };
659
660 virtualbox = callPackage ../os-specific/linux/virtualbox {
661 virtualbox = pkgs.virtualboxHardened;
662 };
663
664 virtualboxGuestAdditions =
665 callPackage ../applications/virtualization/virtualbox/guest-additions
666 { };
667
668 mm-tools = callPackage ../os-specific/linux/mm-tools { };
669
670 vmm_clock = callPackage ../os-specific/linux/vmm_clock { };
671
672 vmware = callPackage ../os-specific/linux/vmware { };
673
674 wireguard =
675 if lib.versionOlder kernel.version "5.6" then
676 callPackage ../os-specific/linux/wireguard { }
677 else
678 null;
679
680 x86_energy_perf_policy = callPackage ../os-specific/linux/x86_energy_perf_policy { };
681
682 xone =
683 if lib.versionAtLeast kernel.version "5.4" then callPackage ../os-specific/linux/xone { } else null;
684
685 xpadneo = callPackage ../os-specific/linux/xpadneo { };
686
687 yt6801 = callPackage ../os-specific/linux/yt6801 { };
688
689 ithc = callPackage ../os-specific/linux/ithc { };
690
691 ryzen-smu = callPackage ../os-specific/linux/ryzen-smu { };
692
693 zenpower = callPackage ../os-specific/linux/zenpower { };
694
695 zfs_2_2 = callPackage ../os-specific/linux/zfs/2_2.nix {
696 configFile = "kernel";
697 inherit pkgs kernel;
698 };
699 zfs_2_3 = callPackage ../os-specific/linux/zfs/2_3.nix {
700 configFile = "kernel";
701 inherit pkgs kernel;
702 };
703 zfs_unstable = callPackage ../os-specific/linux/zfs/unstable.nix {
704 configFile = "kernel";
705 inherit pkgs kernel;
706 };
707
708 can-isotp = callPackage ../os-specific/linux/can-isotp { };
709
710 qc71_laptop = callPackage ../os-specific/linux/qc71_laptop { };
711
712 hid-ite8291r3 = callPackage ../os-specific/linux/hid-ite8291r3 { };
713
714 hid-t150 = callPackage ../os-specific/linux/hid-t150 { };
715
716 hid-tmff2 = callPackage ../os-specific/linux/hid-tmff2 { };
717
718 hpuefi-mod = callPackage ../os-specific/linux/hpuefi-mod { };
719
720 drbd = callPackage ../os-specific/linux/drbd/driver.nix { };
721
722 nullfs = callPackage ../os-specific/linux/nullfs { };
723
724 msi-ec = callPackage ../os-specific/linux/msi-ec { };
725
726 tsme-test = callPackage ../os-specific/linux/tsme-test { };
727
728 xpad-noone = callPackage ../os-specific/linux/xpad-noone { };
729
730 }
731 // lib.optionalAttrs config.allowAliases {
732 zfs = throw "linuxPackages.zfs has been removed, use zfs_* instead, or linuxPackages.\${pkgs.zfs.kernelModuleAttribute}"; # added 2025-01-23
733 zfs_2_1 = throw "zfs_2_1 has been removed"; # added 2024-12-25;
734 ati_drivers_x11 = throw "ati drivers are no longer supported by any kernel >=4.1"; # added 2021-05-18;
735 hid-nintendo = throw "hid-nintendo was added in mainline kernel version 5.16"; # Added 2023-07-30
736 sch_cake = throw "sch_cake was added in mainline kernel version 4.19"; # Added 2023-06-14
737 rtl8723bs = throw "rtl8723bs was added in mainline kernel version 4.12"; # Added 2023-06-14
738 vm-tools = self.mm-tools;
739 xmm7360-pci = throw "Support for the XMM7360 WWAN card was added to the iosm kmod in mainline kernel version 5.18";
740 amdgpu-pro = throw "amdgpu-pro was removed due to lack of maintenance"; # Added 2024-06-16
741 kvdo = throw "kvdo was removed, because it was added to mainline in kernel version 6.9"; # Added 2024-07-08
742 system76-power = lib.warnOnInstantiate "kernelPackages.system76-power is now pkgs.system76-power" pkgs.system76-power; # Added 2024-10-16
743 system76-scheduler = lib.warnOnInstantiate "kernelPackages.system76-scheduler is now pkgs.system76-scheduler" pkgs.system76-scheduler; # Added 2024-10-16
744 tuxedo-keyboard = self.tuxedo-drivers; # Added 2024-09-28
745 }
746 );
747
748 hardenedPackagesFor = kernel: overrides: packagesFor (hardenedKernelFor kernel overrides);
749
750 vanillaPackages =
751 {
752 # recurse to build modules for the kernels
753 linux_5_4 = recurseIntoAttrs (packagesFor kernels.linux_5_4);
754 linux_5_10 = recurseIntoAttrs (packagesFor kernels.linux_5_10);
755 linux_5_15 = recurseIntoAttrs (packagesFor kernels.linux_5_15);
756 linux_6_1 = recurseIntoAttrs (packagesFor kernels.linux_6_1);
757 linux_6_6 = recurseIntoAttrs (packagesFor kernels.linux_6_6);
758 linux_6_12 = recurseIntoAttrs (packagesFor kernels.linux_6_12);
759 linux_6_13 = recurseIntoAttrs (packagesFor kernels.linux_6_13);
760 linux_6_14 = recurseIntoAttrs (packagesFor kernels.linux_6_14);
761 linux_6_15 = recurseIntoAttrs (packagesFor kernels.linux_6_15);
762 }
763 // lib.optionalAttrs config.allowAliases {
764 linux_4_19 = throw "linux 4.19 was removed because it will reach its end of life within 24.11"; # Added 2024-09-21
765 linux_6_9 = throw "linux 6.9 was removed because it reached its end of life upstream"; # Added 2024-08-02
766 linux_6_10 = throw "linux 6.10 was removed because it reached its end of life upstream"; # Added 2024-10-23
767 linux_6_11 = throw "linux 6.11 was removed because it reached its end of life upstream"; # Added 2025-03-23
768 };
769
770 rtPackages = {
771 # realtime kernel packages
772 linux_rt_5_4 = packagesFor kernels.linux_rt_5_4;
773 linux_rt_5_10 = packagesFor kernels.linux_rt_5_10;
774 linux_rt_5_15 = packagesFor kernels.linux_rt_5_15;
775 linux_rt_6_1 = packagesFor kernels.linux_rt_6_1;
776 linux_rt_6_6 = packagesFor kernels.linux_rt_6_6;
777 };
778
779 rpiPackages = {
780 linux_rpi1 = packagesFor kernels.linux_rpi1;
781 linux_rpi2 = packagesFor kernels.linux_rpi2;
782 linux_rpi3 = packagesFor kernels.linux_rpi3;
783 linux_rpi4 = packagesFor kernels.linux_rpi4;
784 };
785
786 packages = recurseIntoAttrs (
787 vanillaPackages
788 // rtPackages
789 // rpiPackages
790 // {
791
792 # Intentionally lacks recurseIntoAttrs, as -rc kernels will quite likely break out-of-tree modules and cause failed Hydra builds.
793 linux_testing = packagesFor kernels.linux_testing;
794
795 linux_hardened = recurseIntoAttrs (packagesFor kernels.linux_hardened);
796
797 linux_5_4_hardened = recurseIntoAttrs (packagesFor kernels.linux_5_4_hardened);
798 linux_5_10_hardened = recurseIntoAttrs (packagesFor kernels.linux_5_10_hardened);
799 linux_5_15_hardened = recurseIntoAttrs (packagesFor kernels.linux_5_15_hardened);
800 linux_6_1_hardened = recurseIntoAttrs (packagesFor kernels.linux_6_1_hardened);
801 linux_6_6_hardened = recurseIntoAttrs (packagesFor kernels.linux_6_6_hardened);
802 linux_6_12_hardened = recurseIntoAttrs (packagesFor kernels.linux_6_12_hardened);
803 linux_6_13_hardened = recurseIntoAttrs (packagesFor kernels.linux_6_13_hardened);
804 linux_6_14_hardened = recurseIntoAttrs (packagesFor kernels.linux_6_14_hardened);
805
806 linux_zen = recurseIntoAttrs (packagesFor kernels.linux_zen);
807 linux_lqx = recurseIntoAttrs (packagesFor kernels.linux_lqx);
808 linux_xanmod = recurseIntoAttrs (packagesFor kernels.linux_xanmod);
809 linux_xanmod_stable = recurseIntoAttrs (packagesFor kernels.linux_xanmod_stable);
810 linux_xanmod_latest = recurseIntoAttrs (packagesFor kernels.linux_xanmod_latest);
811
812 linux_libre = recurseIntoAttrs (packagesFor kernels.linux_libre);
813
814 linux_ham = recurseIntoAttrs (packagesFor kernels.linux_ham);
815
816 linux_latest_libre = recurseIntoAttrs (packagesFor kernels.linux_latest_libre);
817 __recurseIntoDerivationForReleaseJobs = true;
818 }
819 // lib.optionalAttrs config.allowAliases {
820 linux_4_19_hardened = throw "linux 4.19 was removed because it will reach its end of life within 24.11";
821 linux_6_9_hardened = throw "linux 6.9 was removed because it has reached its end of life upstream";
822 linux_6_10_hardened = throw "linux 6.10 was removed because it has reached its end of life upstream";
823 linux_6_11_hardened = throw "linux 6.11 was removed because it has reached its end of life upstream";
824 }
825 );
826
827 packageAliases =
828 {
829 linux_default = packages.linux_6_12;
830 # Update this when adding the newest kernel major version!
831 linux_latest = packages.linux_6_15;
832 linux_rt_default = packages.linux_rt_5_15;
833 linux_rt_latest = packages.linux_rt_6_6;
834 }
835 // lib.optionalAttrs config.allowAliases {
836 linux_mptcp = throw "'linux_mptcp' has been moved to https://github.com/teto/mptcp-flake";
837 };
838
839 manualConfig = callPackage ../os-specific/linux/kernel/manual-config.nix { };
840
841 customPackage =
842 {
843 version,
844 src,
845 modDirVersion ? lib.versions.pad 3 version,
846 configfile,
847 allowImportFromDerivation ? true,
848 }:
849 recurseIntoAttrs (
850 packagesFor (manualConfig {
851 inherit
852 version
853 src
854 modDirVersion
855 configfile
856 allowImportFromDerivation
857 ;
858 })
859 );
860
861 # Derive one of the default .config files
862 linuxConfig =
863 {
864 src,
865 kernelPatches ? [ ],
866 version ? (builtins.parseDrvName src.name).version,
867 makeTarget ? "defconfig",
868 name ? "kernel.config",
869 }:
870 stdenvNoCC.mkDerivation {
871 inherit name src;
872 depsBuildBuild =
873 [ buildPackages.stdenv.cc ]
874 ++ lib.optionals (lib.versionAtLeast version "4.16") [
875 buildPackages.bison
876 buildPackages.flex
877 ];
878 patches = map (p: p.patch) kernelPatches; # Patches may include new configs.
879 postPatch = ''
880 patchShebangs scripts/
881 '';
882 buildPhase = ''
883 set -x
884 make \
885 ARCH=${stdenv.hostPlatform.linuxArch} \
886 HOSTCC=${buildPackages.stdenv.cc.targetPrefix}gcc \
887 ${makeTarget}
888 '';
889 installPhase = ''
890 cp .config $out
891 '';
892 };
893
894 buildLinux = callPackage ../os-specific/linux/kernel/generic.nix { };
895}