43 lines
921 B
Nix
43 lines
921 B
Nix
{
|
|
pkgs,
|
|
prev,
|
|
lib,
|
|
...
|
|
}:
|
|
let
|
|
dirs = path: lib.attrNames (lib.filterAttrs (_: t: t == "directory") (builtins.readDir path));
|
|
|
|
packagesFromTree =
|
|
base: callPackage:
|
|
lib.foldl' (
|
|
acc: shorthand:
|
|
let
|
|
shorthandDir = base + "/${shorthand}";
|
|
names = dirs shorthandDir;
|
|
|
|
addOne =
|
|
name:
|
|
let
|
|
pkgDir = shorthandDir + "/${name}";
|
|
in
|
|
if builtins.pathExists (pkgDir + "/default.nix") then
|
|
{ ${name} = callPackage pkgDir { }; }
|
|
else
|
|
{ };
|
|
in
|
|
acc // lib.foldl' (a: n: a // addOne n) { } names
|
|
) { } (dirs base);
|
|
|
|
byNamePkgs =
|
|
if builtins.pathExists ./by-name then packagesFromTree ./by-name pkgs.callPackage else { };
|
|
|
|
byCategoryPkgs = import ./by-category {
|
|
inherit
|
|
pkgs
|
|
prev
|
|
lib
|
|
packagesFromTree
|
|
;
|
|
};
|
|
in
|
|
byNamePkgs // byCategoryPkgs
|