42 lines
1.4 KiB
Nix
42 lines
1.4 KiB
Nix
{
|
|
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 with ${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;
|
|
};
|
|
}
|