From a0726ea66d1857eb2e1c9d7dfd2f10d30ac64706 Mon Sep 17 00:00:00 2001 From: seth Date: Sun, 5 Jan 2025 23:24:04 -0500 Subject: treewide: back to flake parts (#539) * treewide: back to flake parts * treewide: drop extra docs these are kind pointless --- modules/flake/default.nix | 3 +++ modules/flake/terranix.nix | 59 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 modules/flake/default.nix create mode 100644 modules/flake/terranix.nix (limited to 'modules/flake') 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} "$@" + ''; + }; + }; + }; +} -- cgit v1.2.3