51 lines
1.4 KiB
Nix
51 lines
1.4 KiB
Nix
|
# Modified copy of github:NixOS/nixpkgs pkgs/top-level/by-name-overlay.nix
|
||
|
# as of commit c0d0be00d4ecc4b51d2d6948e37466194c1e6c51
|
||
|
|
||
|
# This file turns the pkgs/by-name directory into an overlay that adds all the defined packages.
|
||
|
# No validity checks are done here.
|
||
|
|
||
|
# Type: Path -> Overlay
|
||
|
baseDirectory:
|
||
|
let
|
||
|
lib = (import ../../outputs.nix {}).lib;
|
||
|
|
||
|
inherit (builtins)
|
||
|
readDir
|
||
|
;
|
||
|
|
||
|
inherit (lib.attrsets)
|
||
|
mapAttrs
|
||
|
mapAttrsToList
|
||
|
mergeAttrsList
|
||
|
;
|
||
|
|
||
|
# Package files for a single shard
|
||
|
# Type: String -> String -> String -> AttrsOf Path
|
||
|
namesForShard = nixFilename: shard: type:
|
||
|
if type != "directory" then
|
||
|
# Ignore all non-directories.
|
||
|
{ }
|
||
|
else
|
||
|
mapAttrs
|
||
|
(name: _: baseDirectory + "/${shard}/${name}/${nixFilename}")
|
||
|
(readDir (baseDirectory + "/${shard}"));
|
||
|
|
||
|
# The attribute set mapping names to the package files defining them
|
||
|
# Type: String -> AttrsOf Path
|
||
|
packageFiles = nixFilename: lib.pipe baseDirectory [
|
||
|
readDir
|
||
|
(mapAttrsToList (namesForShard nixFilename))
|
||
|
mergeAttrsList
|
||
|
# Filter out paths that don't have a ${nixFilename} file
|
||
|
(lib.filterAttrs (_: lib.pathExists))
|
||
|
];
|
||
|
in
|
||
|
self: super:
|
||
|
mapAttrs (name: file:
|
||
|
self.callPackage file { inherit self super; package = super.${name}; }
|
||
|
) (packageFiles "override.nix")
|
||
|
// mapAttrs (name: file:
|
||
|
self.callPackage file { }
|
||
|
) (packageFiles "package.nix")
|
||
|
|