{ inputs = { nixpkgs.url = "github:NixOS/nixpkgs"; }; outputs = { self, nixpkgs }: let system = "x86_64-linux"; lib = nixpkgs.lib; pkgsDir = ./pkgs; entries = if builtins.pathExists pkgsDir then builtins.readDir pkgsDir else []; # builtins.readDir returns a list of names; when pkgs are present as # committed directories use them directly. (If you use git submodules, # their contents are not available during flake evaluation unless # vendored.) pkgNames = entries; loadPkg = name: let path = pkgsDir + "/${name}"; flake = builtins.getFlake (toString path); in # since all are guaranteed identical shape: flake.packages.${system}.default; # build final package set packages = lib.listToAttrs (builtins.map (name: { inherit name; value = loadPkg name; }) pkgNames); in { packages.${system} = packages; extra = { pkgNames = pkgNames; }; overlays.default = final: prev: { myPkgs = packages; }; }; }