diff --git a/README.md b/README.md index d46cb7c..68c2747 100644 --- a/README.md +++ b/README.md @@ -53,8 +53,9 @@ use the `devshellModule` for easy integration, see the docs for more. - **`nix`**: Convert Nix data to JSON, YAML, TOML, INI, XML formats - **`string`**: Output raw string content with optional executable permissions - **`derivation`**: Use existing Nix derivations as file content -- **`gotmpl`**: Advanced Go template rendering via gomplate +- **`gomplate`**: Advanced Go template rendering via gomplate - **`jinja`**: Python Jinja2 template rendering +- **`mustache`**: Mustache template rendering ## Docs diff --git a/docs/index.md b/docs/index.md index b457a50..7576c2f 100644 --- a/docs/index.md +++ b/docs/index.md @@ -19,8 +19,9 @@ Soonix helps you: - **nix**: Convert Nix data to JSON, YAML, TOML, INI, XML formats - **string**: Output raw string content with optional executable permissions - **derivation**: Use existing Nix derivations as file content -- **gotmpl**: Advanced Go template rendering via gomplate +- **gomplate**: Advanced Go template rendering via gomplate - **jinja**: Python Jinja2 template rendering +- **mustache**: Mustache template rendering ### Automatic File Management @@ -63,7 +64,7 @@ Automatically manage .gitignore entries for generated files to keep your reposit dockerfile = { output = "Dockerfile"; - generator = "gotmpl"; + generator = "gomplate"; data = { baseImage = "node:18-alpine"; port = 3000; diff --git a/docs/usage.md b/docs/usage.md index 2153ab2..7a02190 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -100,7 +100,7 @@ Use Go templates for more complex file generation: hooks = { dockerfile = { output = "Dockerfile"; - generator = "gotmpl"; + generator = "gomplate"; data = { baseImage = "node:18-alpine"; workdir = "/app"; @@ -331,7 +331,7 @@ in { hooks = { kubernetes-manifest = { output = "k8s/deployment.yaml"; - generator = "gotmpl"; + generator = "gomplate"; data = { app = { name = "my-app"; diff --git a/lib/lib.nix b/lib/lib.nix index cf82725..3e6005d 100644 --- a/lib/lib.nix +++ b/lib/lib.nix @@ -50,7 +50,7 @@ # only a passthru derivation = {data, ...}: data; - gotmpl = { + gomplate = { name, opts, data, @@ -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: diff --git a/lib/module.nix b/lib/module.nix index 4546319..98400e3 100644 --- a/lib/module.nix +++ b/lib/module.nix @@ -30,7 +30,7 @@ in { }; generator = mkOption { - type = types.enum ["nix" "string" "derivation" "gotmpl" "jinja" "template"]; + type = types.enum ["nix" "string" "derivation" "gomplate" "jinja" "mustache" "template"]; description = '' Which engine to use for content generation. ''; diff --git a/tests/fixtures/gotmpl_template b/tests/fixtures/gomplate_template similarity index 100% rename from tests/fixtures/gotmpl_template rename to tests/fixtures/gomplate_template diff --git a/tests/fixtures/mustache_template b/tests/fixtures/mustache_template new file mode 100644 index 0000000..a4d8ee1 --- /dev/null +++ b/tests/fixtures/mustache_template @@ -0,0 +1 @@ +Hello {{hello}} diff --git a/tests/soonix_test.nix b/tests/soonix_test.nix index e59498e..0cfa1b8 100644 --- a/tests/soonix_test.nix +++ b/tests/soonix_test.nix @@ -19,10 +19,10 @@ }; }; gomplate = { - output = "gotmpl"; - generator = "gotmpl"; + output = "gomplate"; + generator = "gomplate"; data.hello = "world"; - opts.template = ./fixtures/gotmpl_template; + opts.template = ./fixtures/gomplate_template; }; jinja = { output = "jinja"; @@ -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" = { @@ -48,11 +54,14 @@ in { assert "-f ${finalFiles}/out/test.json" "should exist" assert_file_contains ${finalFiles}/out/test.json "soonix-test" - assert "-f ${finalFiles}/gotmpl" "should exist" - assert_file_contains ${finalFiles}/gotmpl "Hello world" + assert "-f ${finalFiles}/gomplate" "should exist" + assert_file_contains ${finalFiles}/gomplate "Hello world" 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" ''; } {