diff --git a/flake.lock b/flake.lock index d37e89a..e18698e 100644 --- a/flake.lock +++ b/flake.lock @@ -16,24 +16,6 @@ "type": "github" } }, - "flake-utils": { - "inputs": { - "systems": "systems" - }, - "locked": { - "lastModified": 1685518550, - "narHash": "sha256-o2d0KcvaXzTrPRIo0kOLV0/QXHhDQ5DTi+OxcjO8xqY=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "a1720a10a6cfe8234c0e93907ffe81be440f4cef", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "flake-utils", - "type": "github" - } - }, "nixpkgs": { "locked": { "lastModified": 1686488075, @@ -52,11 +34,11 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1680945546, - "narHash": "sha256-8FuaH5t/aVi/pR1XxnF0qi4WwMYC+YxlfdsA0V+TEuQ=", + "lastModified": 1688590700, + "narHash": "sha256-ZF055rIUP89cVwiLpG5xkJzx00gEuuGFF60Bs/LM3wc=", "owner": "nixos", "repo": "nixpkgs", - "rev": "d9f759f2ea8d265d974a6e1259bd510ac5844c5d", + "rev": "f292b4964cb71f9dfbbd30dc9f511d6165cd109b", "type": "github" }, "original": { @@ -69,8 +51,8 @@ "root": { "inputs": { "flake-compat": "flake-compat", - "flake-utils": "flake-utils", "nixpkgs": "nixpkgs", + "systems": "systems", "treefmt": "treefmt" } }, @@ -84,9 +66,8 @@ "type": "github" }, "original": { - "owner": "nix-systems", - "repo": "default", - "type": "github" + "id": "systems", + "type": "indirect" } }, "treefmt": { diff --git a/flake.nix b/flake.nix index 21a91b8..5d1669d 100644 --- a/flake.nix +++ b/flake.nix @@ -4,56 +4,52 @@ inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; treefmt.url = "github:numtide/treefmt-nix"; - flake-utils.url = "github:numtide/flake-utils"; flake-compat = { url = "github:edolstra/flake-compat"; flake = false; }; }; - outputs = inputs @ { self, ... }: - (inputs.flake-utils.lib.eachDefaultSystem (system: - let - pkgs = import inputs.nixpkgs { - inherit system; - overlays = [ self.overlays.default ]; - config.allowUnsupportedSystem = true; - }; - - inherit (pkgs) lib; - - kubenix = { - lib = import ./lib { inherit lib pkgs; }; - evalModules = self.evalModules.${system}; - modules = self.nixosModules.kubenix; - }; - - # evalModules with same interface as lib.evalModules and kubenix as - # special argument - evalModules = attrs @ { module ? null, modules ? [ module ], ... }: - let - lib' = lib.extend (lib: _self: import ./lib/upstreamables.nix { inherit lib pkgs; }); - attrs' = builtins.removeAttrs attrs [ "module" ]; - in - lib'.evalModules (lib.recursiveUpdate - { - modules = modules ++ [{ - config._module.args = { - inherit pkgs; - name = "default"; - }; - }]; - specialArgs = { - inherit kubenix; + outputs = inputs@{ self, systems, ... }: + let + eachSystem = f: inputs.nixpkgs.lib.genAttrs (import systems) + (system: f inputs.nixpkgs.legacyPackages.${system}); + in + { + # evalModules with same interface as lib.evalModules and kubenix as special argument + evalModules = eachSystem (pkgs: + attrs @ { module ? null, modules ? [ module ], ... }: + let + lib' = pkgs.lib.extend (lib: _self: import ./lib/upstreamables.nix { inherit lib pkgs; }); + attrs' = builtins.removeAttrs attrs [ "module" ]; + in + lib'.evalModules (pkgs.lib.recursiveUpdate + { + modules = modules ++ [{ + config._module.args = { inherit pkgs; + name = "default"; + }; + }]; + specialArgs = { + pkgs = import inputs.nixpkgs { + inherit (pkgs) system; + overlays = [ self.overlays.default ]; + config.allowUnsupportedSystem = true; }; - } - attrs'); - in - { - inherit evalModules pkgs; - devShells.default = pkgs.mkShell { + kubenix = { + lib = import ./lib { inherit pkgs; inherit (pkgs) lib; }; + evalModules = self.evalModules.${pkgs.system}; + modules = self.nixosModules.kubenix; + }; + }; + } + attrs') + ); + + devShells = eachSystem (pkgs: { + default = pkgs.mkShell { buildInputs = with pkgs; [ dive fd @@ -73,107 +69,108 @@ export NODE_PATH="${pkgs.nodePackages.prettier-plugin-toml}/lib/node_modules:$NODE_PATH" ''; }; + }); - formatter = (inputs.treefmt.lib.evalModule pkgs { - projectRootFile = "flake.nix"; - programs = { - nixpkgs-fmt.enable = true; - black.enable = true; - prettier.enable = true; - shfmt.enable = true; - }; - settings.global.excludes = [ - "docs/themes/*" - "docs/layouts/*" - "modules/generated/*" - ]; - }).config.build.wrapper; + formatter = eachSystem (pkgs: (inputs.treefmt.lib.evalModule pkgs { + projectRootFile = "flake.nix"; + programs = { + nixpkgs-fmt.enable = true; + black.enable = true; + prettier.enable = true; + shfmt.enable = true; + }; + settings.global.excludes = [ + "docs/themes/*" + "docs/layouts/*" + "modules/generated/*" + ]; + }).config.build.wrapper); - apps = { - docs = { - type = "app"; - program = (pkgs.writeShellScript "gen-docs" '' - set -eo pipefail + apps = eachSystem (pkgs: { + docs = { + type = "app"; + program = (pkgs.writeShellScript "gen-docs" '' + set -eo pipefail - # generate json object of module options - nix build '.#docs' -o ./docs/data/options.json + # generate json object of module options + nix build '.#docs' -o ./docs/data/options.json - # remove all old module pages - rm ./docs/content/modules/[!_]?*.md || true + # remove all old module pages + rm ./docs/content/modules/[!_]?*.md || true - # create a page for each module in hugo - for mod in ${builtins.toString (builtins.attrNames self.nixosModules.kubenix)}; do - [[ $mod == "base" ]] && mod=kubenix - [[ $mod == "k8s" ]] && mod=kubernetes - [[ $mod == "submodule"* ]] && continue - echo "  {{< options >}}" > ./docs/content/modules/$mod.md - done + # create a page for each module in hugo + for mod in ${builtins.toString (builtins.attrNames self.nixosModules.kubenix)}; do + [[ $mod == "base" ]] && mod=kubenix + [[ $mod == "k8s" ]] && mod=kubernetes + [[ $mod == "submodule"* ]] && continue + echo "  {{< options >}}" > ./docs/content/modules/$mod.md + done - # build the site - cd docs && ${pkgs.hugo}/bin/hugo "$@" - '').outPath; - }; - - generate = { - type = "app"; - program = (pkgs.writeShellScript "gen-modules" '' - set -eo pipefail - dir=./modules/generated - - rm -rf $dir - mkdir $dir - nix build '.#generate-k8s' - cp ./result/* $dir/ - - rm result - '').outPath; - }; + # build the site + cd docs && ${pkgs.hugo}/bin/hugo "$@" + '').outPath; }; - packages = { - default = pkgs.callPackage ./pkgs/kubenix.nix { - inherit (self.packages.${system}); - evalModules = self.evalModules.${system}; - }; - docs = import ./docs { - inherit pkgs; - options = (self.evalModules.${system} { - modules = builtins.attrValues (builtins.removeAttrs - # the submodules module currently doesn't evaluate: - # error: No module found ‹name›/latest - # not sure how important that documentation is a this time - self.nixosModules.kubenix [ "submodule" "submodules" ]); - }).options; - }; - } - // pkgs.lib.attrsets.mapAttrs' (name: value: pkgs.lib.attrsets.nameValuePair "generate-${name}" value) - (builtins.removeAttrs (pkgs.callPackage ./pkgs/generators { }) [ "override" "overrideDerivation" ]); + generate = { + type = "app"; + program = (pkgs.writeShellScript "gen-modules" '' + set -eo pipefail + dir=./modules/generated - checks = - let - wasSuccess = suite: - if suite.success - then pkgs.runCommandNoCC "testing-suite-config-assertions-for-${suite.name}-succeeded" { } "echo success > $out" - else pkgs.runCommandNoCC "testing-suite-config-assertions-for-${suite.name}-failed" { } "exit 1"; - examples = import ./docs/content/examples; - mkK8STests = attrs: - (import ./tests { inherit evalModules; }) - ({ registry = "docker.io/gatehub"; } // attrs); - in - { - # TODO: access "success" derivation with nice testing utils for nice output - testing = wasSuccess examples.testing.config.testing; - } - // builtins.listToAttrs (builtins.map - (v: { - name = "test-k8s-${builtins.replaceStrings ["."] ["_"] v}"; - value = wasSuccess (mkK8STests { k8sVersion = v; }); - }) - (import ./versions.nix).versions); + rm -rf $dir + mkdir $dir + nix build '.#generate-k8s' + cp ./result/* $dir/ + + rm result + '').outPath; + }; + }); + + packages = eachSystem (pkgs: { + default = pkgs.callPackage ./pkgs/kubenix.nix { + inherit (self.packages.${system}); + evalModules = self.evalModules.${pkgs.system}; + }; + docs = import ./docs { + inherit pkgs; + options = (self.evalModules.${pkgs.system} { + modules = builtins.attrValues (builtins.removeAttrs + # the submodules module currently doesn't evaluate: + # error: No module found ‹name›/latest + # not sure how important that documentation is a this time + self.nixosModules.kubenix [ "submodule" "submodules" ]); + }).options; + }; } - )) - // { + // pkgs.lib.attrsets.mapAttrs' (name: value: pkgs.lib.attrsets.nameValuePair "generate-${name}" value) + (builtins.removeAttrs (pkgs.callPackage ./pkgs/generators { }) [ "override" "overrideDerivation" ]) + ); + + checks = eachSystem (pkgs: + let + wasSuccess = suite: + if suite.success + then pkgs.runCommandNoCC "testing-suite-config-assertions-for-${suite.name}-succeeded" { } "echo success > $out" + else pkgs.runCommandNoCC "testing-suite-config-assertions-for-${suite.name}-failed" { } "exit 1"; + examples = import ./docs/content/examples; + mkK8STests = attrs: + (import ./tests { evalModules = self.evalModules.${pkgs.system}; }) + ({ registry = "docker.io/gatehub"; } // attrs); + in + { + # TODO: access "success" derivation with nice testing utils for nice output + testing = wasSuccess examples.testing.config.testing; + } // builtins.listToAttrs (builtins.map + (v: { + name = "test-k8s-${builtins.replaceStrings ["."] ["_"] v}"; + value = wasSuccess (mkK8STests { k8sVersion = v; }); + }) + (import ./versions.nix).versions) + ); + nixosModules.kubenix = import ./modules; + overlays.default = _final: prev: { kubenix.evalModules = self.evalModules.${prev.system}; };