{ description = "Hello World flake templates for various languages and build systems"; outputs = { self, ... }: let aliases = { bash = "bash_script_nixpkgs"; fish = "fish_script_nixpkgs"; python = "python_pyproject_nixpkgs_basic"; }; # Get all project directories subdirs = dir: let sub = __readDir dir; in builtins.filter (d: sub.${d} == "directory") (builtins.attrNames sub); concatMapAttrs = func: attr: builtins.foldl' (x: y: x // y) {} (builtins.map func attr); flakeSubdirs = dir: builtins.concatMap (sub: if builtins.pathExists /${dir}/${sub}/flake.nix then [ [ sub ] ] else builtins.map (l: [ sub ] ++ l) (flakeSubdirs /${dir}/${sub})) (subdirs dir); in { templates = concatMapAttrs (path: { ${builtins.concatStringsSep "_" path} = { description = "${builtins.head path} template - ${builtins.concatStringsSep ", " (builtins.tail path)}"; path = builtins.filterSource (path: type: builtins.baseNameOf path != "flake.lock") (builtins.foldl' (dir: sub: /${dir}/${sub}) ./. path); }; }) (flakeSubdirs ./.) // builtins.mapAttrs (lang: def: self.templates.${def} // { description = "${lang} template"; }) aliases; }; }