]> Untitled Git - sneer-archive-site.git/blob - template.nix
On branch main
[sneer-archive-site.git] / template.nix
1 { lib, pkgs, ... }:
2
3 let
4   templateLib = lib // {
5     map = f: list: builtins.concatStringsSep "" (builtins.map f list);
6   };
7 in {
8   mkTemplates = name: templatesDir: templates:
9     let
10       templatesDrv = pkgs.runCommand "${name}-templates" { } ''
11         shopt -s globstar
12         for t in ${templatesDir}/**/*; do
13             subdir=$(dirname "$t" | cut -d'/' -f5-)
14             name=$(basename "$t")
15             echo $subdir
16
17             mkdir -p "$out/$subdir"
18             [ -f "$t" ] &&
19             echo "{lib, ...}@args: '''" | cat - "$t" > "$out/$subdir/$name.nix" &&
20             echo "'''" >> "$out/$subdir/$name.nix"
21         done
22       '';
23       templateCache = builtins.listToAttrs (builtins.map (t: {
24         name = t;
25         value = (import "${templatesDrv}/${t}.nix");
26       }) templates);
27     in template: args:
28     ((builtins.getAttr template templateCache)
29       ({ lib = templateLib; } // args));
30 }