feat(generator): add Mustache

This commit is contained in:
asimon 2026-01-25 12:10:27 +01:00
parent 7e3efd400c
commit 26e79ede19
6 changed files with 28 additions and 1 deletions

View file

@ -55,6 +55,7 @@ use the `devshellModule` for easy integration, see the docs for more.
- **`derivation`**: Use existing Nix derivations as file content
- **`gomplate`**: Advanced Go template rendering via gomplate
- **`jinja`**: Python Jinja2 template rendering
- **`mustache`**: Mustache template rendering
## Docs

View file

@ -21,6 +21,7 @@ Soonix helps you:
- **derivation**: Use existing Nix derivations as file content
- **gomplate**: Advanced Go template rendering via gomplate
- **jinja**: Python Jinja2 template rendering
- **mustache**: Mustache template rendering
### Automatic File Management

View file

@ -100,6 +100,21 @@
} ''
python ${renderScript} > $out
'';
mustache = {
name,
opts,
data,
}: let
inherit (opts) template;
mustache = opts.mustache or pkgs.mustache-go;
dataJson = writeText "template-data.json" (builtins.toJSON data);
in
runCommand name {
buildInputs = [mustache];
} ''
mustache ${dataJson} ${template} > $out
'';
};
buildAllFiles = files:

View file

@ -30,7 +30,7 @@ in {
};
generator = mkOption {
type = types.enum ["nix" "string" "derivation" "gomplate" "jinja" "template"];
type = types.enum ["nix" "string" "derivation" "gomplate" "jinja" "mustache" "template"];
description = ''
Which engine to use for content generation.
'';

1
tests/fixtures/mustache_template vendored Normal file
View file

@ -0,0 +1 @@
Hello {{hello}}

View file

@ -30,6 +30,12 @@
data.hello = "world";
opts.template = ./fixtures/jinja_template;
};
mustache = {
output = "mustache";
generator = "mustache";
data.hello = "world";
opts.template = ./fixtures/mustache_template;
};
};
in {
suites."Soonix Tests" = {
@ -53,6 +59,9 @@ in {
assert "-f ${finalFiles}/jinja" "should exist"
assert_file_contains ${finalFiles}/jinja "Hello world"
assert "-f ${finalFiles}/mustache" "should exist"
assert_file_contains ${finalFiles}/mustache "Hello world"
'';
}
{