diff --git a/doc/builders/packages/linux.section.md b/doc/builders/packages/linux.section.md index 1b8d6eda749d..d8f0d0ad445f 100644 --- a/doc/builders/packages/linux.section.md +++ b/doc/builders/packages/linux.section.md @@ -16,7 +16,7 @@ How to add a new (major) version of the Linux kernel to Nixpkgs: 1. Copy the old Nix expression (e.g. `linux-2.6.21.nix`) to the new one (e.g. `linux-2.6.22.nix`) and update it. -2. Add the new kernel to `all-packages.nix` (e.g., create an attribute `kernel_2_6_22`). +2. Add the new kernel to the `kernels` attribute set in `linux-kernels.nix` (e.g., create an attribute `kernel_2_6_22`). 3. Now we’re going to update the kernel configuration. First unpack the kernel. Then for each supported platform (`i686`, `x86_64`, `uml`) do the following: @@ -36,6 +36,6 @@ How to add a new (major) version of the Linux kernel to Nixpkgs: 5. Copy `.config` over the new config file (e.g. `config-2.6.22-i686-smp`). -4. Test building the kernel: `nix-build -A kernel_2_6_22`. If it compiles, ship it! For extra credit, try booting NixOS with it. +4. Test building the kernel: `nix-build -A linuxKernel.kernels.kernel_2_6_22`. If it compiles, ship it! For extra credit, try booting NixOS with it. -5. It may be that the new kernel requires updating the external kernel modules and kernel-dependent packages listed in the `linuxPackagesFor` function in `all-packages.nix` (such as the NVIDIA drivers, AUFS, etc.). If the updated packages aren’t backwards compatible with older kernels, you may need to keep the older versions around. +5. It may be that the new kernel requires updating the external kernel modules and kernel-dependent packages listed in the `linuxPackagesFor` function in `linux-kernels.nix` (such as the NVIDIA drivers, AUFS, etc.). If the updated packages aren’t backwards compatible with older kernels, you may need to keep the older versions around. diff --git a/nixos/doc/manual/configuration/linux-kernel.xml b/nixos/doc/manual/configuration/linux-kernel.xml index 529ac1b1cd46..2675220b3a80 100644 --- a/nixos/doc/manual/configuration/linux-kernel.xml +++ b/nixos/doc/manual/configuration/linux-kernel.xml @@ -9,12 +9,14 @@ . For instance, this selects the Linux 3.10 kernel: - = pkgs.linuxPackages_3_10; + = pkgs.linuxKernel.packages.linux_3_10; Note that this not only replaces the kernel, but also packages that are - specific to the kernel version, such as the NVIDIA video drivers. This - ensures that driver packages are consistent with the kernel. - +specific to the kernel version, such as the NVIDIA video drivers. This ensures that driver packages are consistent with the kernel. + + + While pkgs.linuxKernel.packages contains all available kernel packages, you may want to use one of the unversioned pkgs.linuxPackages_* aliases such as pkgs.linuxPackages_latest, that are kept up to date with new versions. + The default Linux kernel configuration should be fine for most users. You can see the configuration of your current kernel with the following command: @@ -27,14 +29,13 @@ zcat /proc/config.gz linkend="sec-customising-packages" />). For instance, to enable support for the kernel debugger KGDB: -nixpkgs.config.packageOverrides = pkgs: - { linux_3_4 = pkgs.linux_3_4.override { - extraConfig = - '' - KGDB y - ''; - }; +nixpkgs.config.packageOverrides = pkgs: pkgs.lib.recursiveUpdate pkgs { + linuxKernel.kernels.linux_5_10 = pkgs.linuxKernel.kernels.linux_5_10.override { + extraConfig = '' + KGDB y + ''; }; +}; extraConfig takes a list of Linux kernel configuration options, one per line. The name of the option should not include the prefix @@ -73,15 +74,16 @@ nixpkgs.config.packageOverrides = pkgs: The first step before compiling the kernel is to generate an appropriate .config configuration. Either you pass your own config via the configfile setting of - linuxManualConfig: + linuxKernel.manualConfig: You can edit the config with this snippet (by default make diff --git a/nixos/doc/manual/from_md/release-notes/rl-2111.section.xml b/nixos/doc/manual/from_md/release-notes/rl-2111.section.xml index 8504593e7683..9120c1a7181c 100644 --- a/nixos/doc/manual/from_md/release-notes/rl-2111.section.xml +++ b/nixos/doc/manual/from_md/release-notes/rl-2111.section.xml @@ -720,6 +720,20 @@
Other Notable Changes + + + The linux kernel package infrastructure was moved out of + all-packages.nix, and restructured. Linux + related functions and attributes now live under the + pkgs.linuxKernel attribute set. In + particular the versioned linuxPackages_* + package sets (such as linuxPackages_5_4) + and kernels from pkgs were moved there and + now live under pkgs.linuxKernel.packages.*. + The unversioned ones (such as + linuxPackages_latest) remain untouched. + + The setting diff --git a/nixos/doc/manual/release-notes/rl-2111.section.md b/nixos/doc/manual/release-notes/rl-2111.section.md index 024ed9c73998..6d29ca9594bb 100644 --- a/nixos/doc/manual/release-notes/rl-2111.section.md +++ b/nixos/doc/manual/release-notes/rl-2111.section.md @@ -184,6 +184,9 @@ To be able to access the web UI this port needs to be opened in the firewall. ## Other Notable Changes {#sec-release-21.11-notable-changes} +- The linux kernel package infrastructure was moved out of `all-packages.nix`, and restructured. Linux related functions and attributes now live under the `pkgs.linuxKernel` attribute set. + In particular the versioned `linuxPackages_*` package sets (such as `linuxPackages_5_4`) and kernels from `pkgs` were moved there and now live under `pkgs.linuxKernel.packages.*`. The unversioned ones (such as `linuxPackages_latest`) remain untouched. + - The setting [`services.openssh.logLevel`](options.html#opt-services.openssh.logLevel) `"VERBOSE"` `"INFO"`. This brings NixOS in line with upstream and other Linux distributions, and reduces log spam on servers due to bruteforcing botnets. However, if [`services.fail2ban.enable`](options.html#opt-services.fail2ban.enable) is `true`, the `fail2ban` will override the verbosity to `"VERBOSE"`, so that `fail2ban` can observe the failed login attempts from the SSH logs. diff --git a/nixos/modules/installer/cd-dvd/system-tarball-fuloong2f.nix b/nixos/modules/installer/cd-dvd/system-tarball-fuloong2f.nix index 123f487baf93..054c8c74a76b 100644 --- a/nixos/modules/installer/cd-dvd/system-tarball-fuloong2f.nix +++ b/nixos/modules/installer/cd-dvd/system-tarball-fuloong2f.nix @@ -93,7 +93,7 @@ in boot.initrd.availableKernelModules = [ "vfat" "reiserfs" ]; - boot.kernelPackages = pkgs.linuxPackages_3_10; + boot.kernelPackages = pkgs.linuxKernel.packages.linux_3_10; boot.kernelParams = [ "console=tty1" ]; boot.postBootCommands = diff --git a/nixos/modules/installer/cd-dvd/system-tarball-pc.nix b/nixos/modules/installer/cd-dvd/system-tarball-pc.nix index a79209d7dfef..674fb6c8a33c 100644 --- a/nixos/modules/installer/cd-dvd/system-tarball-pc.nix +++ b/nixos/modules/installer/cd-dvd/system-tarball-pc.nix @@ -114,7 +114,7 @@ in # To be able to use the systemTarball to catch troubles. boot.crashDump = { enable = true; - kernelPackages = pkgs.linuxPackages_3_4; + kernelPackages = pkgs.linuxKernel.packages.linux_3_4; }; # No grub for the tarball. diff --git a/nixos/modules/installer/cd-dvd/system-tarball-sheevaplug.nix b/nixos/modules/installer/cd-dvd/system-tarball-sheevaplug.nix index 95579f3ca06d..458e313a3f75 100644 --- a/nixos/modules/installer/cd-dvd/system-tarball-sheevaplug.nix +++ b/nixos/modules/installer/cd-dvd/system-tarball-sheevaplug.nix @@ -111,7 +111,7 @@ in # "console=ttyS0,115200n8" # serial console ]; - boot.kernelPackages = pkgs.linuxPackages_3_4; + boot.kernelPackages = pkgs.linuxKernel.packages.linux_3_4; boot.supportedFilesystems = [ "reiserfs" ]; diff --git a/nixos/modules/installer/sd-card/sd-image-raspberrypi.nix b/nixos/modules/installer/sd-card/sd-image-raspberrypi.nix index 83850f4c1158..103d6787a03c 100644 --- a/nixos/modules/installer/sd-card/sd-image-raspberrypi.nix +++ b/nixos/modules/installer/sd-card/sd-image-raspberrypi.nix @@ -12,7 +12,7 @@ boot.loader.generic-extlinux-compatible.enable = true; boot.consoleLogLevel = lib.mkDefault 7; - boot.kernelPackages = pkgs.linuxPackages_rpi1; + boot.kernelPackages = pkgs.linuxKernel.packages.linux_rpi1; sdImage = { populateFirmwareCommands = let diff --git a/nixos/modules/system/boot/kernel.nix b/nixos/modules/system/boot/kernel.nix index 1a6a9d99d5bb..15a5fd236092 100644 --- a/nixos/modules/system/boot/kernel.nix +++ b/nixos/modules/system/boot/kernel.nix @@ -47,7 +47,7 @@ in # We don't want to evaluate all of linuxPackages for the manual # - some of it might not even evaluate correctly. defaultText = "pkgs.linuxPackages"; - example = literalExample "pkgs.linuxPackages_2_6_25"; + example = literalExample "pkgs.linuxKernel.packages.linux_5_10"; description = '' This option allows you to override the Linux kernel used by NixOS. Since things like external kernel module packages are diff --git a/nixos/tests/kernel-generic.nix b/nixos/tests/kernel-generic.nix index cd32049dff46..6511d8db5b77 100644 --- a/nixos/tests/kernel-generic.nix +++ b/nixos/tests/kernel-generic.nix @@ -23,16 +23,18 @@ let assert "${linuxPackages.kernel.modDirVersion}" in machine.succeed("uname -a") ''; }) args); + + packages = pkgs.linuxKernel.packages; in with pkgs; { - linux_4_4 = makeKernelTest "4.4" linuxPackages_4_4; - linux_4_9 = makeKernelTest "4.9" linuxPackages_4_9; - linux_4_14 = makeKernelTest "4.14" linuxPackages_4_14; - linux_4_19 = makeKernelTest "4.19" linuxPackages_4_19; - linux_5_4 = makeKernelTest "5.4" linuxPackages_5_4; - linux_5_10 = makeKernelTest "5.10" linuxPackages_5_10; - linux_5_12 = makeKernelTest "5.12" linuxPackages_5_12; - linux_5_13 = makeKernelTest "5.13" linuxPackages_5_13; + linux_4_4 = makeKernelTest "4.4" packages.linux_4_4; + linux_4_9 = makeKernelTest "4.9" packages.linux_4_9; + linux_4_14 = makeKernelTest "4.14" packages.linux_4_14; + linux_4_19 = makeKernelTest "4.19" packages.linux_4_19; + linux_5_4 = makeKernelTest "5.4" packages.linux_5_4; + linux_5_10 = makeKernelTest "5.10" packages.linux_5_10; + linux_5_12 = makeKernelTest "5.12" packages.linux_5_12; + linux_5_13 = makeKernelTest "5.13" packages.linux_5_13; linux_testing = makeKernelTest "testing" linuxPackages_testing; } diff --git a/pkgs/os-specific/linux/zfs/default.nix b/pkgs/os-specific/linux/zfs/default.nix index 517e6036e780..6f0f32d5230b 100644 --- a/pkgs/os-specific/linux/zfs/default.nix +++ b/pkgs/os-specific/linux/zfs/default.nix @@ -1,4 +1,4 @@ -{ lib, stdenv, fetchFromGitHub +{ pkgs, lib, stdenv, fetchFromGitHub , autoreconfHook269, util-linux, nukeReferences, coreutils , perl, nixosTests , configFile ? "all" @@ -16,7 +16,7 @@ , enablePython ? true # for determining the latest compatible linuxPackages -, linuxPackages_5_13 +, linuxPackages_5_13 ? pkgs.linuxKernel.packages.linux_5_13 }: with lib; diff --git a/pkgs/top-level/aliases.nix b/pkgs/top-level/aliases.nix index 5a16b3c9e552..0cb77d508bc7 100644 --- a/pkgs/top-level/aliases.nix +++ b/pkgs/top-level/aliases.nix @@ -435,8 +435,40 @@ mapAliases ({ libwnck3 = libwnck; lilypond-unstable = lilypond; # added 2021-03-11 links = links2; # added 2016-01-31 - linux_rpi0 = linux_rpi1; - linuxPackages_rpi0 = linuxPackages_rpi1; + linux_rpi0 = linuxKernel.kernels.linux_rpi1; + linuxPackages_rpi0 = linuxKernel.packages.linux_rpi1; + linuxPackages_rt_5_4 = linuxKernel.packages.linux_rt_5_4; + linuxPackages_rt_5_10 = linuxKernel.packages.linux_rt_5_10; + linuxPackages_rt_5_11 = linuxKernel.packages.linux_rt_5_11; + linuxPackages_rpi1 = linuxKernel.packages.linux_rpi1; + linuxPackages_rpi2 = linuxKernel.packages.linux_rpi2; + linuxPackages_rpi3 = linuxKernel.packages.linux_rpi3; + linuxPackages_rpi4 = linuxKernel.packages.linux_rpi4; + linuxPackages_4_4 = linuxKernel.packages.linux_4_4; + linuxPackages_4_9 = linuxKernel.packages.linux_4_9; + linuxPackages_4_14 = linuxKernel.packages.linux_4_14; + linuxPackages_hardkernel_4_14 = linuxKernel.packages.hardkernel_4_14; + linuxPackages_4_19 = linuxKernel.packages.linux_4_19; + linuxPackages_5_4 = linuxKernel.packages.linux_5_4; + linuxPackages_5_10 = linuxKernel.packages.linux_5_10; + linuxPackages_5_12 = linuxKernel.packages.linux_5_12; + linuxPackages_5_13 = linuxKernel.packages.linux_5_13; + + linux_mptcp_95 = linuxKernel.kernels.linux_mptcp_95; + linux_rpi1 = linuxKernel.kernels.linux_rpi1; + linux_rpi2 = linuxKernel.kernels.linux_rpi2; + linux_rpi3 = linuxKernel.kernels.linux_rpi3; + linux_rpi4 = linuxKernel.kernels.linux_rpi4; + linux_4_4 = linuxKernel.kernels.linux_4_4; + linux_4_9 = linuxKernel.kernels.linux_4_9; + linux_4_14 = linuxKernel.kernels.linux_4_14; + linux_4_19 = linuxKernel.kernels.linux_4_19; + linux_5_4 = linuxKernel.kernels.linux_5_4; + linux-rt_5_4 = linuxKernel.kernels.linux_rt_5_4; + linux_5_10 = linuxKernel.kernels.linux_5_10; + linux-rt_5_10 = linuxKernel.kernels.linux_rt_5_10; + linux_5_12 = linuxKernel.kernels.linux_5_12; + linux-rt_5_11 = linuxKernel.kernels.linux_rt_5_11; # added 2020-04-04 linuxPackages_testing_hardened = throw "linuxPackages_testing_hardened has been removed, please use linuxPackages_latest_hardened"; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index ee2f8084fff2..e3a6e43e2355 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -21058,465 +21058,31 @@ with pkgs; tgt = callPackage ../tools/networking/tgt { }; - # -- Linux kernel expressions ------------------------------------------------ - lkl = callPackage ../applications/virtualization/lkl { }; inherit (callPackages ../os-specific/linux/kernel-headers { }) linuxHeaders makeLinuxHeaders; - kernelPatches = callPackage ../os-specific/linux/kernel/patches.nix { }; - klibc = callPackage ../os-specific/linux/klibc { }; klibcShrunk = lowPrio (callPackage ../os-specific/linux/klibc/shrunk.nix { }); - linux_mptcp = linux_mptcp_95; + linuxKernel = recurseIntoAttrs (callPackage ./linux-kernels.nix { }); - linux_mptcp_95 = callPackage ../os-specific/linux/kernel/linux-mptcp-95.nix { - kernelPatches = linux_4_19.kernelPatches; - }; + inherit (linuxKernel) buildLinux linuxConfig kernelPatches; - linux_rpi1 = callPackage ../os-specific/linux/kernel/linux-rpi.nix { - kernelPatches = with kernelPatches; [ - bridge_stp_helper - request_key_helper - ]; - rpiVersion = 1; - }; + linuxPackagesFor = linuxKernel.packagesFor; - linux_rpi2 = callPackage ../os-specific/linux/kernel/linux-rpi.nix { - kernelPatches = with kernelPatches; [ - bridge_stp_helper - request_key_helper - ]; - rpiVersion = 2; - }; + hardenedLinuxPackagesFor = linuxKernel.hardenedPackagesFor; - linux_rpi3 = callPackage ../os-specific/linux/kernel/linux-rpi.nix { - kernelPatches = with kernelPatches; [ - bridge_stp_helper - request_key_helper - ]; - rpiVersion = 3; - }; + linuxManualConfig = linuxKernel.manualConfig; - linux_rpi4 = callPackage ../os-specific/linux/kernel/linux-rpi.nix { - kernelPatches = with kernelPatches; [ - bridge_stp_helper - request_key_helper - ]; - rpiVersion = 4; - }; - - linux_4_4 = callPackage ../os-specific/linux/kernel/linux-4.4.nix { - kernelPatches = - [ kernelPatches.bridge_stp_helper - kernelPatches.request_key_helper_updated - kernelPatches.cpu-cgroup-v2."4.4" - kernelPatches.modinst_arg_list_too_long - ]; - }; - - linux_4_9 = callPackage ../os-specific/linux/kernel/linux-4.9.nix { - kernelPatches = - [ kernelPatches.bridge_stp_helper - kernelPatches.request_key_helper_updated - kernelPatches.cpu-cgroup-v2."4.9" - kernelPatches.modinst_arg_list_too_long - ]; - }; - - linux_4_14 = callPackage ../os-specific/linux/kernel/linux-4.14.nix { - kernelPatches = - [ kernelPatches.bridge_stp_helper - kernelPatches.request_key_helper - # See pkgs/os-specific/linux/kernel/cpu-cgroup-v2-patches/README.md - # when adding a new linux version - kernelPatches.cpu-cgroup-v2."4.11" - kernelPatches.modinst_arg_list_too_long - ]; - }; - - linux_4_19 = callPackage ../os-specific/linux/kernel/linux-4.19.nix { - kernelPatches = - [ kernelPatches.bridge_stp_helper - kernelPatches.request_key_helper - kernelPatches.modinst_arg_list_too_long - ]; - }; - - linux_5_4 = callPackage ../os-specific/linux/kernel/linux-5.4.nix { - kernelPatches = [ - kernelPatches.bridge_stp_helper - kernelPatches.request_key_helper - kernelPatches.rtl8761b_support - ]; - }; - - linux-rt_5_4 = callPackage ../os-specific/linux/kernel/linux-rt-5.4.nix { - kernelPatches = [ - kernelPatches.bridge_stp_helper - kernelPatches.request_key_helper - ]; - }; - - linux_5_10 = callPackage ../os-specific/linux/kernel/linux-5.10.nix { - kernelPatches = [ - kernelPatches.bridge_stp_helper - kernelPatches.request_key_helper - ]; - }; - - linux_5_12 = callPackage ../os-specific/linux/kernel/linux-5.12.nix { - kernelPatches = [ - kernelPatches.bridge_stp_helper - kernelPatches.request_key_helper - ]; - }; - - linux_5_13 = callPackage ../os-specific/linux/kernel/linux-5.13.nix { - kernelPatches = [ - kernelPatches.bridge_stp_helper - kernelPatches.request_key_helper - ]; - }; - - linux-rt_5_10 = callPackage ../os-specific/linux/kernel/linux-rt-5.10.nix { - kernelPatches = [ - kernelPatches.bridge_stp_helper - kernelPatches.request_key_helper - kernelPatches.export-rt-sched-migrate - ]; - }; - - linux-rt_5_11 = callPackage ../os-specific/linux/kernel/linux-rt-5.11.nix { - kernelPatches = [ - kernelPatches.bridge_stp_helper - kernelPatches.request_key_helper - kernelPatches.export-rt-sched-migrate - ]; - }; - - linux_testing = callPackage ../os-specific/linux/kernel/linux-testing.nix { - kernelPatches = [ - kernelPatches.bridge_stp_helper - kernelPatches.request_key_helper - ]; - }; - - linux_testing_bcachefs = callPackage ../os-specific/linux/kernel/linux-testing-bcachefs.nix rec { - kernel = linux_5_13; - kernelPatches = kernel.kernelPatches; - }; - - linux_hardkernel_4_14 = callPackage ../os-specific/linux/kernel/linux-hardkernel-4.14.nix { - kernelPatches = [ - kernelPatches.bridge_stp_helper - kernelPatches.request_key_helper - kernelPatches.modinst_arg_list_too_long - ]; - }; - - linux_zen = callPackage ../os-specific/linux/kernel/linux-zen.nix { - kernelPatches = [ - kernelPatches.bridge_stp_helper - kernelPatches.request_key_helper - ]; - }; - - linux_lqx = callPackage ../os-specific/linux/kernel/linux-lqx.nix { - kernelPatches = [ - kernelPatches.bridge_stp_helper - kernelPatches.request_key_helper - ]; - }; - - linux_xanmod = callPackage ../os-specific/linux/kernel/linux-xanmod.nix { - kernelPatches = [ - kernelPatches.bridge_stp_helper - kernelPatches.request_key_helper - ]; - }; - - /* Linux kernel modules are inherently tied to a specific kernel. So - rather than provide specific instances of those packages for a - specific kernel, we have a function that builds those packages - for a specific kernel. This function can then be called for - whatever kernel you're using. */ - - linuxPackagesFor = kernel_: lib.makeExtensible (self: with self; { - callPackage = newScope self; - - kernel = kernel_; - inherit (kernel) stdenv; # in particular, use the same compiler by default - - # to help determine module compatibility - inherit (kernel) isZen isHardened isLibre; - inherit (kernel) kernelOlder kernelAtLeast; - - # Obsolete aliases (these packages do not depend on the kernel). - inherit (pkgs) odp-dpdk pktgen; # added 2018-05 - - acpi_call = callPackage ../os-specific/linux/acpi-call {}; - - akvcam = callPackage ../os-specific/linux/akvcam { - inherit (qt5) qmake; - }; - - amdgpu-pro = callPackage ../os-specific/linux/amdgpu-pro { }; - - anbox = callPackage ../os-specific/linux/anbox/kmod.nix { }; - - apfs = callPackage ../os-specific/linux/apfs { }; - - batman_adv = callPackage ../os-specific/linux/batman-adv {}; - - bcc = callPackage ../os-specific/linux/bcc { - python = python3; - }; - - bpftrace = callPackage ../os-specific/linux/bpftrace { }; - - bbswitch = callPackage ../os-specific/linux/bbswitch {}; - - chipsec = callPackage ../tools/security/chipsec { - inherit kernel; - withDriver = true; - }; - - cryptodev = callPackage ../os-specific/linux/cryptodev { }; - - cpupower = callPackage ../os-specific/linux/cpupower { }; - - ddcci-driver = callPackage ../os-specific/linux/ddcci { }; - - digimend = callPackage ../os-specific/linux/digimend { }; - - dpdk-kmods = callPackage ../os-specific/linux/dpdk-kmods { }; - - exfat-nofuse = callPackage ../os-specific/linux/exfat { }; - - evdi = callPackage ../os-specific/linux/evdi { }; - - fwts-efi-runtime = callPackage ../os-specific/linux/fwts/module.nix { }; - - gcadapter-oc-kmod = callPackage ../os-specific/linux/gcadapter-oc-kmod { }; - - hid-nintendo = callPackage ../os-specific/linux/hid-nintendo { }; - - hyperv-daemons = callPackage ../os-specific/linux/hyperv-daemons { }; - - e1000e = if lib.versionOlder kernel.version "4.10" then callPackage ../os-specific/linux/e1000e {} else null; - - intel-speed-select = if lib.versionAtLeast kernel.version "5.3" then callPackage ../os-specific/linux/intel-speed-select { } else null; - - ixgbevf = callPackage ../os-specific/linux/ixgbevf {}; - - it87 = callPackage ../os-specific/linux/it87 {}; - - asus-wmi-sensors = callPackage ../os-specific/linux/asus-wmi-sensors {}; - - ena = callPackage ../os-specific/linux/ena {}; - - v4l2loopback = callPackage ../os-specific/linux/v4l2loopback { }; - - lttng-modules = callPackage ../os-specific/linux/lttng-modules { }; - - broadcom_sta = callPackage ../os-specific/linux/broadcom-sta { }; - - tbs = callPackage ../os-specific/linux/tbs { }; - - mbp2018-bridge-drv = callPackage ../os-specific/linux/mbp-modules/mbp2018-bridge-drv { }; - - nvidiabl = callPackage ../os-specific/linux/nvidiabl { }; - - nvidiaPackages = dontRecurseIntoAttrs (callPackage ../os-specific/linux/nvidia-x11 { }); - - nvidia_x11_legacy340 = nvidiaPackages.legacy_340; - nvidia_x11_legacy390 = nvidiaPackages.legacy_390; - nvidia_x11_beta = nvidiaPackages.beta; - nvidia_x11_vulkan_beta = nvidiaPackages.vulkan_beta; - nvidia_x11 = nvidiaPackages.stable; - - openrazer = callPackage ../os-specific/linux/openrazer/driver.nix { }; - - ply = callPackage ../os-specific/linux/ply { }; - - r8125 = callPackage ../os-specific/linux/r8125 { }; - - r8168 = callPackage ../os-specific/linux/r8168 { }; - - rtl8188eus-aircrack = callPackage ../os-specific/linux/rtl8188eus-aircrack { }; - - rtl8192eu = callPackage ../os-specific/linux/rtl8192eu { }; - - rtl8723bs = callPackage ../os-specific/linux/rtl8723bs { }; - - rtl8812au = callPackage ../os-specific/linux/rtl8812au { }; - - rtl8814au = callPackage ../os-specific/linux/rtl8814au { }; - - rtl88xxau-aircrack = callPackage ../os-specific/linux/rtl88xxau-aircrack { }; - - rtl8821au = callPackage ../os-specific/linux/rtl8821au { }; - - rtl8821ce = callPackage ../os-specific/linux/rtl8821ce { }; - - rtl88x2bu = callPackage ../os-specific/linux/rtl88x2bu { }; - - rtl8821cu = callPackage ../os-specific/linux/rtl8821cu { }; - - rtw88 = callPackage ../os-specific/linux/rtw88 { }; - rtlwifi_new = rtw88; - - rtw89 = callPackage ../os-specific/linux/rtw89 { }; - - openafs_1_8 = callPackage ../servers/openafs/1.8/module.nix { }; - openafs_1_9 = callPackage ../servers/openafs/1.9/module.nix { }; - # Current stable release; don't backport release updates! - openafs = openafs_1_8; - - facetimehd = callPackage ../os-specific/linux/facetimehd { }; - - tuxedo-keyboard = if lib.versionAtLeast kernel.version "4.14" then callPackage ../os-specific/linux/tuxedo-keyboard { } else null; - - jool = callPackage ../os-specific/linux/jool { }; - - kvmfr = callPackage ../os-specific/linux/kvmfr { }; - - mba6x_bl = callPackage ../os-specific/linux/mba6x_bl { }; - - mwprocapture = callPackage ../os-specific/linux/mwprocapture { }; - - mxu11x0 = callPackage ../os-specific/linux/mxu11x0 { }; - - # compiles but has to be integrated into the kernel somehow - # Let's have it uncommented and finish it.. - ndiswrapper = callPackage ../os-specific/linux/ndiswrapper { }; - - netatop = callPackage ../os-specific/linux/netatop { }; - - oci-seccomp-bpf-hook = if lib.versionAtLeast kernel.version "5.4" then callPackage ../os-specific/linux/oci-seccomp-bpf-hook { } else null; - - perf = if lib.versionAtLeast kernel.version "3.12" then callPackage ../os-specific/linux/kernel/perf.nix { } else null; - - phc-intel = if lib.versionAtLeast kernel.version "4.10" then callPackage ../os-specific/linux/phc-intel { } else null; - - # Disable for kernels 4.15 and above due to compatibility issues - prl-tools = if lib.versionOlder kernel.version "4.15" then callPackage ../os-specific/linux/prl-tools { } else null; - - sch_cake = callPackage ../os-specific/linux/sch_cake { }; - - isgx = callPackage ../os-specific/linux/isgx { }; - - sysdig = callPackage ../os-specific/linux/sysdig {}; - - systemtap = callPackage ../development/tools/profiling/systemtap { }; - - system76 = callPackage ../os-specific/linux/system76 { }; - - system76-acpi = callPackage ../os-specific/linux/system76-acpi { }; - - system76-power = callPackage ../os-specific/linux/system76-power { }; - - system76-io = callPackage ../os-specific/linux/system76-io { }; - - tmon = callPackage ../os-specific/linux/tmon { }; - - tp_smapi = callPackage ../os-specific/linux/tp_smapi { }; - - turbostat = callPackage ../os-specific/linux/turbostat { }; - - usbip = callPackage ../os-specific/linux/usbip { }; - - v86d = callPackage ../os-specific/linux/v86d { }; - - veikk-linux-driver = callPackage ../os-specific/linux/veikk-linux-driver { }; - - vendor-reset = callPackage ../os-specific/linux/vendor-reset { }; - - vhba = callPackage ../misc/emulators/cdemu/vhba.nix { }; - - virtualbox = callPackage ../os-specific/linux/virtualbox { - virtualbox = pkgs.virtualboxHardened; - }; - - virtualboxGuestAdditions = callPackage ../applications/virtualization/virtualbox/guest-additions { - virtualbox = pkgs.virtualboxHardened; - }; - - wireguard = if lib.versionOlder kernel.version "5.6" then callPackage ../os-specific/linux/wireguard { } else null; - - x86_energy_perf_policy = callPackage ../os-specific/linux/x86_energy_perf_policy { }; - - xmm7360-pci = callPackage ../os-specific/linux/xmm7360-pci { }; - - xpadneo = callPackage ../os-specific/linux/xpadneo { }; - - zenpower = callPackage ../os-specific/linux/zenpower { }; - - inherit (callPackages ../os-specific/linux/zfs { - configFile = "kernel"; - inherit kernel; - }) zfsStable zfsUnstable; - zfs = zfsStable; - - can-isotp = callPackage ../os-specific/linux/can-isotp { }; - } // lib.optionalAttrs (config.allowAliases or false) { - # aliases or removed packages - ati_drivers_x11 = throw "ati drivers are no longer supported by any kernel >=4.1"; # added 2021-05-18 - }); - - # The current default kernel / kernel modules. - linuxPackages = linuxPackages_5_10; - linux = linuxPackages.kernel; - - # Update this when adding the newest kernel major version! - # And update linux_latest_for_hardened below if the patches are already available - linuxPackages_latest = linuxPackages_5_13; - linux_latest = linuxPackages_latest.kernel; - - # Realtime kernel packages. - linuxPackages-rt_5_4 = linuxPackagesFor pkgs.linux-rt_5_4; - linuxPackages-rt_5_10 = linuxPackagesFor pkgs.linux-rt_5_10; - linuxPackages-rt_5_11 = linuxPackagesFor pkgs.linux-rt_5_11; - linuxPackages-rt = linuxPackages-rt_5_4; - linuxPackages-rt_latest = linuxPackages-rt_5_11; - linux-rt = linuxPackages-rt.kernel; - linux-rt_latest = linuxPackages-rt_latest.kernel; - - linuxPackages_mptcp = linuxPackagesFor pkgs.linux_mptcp; - linuxPackages_rpi1 = linuxPackagesFor pkgs.linux_rpi1; - linuxPackages_rpi2 = linuxPackagesFor pkgs.linux_rpi2; - linuxPackages_rpi3 = linuxPackagesFor pkgs.linux_rpi3; - linuxPackages_rpi4 = linuxPackagesFor pkgs.linux_rpi4; - # Build kernel modules for some of the kernels. - linuxPackages_4_4 = recurseIntoAttrs (linuxPackagesFor pkgs.linux_4_4); - linuxPackages_4_9 = recurseIntoAttrs (linuxPackagesFor pkgs.linux_4_9); - linuxPackages_4_14 = recurseIntoAttrs (linuxPackagesFor pkgs.linux_4_14); - linuxPackages_4_19 = recurseIntoAttrs (linuxPackagesFor pkgs.linux_4_19); - linuxPackages_5_4 = recurseIntoAttrs (linuxPackagesFor pkgs.linux_5_4); - linuxPackages_5_10 = recurseIntoAttrs (linuxPackagesFor pkgs.linux_5_10); - linuxPackages_5_12 = recurseIntoAttrs (linuxPackagesFor pkgs.linux_5_12); - linuxPackages_5_13 = recurseIntoAttrs (linuxPackagesFor pkgs.linux_5_13); - - # When adding to the list above: - # - Update linuxPackages_latest to the latest version - # - Update the rev in ../os-specific/linux/kernel/linux-libre.nix to the latest one. - - # Intentionally lacks recurseIntoAttrs, as -rc kernels will quite likely break out-of-tree modules and cause failed Hydra builds. - linuxPackages_testing = linuxPackagesFor pkgs.linux_testing; - - linuxPackages_custom = { version, src, configfile, allowImportFromDerivation ? true }: - recurseIntoAttrs (linuxPackagesFor (pkgs.linuxManualConfig { - inherit version src configfile lib stdenv allowImportFromDerivation; - })); + linuxPackages_custom = linuxKernel.customPackage; # This serves as a test for linuxPackages_custom linuxPackages_custom_tinyconfig_kernel = let base = pkgs.linuxPackages.kernel; - tinyLinuxPackages = pkgs.linuxPackages_custom { + tinyLinuxPackages = linuxKernel.customPackage { inherit (base) version src; allowImportFromDerivation = false; configfile = pkgs.linuxConfig { @@ -21526,83 +21092,54 @@ with pkgs; }; in tinyLinuxPackages.kernel; - # Build a kernel with bcachefs module - linuxPackages_testing_bcachefs = recurseIntoAttrs (linuxPackagesFor pkgs.linux_testing_bcachefs); + # The current default kernel / kernel modules. + linuxPackages = linuxKernel.packageAliases.linux_default; + linux = linuxPackages.kernel; - # Hardened Linux - hardenedLinuxPackagesFor = kernel': overrides: - let # Note: We use this hack since the hardened patches can lag behind and we don't want to delay updates: - linux_latest_for_hardened = pkgs.linux_5_12; - kernel = (if kernel' == pkgs.linux_latest then linux_latest_for_hardened else kernel').override overrides; - in linuxPackagesFor (kernel.override { - structuredExtraConfig = import ../os-specific/linux/kernel/hardened/config.nix { - inherit lib; - inherit (kernel) version; - }; - kernelPatches = kernel.kernelPatches ++ [ - kernelPatches.hardened.${kernel.meta.branch} - ]; - modDirVersionArg = kernel.modDirVersion + (kernelPatches.hardened.${kernel.meta.branch}).extra; - isHardened = true; - }); + linuxPackages_latest = linuxKernel.packageAliases.linux_latest; + linux_latest = linuxPackages_latest.kernel; - linuxPackages_hardened = recurseIntoAttrs (hardenedLinuxPackagesFor pkgs.linux { }); + # Testing (rc) kernel + linuxPackages_testing = linuxKernel.packages.linux_testing; + linux_testing = linuxKernel.kernels.linux_testing; + + linuxPackages_testing_bcachefs = linuxKernel.packages.linux_testing_bcachefs; + linux_testing_bcachefs = linuxKernel.kernels.linux_testing_bcachefs; + + # kernel with mtcp support + linuxPackages_mptcp = linuxKernel.packageAliases.linux_mptcp; + linux_mptcp = linuxPackages_mptcp.kernel; + + # Realtime kernel + linuxPackages-rt = linuxKernel.packageAliases.linux_rt_default; + linuxPackages-rt_latest = linuxKernel.packageAliases.linux_rt_latest; + linux-rt = linuxPackages-rt.kernel; + linux-rt_latest = linuxPackages-rt_latest.kernel; + + # hardened kernels + linuxPackages_hardened = linuxKernel.packages.linux_hardened; linux_hardened = linuxPackages_hardened.kernel; - - linuxPackages_latest_hardened = recurseIntoAttrs (hardenedLinuxPackagesFor pkgs.linux_latest { }); + linuxPackages_latest_hardened = linuxKernel.packages.linux_latest_hardened; linux_latest_hardened = linuxPackages_latest_hardened.kernel; # Hardkernel (Odroid) kernels. - linuxPackages_hardkernel_4_14 = recurseIntoAttrs (linuxPackagesFor pkgs.linux_hardkernel_4_14); - linuxPackages_hardkernel_latest = linuxPackages_hardkernel_4_14; + linuxPackages_hardkernel_latest = linuxKernel.packageAliases.linux_hardkernel_latest; linux_hardkernel_latest = linuxPackages_hardkernel_latest.kernel; # GNU Linux-libre kernels - linuxPackages-libre = recurseIntoAttrs (linuxPackagesFor linux-libre); - linux-libre = callPackage ../os-specific/linux/kernel/linux-libre.nix {}; - linuxPackages_latest-libre = recurseIntoAttrs (linuxPackagesFor linux_latest-libre); - linux_latest-libre = linux-libre.override { linux = linux_latest; }; + linuxPackages-libre = linuxKernel.packages.linux_libre; + linux-libre = linuxPackages-libre.kernel; + linuxPackages_latest-libre = linuxKernel.packages.linux_latest_libre; + linux_latest-libre = linuxPackages_latest-libre.kernel; # zen-kernel - linuxPackages_zen = recurseIntoAttrs (linuxPackagesFor pkgs.linux_zen); - linuxPackages_lqx = recurseIntoAttrs (linuxPackagesFor pkgs.linux_lqx); + linuxPackages_zen = linuxKernel.packages.linux_zen; + linuxPackages_lqx = linuxKernel.packages.linux_lqx; # XanMod kernel - linuxPackages_xanmod = recurseIntoAttrs (linuxPackagesFor pkgs.linux_xanmod); + linuxPackages_xanmod = linuxKernel.packages.linux_xanmod; - # A function to build a manually-configured kernel - linuxManualConfig = makeOverridable (callPackage ../os-specific/linux/kernel/manual-config.nix {}); - - # Derive one of the default .config files - linuxConfig = { - src, - version ? (builtins.parseDrvName src.name).version, - makeTarget ? "defconfig", - name ? "kernel.config", - }: stdenvNoCC.mkDerivation { - inherit name src; - depsBuildBuild = [ buildPackages.stdenv.cc ] - ++ lib.optionals (lib.versionAtLeast version "4.16") [ buildPackages.bison buildPackages.flex ]; - postPatch = '' - patchShebangs scripts/ - ''; - buildPhase = '' - ( - set -x - make \ - ARCH=${stdenv.hostPlatform.linuxArch} \ - HOSTCC=${buildPackages.stdenv.cc.targetPrefix}gcc \ - ${makeTarget} - ) - ''; - installPhase = '' - cp .config $out - ''; - }; - - buildLinux = attrs: callPackage ../os-specific/linux/kernel/generic.nix attrs; - - cryptodev = linuxPackages_4_9.cryptodev; + cryptodev = linuxKernel.packages.linux_4_9.cryptodev; dpdk = callPackage ../os-specific/linux/dpdk { kernel = null; # dpdk modules are in linuxPackages.dpdk.kmod diff --git a/pkgs/top-level/linux-kernels.nix b/pkgs/top-level/linux-kernels.nix new file mode 100644 index 000000000000..86d451865957 --- /dev/null +++ b/pkgs/top-level/linux-kernels.nix @@ -0,0 +1,546 @@ +{ pkgs +, config +, buildPackages +, callPackage +, makeOverridable +, recurseIntoAttrs +, dontRecurseIntoAttrs +, stdenv +, stdenvNoCC +, newScope +, lib +}: + +# When adding a kernel: + # - Update packageAliases.linux_latest to the latest version + # - Update the rev in ../os-specific/linux/kernel/linux-libre.nix to the latest one. + # - Update linux_latest_hardened when the patches become available + +let + kernelPatches = callPackage ../os-specific/linux/kernel/patches.nix { }; + + deblobKernel = kernel: callPackage ../os-specific/linux/kernel/linux-libre.nix { + linux = kernel; + }; + + kernels = lib.makeExtensible (self: with self; + let callPackage = newScope self; in { + + linux_mptcp_95 = callPackage ../os-specific/linux/kernel/linux-mptcp-95.nix { + kernelPatches = linux_4_19.kernelPatches; + }; + + linux_rpi1 = callPackage ../os-specific/linux/kernel/linux-rpi.nix { + kernelPatches = with kernelPatches; [ + bridge_stp_helper + request_key_helper + ]; + rpiVersion = 1; + }; + + linux_rpi2 = callPackage ../os-specific/linux/kernel/linux-rpi.nix { + kernelPatches = with kernelPatches; [ + bridge_stp_helper + request_key_helper + ]; + rpiVersion = 2; + }; + + linux_rpi3 = callPackage ../os-specific/linux/kernel/linux-rpi.nix { + kernelPatches = with kernelPatches; [ + bridge_stp_helper + request_key_helper + ]; + rpiVersion = 3; + }; + + linux_rpi4 = callPackage ../os-specific/linux/kernel/linux-rpi.nix { + kernelPatches = with kernelPatches; [ + bridge_stp_helper + request_key_helper + ]; + rpiVersion = 4; + }; + + linux_4_4 = callPackage ../os-specific/linux/kernel/linux-4.4.nix { + kernelPatches = + [ kernelPatches.bridge_stp_helper + kernelPatches.request_key_helper_updated + kernelPatches.cpu-cgroup-v2."4.4" + kernelPatches.modinst_arg_list_too_long + ]; + }; + + linux_4_9 = callPackage ../os-specific/linux/kernel/linux-4.9.nix { + kernelPatches = + [ kernelPatches.bridge_stp_helper + kernelPatches.request_key_helper_updated + kernelPatches.cpu-cgroup-v2."4.9" + kernelPatches.modinst_arg_list_too_long + ]; + }; + + linux_4_14 = callPackage ../os-specific/linux/kernel/linux-4.14.nix { + kernelPatches = + [ kernelPatches.bridge_stp_helper + kernelPatches.request_key_helper + # See pkgs/os-specific/linux/kernel/cpu-cgroup-v2-patches/README.md + # when adding a new linux version + kernelPatches.cpu-cgroup-v2."4.11" + kernelPatches.modinst_arg_list_too_long + ]; + }; + + linux_4_19 = callPackage ../os-specific/linux/kernel/linux-4.19.nix { + kernelPatches = + [ kernelPatches.bridge_stp_helper + kernelPatches.request_key_helper + kernelPatches.modinst_arg_list_too_long + ]; + }; + + linux_5_4 = callPackage ../os-specific/linux/kernel/linux-5.4.nix { + kernelPatches = [ + kernelPatches.bridge_stp_helper + kernelPatches.request_key_helper + kernelPatches.rtl8761b_support + ]; + }; + + linux_rt_5_4 = callPackage ../os-specific/linux/kernel/linux-rt-5.4.nix { + kernelPatches = [ + kernelPatches.bridge_stp_helper + kernelPatches.request_key_helper + ]; + }; + + linux_5_10 = callPackage ../os-specific/linux/kernel/linux-5.10.nix { + kernelPatches = [ + kernelPatches.bridge_stp_helper + kernelPatches.request_key_helper + ]; + }; + + linux_rt_5_10 = callPackage ../os-specific/linux/kernel/linux-rt-5.10.nix { + kernelPatches = [ + kernelPatches.bridge_stp_helper + kernelPatches.request_key_helper + kernelPatches.export-rt-sched-migrate + ]; + }; + + linux_rt_5_11 = callPackage ../os-specific/linux/kernel/linux-rt-5.11.nix { + kernelPatches = [ + kernelPatches.bridge_stp_helper + kernelPatches.request_key_helper + kernelPatches.export-rt-sched-migrate + ]; + }; + + linux_5_12 = callPackage ../os-specific/linux/kernel/linux-5.12.nix { + kernelPatches = [ + kernelPatches.bridge_stp_helper + kernelPatches.request_key_helper + ]; + }; + + linux_5_13 = callPackage ../os-specific/linux/kernel/linux-5.13.nix { + kernelPatches = [ + kernelPatches.bridge_stp_helper + kernelPatches.request_key_helper + ]; + }; + + linux_testing = callPackage ../os-specific/linux/kernel/linux-testing.nix { + kernelPatches = [ + kernelPatches.bridge_stp_helper + kernelPatches.request_key_helper + ]; + }; + + linux_testing_bcachefs = callPackage ../os-specific/linux/kernel/linux-testing-bcachefs.nix rec { + kernel = linux_5_13; + kernelPatches = kernel.kernelPatches; + }; + + linux_hardkernel_4_14 = callPackage ../os-specific/linux/kernel/linux-hardkernel-4.14.nix { + kernelPatches = [ + kernelPatches.bridge_stp_helper + kernelPatches.request_key_helper + kernelPatches.modinst_arg_list_too_long + ]; + }; + + linux_zen = callPackage ../os-specific/linux/kernel/linux-zen.nix { + kernelPatches = [ + kernelPatches.bridge_stp_helper + kernelPatches.request_key_helper + ]; + }; + + linux_lqx = callPackage ../os-specific/linux/kernel/linux-lqx.nix { + kernelPatches = [ + kernelPatches.bridge_stp_helper + kernelPatches.request_key_helper + ]; + }; + + linux_xanmod = callPackage ../os-specific/linux/kernel/linux-xanmod.nix { + kernelPatches = [ + kernelPatches.bridge_stp_helper + kernelPatches.request_key_helper + ]; + }; + + linux_libre = deblobKernel packageAliases.linux_default.kernel; + + linux_latest_libre = deblobKernel packageAliases.linux_latest.kernel; + + }); + /* Linux kernel modules are inherently tied to a specific kernel. So + rather than provide specific instances of those packages for a + specific kernel, we have a function that builds those packages + for a specific kernel. This function can then be called for + whatever kernel you're using. */ + + packagesFor = kernel_: lib.makeExtensible (self: with self; + let callPackage = newScope self; in { + inherit callPackage; + kernel = kernel_; + inherit (kernel) stdenv; # in particular, use the same compiler by default + + # to help determine module compatibility + inherit (kernel) isZen isHardened isLibre; + inherit (kernel) kernelOlder kernelAtLeast; + # Obsolete aliases (these packages do not depend on the kernel). + inherit (pkgs) odp-dpdk pktgen; # added 2018-05 + + acpi_call = callPackage ../os-specific/linux/acpi-call {}; + + akvcam = callPackage ../os-specific/linux/akvcam { + inherit (pkgs.qt5) qmake; + }; + + amdgpu-pro = callPackage ../os-specific/linux/amdgpu-pro { }; + + anbox = callPackage ../os-specific/linux/anbox/kmod.nix { }; + + apfs = callPackage ../os-specific/linux/apfs { }; + + batman_adv = callPackage ../os-specific/linux/batman-adv {}; + + bcc = callPackage ../os-specific/linux/bcc { + python = pkgs.python3; + }; + + bpftrace = callPackage ../os-specific/linux/bpftrace { }; + + bbswitch = callPackage ../os-specific/linux/bbswitch {}; + + chipsec = callPackage ../tools/security/chipsec { + inherit kernel; + withDriver = true; + }; + + cryptodev = callPackage ../os-specific/linux/cryptodev { }; + + cpupower = callPackage ../os-specific/linux/cpupower { }; + + ddcci-driver = callPackage ../os-specific/linux/ddcci { }; + + digimend = callPackage ../os-specific/linux/digimend { }; + + dpdk-kmods = callPackage ../os-specific/linux/dpdk-kmods { }; + + exfat-nofuse = callPackage ../os-specific/linux/exfat { }; + + evdi = callPackage ../os-specific/linux/evdi { }; + + fwts-efi-runtime = callPackage ../os-specific/linux/fwts/module.nix { }; + + gcadapter-oc-kmod = callPackage ../os-specific/linux/gcadapter-oc-kmod { }; + hid-nintendo = callPackage ../os-specific/linux/hid-nintendo { }; + + hyperv-daemons = callPackage ../os-specific/linux/hyperv-daemons { }; + + e1000e = if lib.versionOlder kernel.version "4.10" then callPackage ../os-specific/linux/e1000e {} else null; + + intel-speed-select = if lib.versionAtLeast kernel.version "5.3" then callPackage ../os-specific/linux/intel-speed-select { } else null; + + ixgbevf = callPackage ../os-specific/linux/ixgbevf {}; + + it87 = callPackage ../os-specific/linux/it87 {}; + + asus-wmi-sensors = callPackage ../os-specific/linux/asus-wmi-sensors {}; + + ena = callPackage ../os-specific/linux/ena {}; + + v4l2loopback = callPackage ../os-specific/linux/v4l2loopback { }; + + lttng-modules = callPackage ../os-specific/linux/lttng-modules { }; + + broadcom_sta = callPackage ../os-specific/linux/broadcom-sta { }; + + tbs = callPackage ../os-specific/linux/tbs { }; + + mbp2018-bridge-drv = callPackage ../os-specific/linux/mbp-modules/mbp2018-bridge-drv { }; + + nvidiabl = callPackage ../os-specific/linux/nvidiabl { }; + + nvidiaPackages = dontRecurseIntoAttrs (callPackage ../os-specific/linux/nvidia-x11 { }); + + nvidia_x11_legacy340 = nvidiaPackages.legacy_340; + nvidia_x11_legacy390 = nvidiaPackages.legacy_390; + nvidia_x11_beta = nvidiaPackages.beta; + nvidia_x11_vulkan_beta = nvidiaPackages.vulkan_beta; + nvidia_x11 = nvidiaPackages.stable; + + openrazer = callPackage ../os-specific/linux/openrazer/driver.nix { }; + + ply = callPackage ../os-specific/linux/ply { }; + + r8125 = callPackage ../os-specific/linux/r8125 { }; + + r8168 = callPackage ../os-specific/linux/r8168 { }; + + rtl8188eus-aircrack = callPackage ../os-specific/linux/rtl8188eus-aircrack { }; + + rtl8192eu = callPackage ../os-specific/linux/rtl8192eu { }; + + rtl8723bs = callPackage ../os-specific/linux/rtl8723bs { }; + + rtl8812au = callPackage ../os-specific/linux/rtl8812au { }; + + rtl8814au = callPackage ../os-specific/linux/rtl8814au { }; + + rtl88xxau-aircrack = callPackage ../os-specific/linux/rtl88xxau-aircrack {}; + + rtl8821au = callPackage ../os-specific/linux/rtl8821au { }; + + rtl8821ce = callPackage ../os-specific/linux/rtl8821ce { }; + + rtl88x2bu = callPackage ../os-specific/linux/rtl88x2bu { }; + + rtl8821cu = callPackage ../os-specific/linux/rtl8821cu { }; + + rtw88 = callPackage ../os-specific/linux/rtw88 { }; + rtlwifi_new = rtw88; + + rtw89 = callPackage ../os-specific/linux/rtw89 { }; + + openafs_1_8 = callPackage ../servers/openafs/1.8/module.nix { }; + openafs_1_9 = callPackage ../servers/openafs/1.9/module.nix { }; + # Current stable release; don't backport release updates! + openafs = openafs_1_8; + + facetimehd = callPackage ../os-specific/linux/facetimehd { }; + + tuxedo-keyboard = if lib.versionAtLeast kernel.version "4.14" then callPackage ../os-specific/linux/tuxedo-keyboard { } else null; + + jool = callPackage ../os-specific/linux/jool { }; + + kvmfr = callPackage ../os-specific/linux/kvmfr { }; + + mba6x_bl = callPackage ../os-specific/linux/mba6x_bl { }; + + mwprocapture = callPackage ../os-specific/linux/mwprocapture { }; + + mxu11x0 = callPackage ../os-specific/linux/mxu11x0 { }; + + # compiles but has to be integrated into the kernel somehow + # Let's have it uncommented and finish it.. + ndiswrapper = callPackage ../os-specific/linux/ndiswrapper { }; + + netatop = callPackage ../os-specific/linux/netatop { }; + + oci-seccomp-bpf-hook = if lib.versionAtLeast kernel.version "5.4" then callPackage ../os-specific/linux/oci-seccomp-bpf-hook { } else null; + + perf = if lib.versionAtLeast kernel.version "3.12" then callPackage ../os-specific/linux/kernel/perf.nix { } else null; + + phc-intel = if lib.versionAtLeast kernel.version "4.10" then callPackage ../os-specific/linux/phc-intel { } else null; + + # Disable for kernels 4.15 and above due to compatibility issues + prl-tools = if lib.versionOlder kernel.version "4.15" then callPackage ../os-specific/linux/prl-tools { } else null; + + sch_cake = callPackage ../os-specific/linux/sch_cake { }; + + isgx = callPackage ../os-specific/linux/isgx { }; + + sysdig = callPackage ../os-specific/linux/sysdig {}; + + systemtap = callPackage ../development/tools/profiling/systemtap { }; + + system76 = callPackage ../os-specific/linux/system76 { }; + + system76-acpi = callPackage ../os-specific/linux/system76-acpi { }; + + system76-power = callPackage ../os-specific/linux/system76-power { }; + + system76-io = callPackage ../os-specific/linux/system76-io { }; + + tmon = callPackage ../os-specific/linux/tmon { }; + + tp_smapi = callPackage ../os-specific/linux/tp_smapi { }; + + turbostat = callPackage ../os-specific/linux/turbostat { }; + + usbip = callPackage ../os-specific/linux/usbip { }; + + v86d = callPackage ../os-specific/linux/v86d { }; + + veikk-linux-driver = callPackage ../os-specific/linux/veikk-linux-driver { }; + vendor-reset = callPackage ../os-specific/linux/vendor-reset { }; + + vhba = callPackage ../misc/emulators/cdemu/vhba.nix { }; + + virtualbox = callPackage ../os-specific/linux/virtualbox { + virtualbox = pkgs.virtualboxHardened; + }; + + virtualboxGuestAdditions = callPackage ../applications/virtualization/virtualbox/guest-additions { + virtualbox = pkgs.virtualboxHardened; + }; + + wireguard = if lib.versionOlder kernel.version "5.6" then callPackage ../os-specific/linux/wireguard { } else null; + + x86_energy_perf_policy = callPackage ../os-specific/linux/x86_energy_perf_policy { }; + + xmm7360-pci = callPackage ../os-specific/linux/xmm7360-pci { }; + + xpadneo = callPackage ../os-specific/linux/xpadneo { }; + + zenpower = callPackage ../os-specific/linux/zenpower { }; + + inherit (callPackage ../os-specific/linux/zfs { + configFile = "kernel"; + inherit pkgs kernel; + }) zfsStable zfsUnstable; + zfs = zfsStable; + + can-isotp = callPackage ../os-specific/linux/can-isotp { }; + + } // lib.optionalAttrs (config.allowAliases or false) { + ati_drivers_x11 = throw "ati drivers are no longer supported by any kernel >=4.1"; # added 2021-05-18; + }); + + # Hardened Linux + hardenedPackagesFor = kernel': overrides: + let kernel = kernel'.override overrides; + in packagesFor (kernel.override { + structuredExtraConfig = import ../os-specific/linux/kernel/hardened/config.nix { + inherit lib; + inherit (kernel) version; + }; + kernelPatches = kernel.kernelPatches ++ [ + kernelPatches.hardened.${kernel.meta.branch} + ]; + modDirVersionArg = kernel.modDirVersion + (kernelPatches.hardened.${kernel.meta.branch}).extra; + isHardened = true; + }); + + vanillaPackages = { + # recurse to build modules for the kernels + linux_4_4 = recurseIntoAttrs (packagesFor kernels.linux_4_4); + linux_4_9 = recurseIntoAttrs (packagesFor kernels.linux_4_9); + linux_4_14 = recurseIntoAttrs (packagesFor kernels.linux_4_14); + linux_4_19 = recurseIntoAttrs (packagesFor kernels.linux_4_19); + linux_5_4 = recurseIntoAttrs (packagesFor kernels.linux_5_4); + linux_5_10 = recurseIntoAttrs (packagesFor kernels.linux_5_10); + linux_5_12 = recurseIntoAttrs (packagesFor kernels.linux_5_12); + linux_5_13 = recurseIntoAttrs (packagesFor kernels.linux_5_13); + }; + + rtPackages = { + # realtime kernel packages + linux_rt_5_4 = packagesFor kernels.linux_rt_5_4; + linux_rt_5_10 = packagesFor kernels.linux_rt_5_10; + linux_rt_5_11 = packagesFor kernels.linux_rt_5_11; + }; + + rpiPackages = { + linux_rpi1 = packagesFor kernels.linux_rpi1; + linux_rpi2 = packagesFor kernels.linux_rpi2; + linux_rpi3 = packagesFor kernels.linux_rpi3; + linux_rpi4 = packagesFor kernels.linux_rpi4; + }; + + packages = vanillaPackages // rtPackages // rpiPackages // { + linux_mptcp_95 = packagesFor kernels.linux_mptcp_95; + + # Intentionally lacks recurseIntoAttrs, as -rc kernels will quite likely break out-of-tree modules and cause failed Hydra builds. + linux_testing = packagesFor kernels.linux_testing; + linux_testing_bcachefs = recurseIntoAttrs (packagesFor kernels.linux_testing_bcachefs); + + linux_hardened = recurseIntoAttrs (hardenedPackagesFor packageAliases.linux_default.kernel { }); + # Note: We use an explicit version instead of linux_latest since the hardened patches + # can lag behind and we don't want to delay updates. + linux_latest_hardened = recurseIntoAttrs (hardenedPackagesFor kernels.linux_5_12 { }); + + linux_zen = recurseIntoAttrs (packagesFor kernels.linux_zen); + linux_lqx = recurseIntoAttrs (packagesFor kernels.linux_lqx); + linux_xanmod = recurseIntoAttrs (packagesFor kernels.linux_xanmod); + + hardkernel_4_14 = recurseIntoAttrs (packagesFor kernels.linux_hardkernel_4_14); + + linux_libre = recurseIntoAttrs (packagesFor kernels.linux_libre); + + linux_latest_libre = recurseIntoAttrs (packagesFor kernels.linux_latest_libre); + }; + + packageAliases = { + linux_default = packages.linux_5_10; + # Update this when adding the newest kernel major version! + linux_latest = packages.linux_5_13; + linux_mptcp = packages.linux_mptcp_95; + linux_rt_default = packages.linux_rt_5_4; + linux_rt_latest = packages.linux_rt_5_11; + linux_hardkernel_latest = packages.hardkernel_4_14; + }; + + manualConfig = makeOverridable (callPackage ../os-specific/linux/kernel/manual-config.nix {}); + +in + +{ + packages = recurseIntoAttrs packages; + kernels = recurseIntoAttrs kernels; + inherit packageAliases; + inherit vanillaPackages rtPackages rpiPackages; + inherit kernelPatches packagesFor hardenedPackagesFor; + + customPackage = { version, src, configfile, allowImportFromDerivation ? true }: + recurseIntoAttrs (packagesFor (manualConfig { + inherit version src configfile lib stdenv allowImportFromDerivation; + })); + + inherit manualConfig; + + # Derive one of the default .config files + linuxConfig = { + src, + version ? (builtins.parseDrvName src.name).version, + makeTarget ? "defconfig", + name ? "kernel.config", + }: stdenvNoCC.mkDerivation { + inherit name src; + depsBuildBuild = [ buildPackages.stdenv.cc ] + ++ lib.optionals (lib.versionAtLeast version "4.16") [ buildPackages.bison buildPackages.flex ]; + postPatch = '' + patchShebangs scripts/ + ''; + buildPhase = '' + set -x + make \ + ARCH=${stdenv.hostPlatform.linuxArch} \ + HOSTCC=${buildPackages.stdenv.cc.targetPrefix}gcc \ + ${makeTarget} + ''; + installPhase = '' + cp .config $out + ''; + }; + + buildLinux = attrs: callPackage ../os-specific/linux/kernel/generic.nix attrs; + +} +