_inputs: _final: prev: let # TODO: Remove # listToAttrsByField = # field: list: # builtins.listToAttrs ( # map (v: { # name = v.${field}; # value = v; # }) list # ); listToAttrsByPnameOrName = list: builtins.listToAttrs ( map (v: { name = v."pname" or v."name"; value = v; }) list ); lib = prev.lib; # packagesDirectory = lib.filesystem.listFilesRecursive ../pkgs; # [ package1/package.nix package2/package.nix package2/hello.sh ] packages = lib.pipe (lib.filesystem.listFilesRecursive ../pkgs) [ # Get only files called package.nix # [ package1/package.nix package2/package.nix ] (builtins.filter (name: lib.hasSuffix "package.nix" name)) # Apply callPackage to create a derivation # Must use final.callPackage to avoid infinite recursion # [ package1.drv package2.drv ] (builtins.map (name: prev.callPackage name { })) # Convert the list to an attrset # { package1 = package1.drv, package2 = package2.drv } listToAttrsByPnameOrName ]; in { nmasur = packages; }