{ pkgs, lib, fetchurl, buildLinux, linuxPackagesFor, repos, }: let inherit (builtins) elem; inherit (lib) recurseIntoAttrs types versions; linuxPackage = { url ? "mirror://kernel/linux/kernel/v${versions.major version}.x/linux-${version}.tar.xz", sha256 ? null, src ? (fetchurl { inherit url sha256; }), version, modDirVersion ? (versions.pad 3 version), kernelPatches ? [ ], ... }@args: let inherit (builtins) removeAttrs; args' = { inherit src version modDirVersion kernelPatches ; } // removeAttrs args [ "url" "sha256" ]; linuxPackage = buildLinux args'; linuxPackages' = recurseIntoAttrs (linuxPackagesFor linuxPackage); in linuxPackages'; surfacePatches = { patchSrc, version, patchFn, }: pkgs.callPackage patchFn { inherit (lib) kernel; inherit version patchSrc; }; versionsOf = version: # Provides a list of versions that can be used as an enum option for this full version: [ version (versions.majorMinor version) ]; versionsOfEnum = version: # Provide an enum option for versions of this kernel: types.enum (versionsOf version); isVersionOf = kernelVersion: version: # Test if the provided version is considered one of the list of versions from above: elem kernelVersion (versionsOf version); in { inherit linuxPackage repos surfacePatches versionsOf isVersionOf versionsOfEnum ; }