mirror of
				https://github.com/NixOS/nixos-hardware.git
				synced 2025-11-04 09:17:14 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			85 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
{
 | 
						|
  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
 | 
						|
    ;
 | 
						|
}
 |