diff options
Diffstat (limited to 'modules/flake')
| -rw-r--r-- | modules/flake/default.nix | 3 | ||||
| -rw-r--r-- | modules/flake/terranix.nix | 59 |
2 files changed, 62 insertions, 0 deletions
diff --git a/modules/flake/default.nix b/modules/flake/default.nix new file mode 100644 index 0000000..2cb7409 --- /dev/null +++ b/modules/flake/default.nix @@ -0,0 +1,3 @@ +{ + terranix = ./terranix.nix; +} diff --git a/modules/flake/terranix.nix b/modules/flake/terranix.nix new file mode 100644 index 0000000..cbf57b9 --- /dev/null +++ b/modules/flake/terranix.nix @@ -0,0 +1,59 @@ +{ + config, + lib, + pkgs, + flake-parts-lib, + inputs, + ... +}: + +let + inherit (flake-parts-lib) mkSubmoduleOptions; + + namespace = "terranix"; + cfg = config.${namespace}; +in + +{ + options.terranix = mkSubmoduleOptions { + package = lib.mkOption { + type = lib.types.functionTo lib.types.package; + default = pkgs: pkgs.opentofu; + defaultText = lib.literalExpression "pkgs: pkgs.opentofu"; + apply = fn: fn pkgs; + description = "The Terraform-compatible implementation to use."; + example = lib.literalExpression "pkgs: pkgs.terraform"; + }; + + modules = lib.mkOption { + type = lib.types.listOf lib.types.deferredModule; + default = [ ]; + }; + }; + + config = { + perSystem = + { + lib, + pkgs, + system, + ... + }: + + let + terranixConfiguration = inputs.terranix.lib.terranixConfiguration { + inherit system; + inherit (cfg) modules; + }; + in + + { + apps.tf = { + program = pkgs.writeShellScriptBin "tf" '' + ln -sf ${terranixConfiguration} config.tf.json + exec ${lib.getExe cfg.package} "$@" + ''; + }; + }; + }; +} |
