From c82517fc12d949ea726da05da025b827c9a7be7a Mon Sep 17 00:00:00 2001 From: David Arnold Date: Sat, 9 Jul 2022 15:41:15 -0500 Subject: [PATCH 1/4] ref: reduce eval.nix contract - documentation contratcts can now bypass the eval.nix iface - enabled by:9bd5e7bb2540664fe1c728c85f80375fe0cbf9fa --- flake.nix | 16 ++++++++++++++-- src/nix/hive/eval.nix | 26 -------------------------- 2 files changed, 14 insertions(+), 28 deletions(-) diff --git a/flake.nix b/flake.nix index 0ab785f..37e00c6 100644 --- a/flake.nix +++ b/flake.nix @@ -33,12 +33,24 @@ # Full user manual manual = let + suppressModuleArgsDocs = { lib, ... }: { + options = { + _module.args = lib.mkOption { + internal = true; + }; + }; + }; colmena = self.packages.${system}.colmena; deploymentOptionsMd = (pkgs.nixosOptionsDoc { - options = evalNix.docs.deploymentOptions pkgs; + inherit (pkgs.lib.evalModules { + modules = [ colmenaOptions.deploymentOptions suppressModuleArgsDocs]; + specialArgs = { name = "nixos"; nodes = {}; }; + }) options; }).optionsCommonMark; metaOptionsMd = (pkgs.nixosOptionsDoc { - options = evalNix.docs.metaOptions pkgs; + inherit (pkgs.lib.evalModules { + modules = [ colmenaOptions.metaOptions suppressModuleArgsDocs]; + }) options; }).optionsCommonMark; in pkgs.callPackage ./manual { inherit colmena deploymentOptionsMd metaOptionsMd; diff --git a/src/nix/hive/eval.nix b/src/nix/hive/eval.nix index a0e489f..d859c79 100644 --- a/src/nix/hive/eval.nix +++ b/src/nix/hive/eval.nix @@ -195,14 +195,6 @@ let nodes = uncheckedNodes; }; - suppressModuleArgsDocs = { lib, ... }: { - options = { - _module.args = lib.mkOption { - internal = true; - }; - }; - }; - # Add required config Key here since we don't want to eval nixpkgs metaConfigKeys = [ "name" "description" @@ -221,22 +213,4 @@ in { meta = hive.meta; nixosModules = { inherit (colmenaOptions) deploymentOptions; }; - - docs = { - deploymentOptions = pkgs: let - eval = pkgs.lib.evalModules { - modules = [ colmenaOptions.deploymentOptions suppressModuleArgsDocs ]; - specialArgs = { - name = "nixos"; - nodes = {}; - }; - }; - in eval.options; - - metaOptions = pkgs: let - eval = pkgs.lib.evalModules { - modules = [ colmenaOptions.metaOptions suppressModuleArgsDocs ]; - }; - in eval.options; - }; } From 83a919bdb0f26a5df8abeb2abe583bce71f69aed Mon Sep 17 00:00:00 2001 From: David Arnold Date: Thu, 26 May 2022 17:23:39 -0500 Subject: [PATCH 2/4] ref: reduce eval.nix contract forther - module export contratcts can now bypass the eval.nix iface - enabled by:9bd5e7bb2540664fe1c728c85f80375fe0cbf9fa --- flake.nix | 9 ++++----- src/nix/hive/eval.nix | 2 -- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/flake.nix b/flake.nix index 37e00c6..fcd6054 100644 --- a/flake.nix +++ b/flake.nix @@ -17,10 +17,6 @@ supportedSystems = [ "x86_64-linux" "i686-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ]; colmenaOptions = import ./src/nix/hive/options.nix; colmenaModules = import ./src/nix/hive/modules.nix; - evalNix = import ./src/nix/hive/eval.nix { - hermetic = true; - inherit colmenaOptions colmenaModules; - }; in utils.lib.eachSystem supportedSystems (system: let pkgs = import nixpkgs { inherit system; @@ -86,7 +82,10 @@ overlay = final: prev: { colmena = final.callPackage ./package.nix { }; }; - inherit (evalNix) nixosModules; + nixosModules = { + inherit (colmenaOptions) deploymentOptions metaOptions; + inherit (colmenaModules) keyChownModule keyServiceModule; + }; }; nixConfig = { diff --git a/src/nix/hive/eval.nix b/src/nix/hive/eval.nix index d859c79..fd3e44c 100644 --- a/src/nix/hive/eval.nix +++ b/src/nix/hive/eval.nix @@ -211,6 +211,4 @@ in { metaConfig; meta = hive.meta; - - nixosModules = { inherit (colmenaOptions) deploymentOptions; }; } From e309b2d4b28e7e80202f9fa54eccf0da69660ff6 Mon Sep 17 00:00:00 2001 From: David Arnold Date: Thu, 26 May 2022 17:26:54 -0500 Subject: [PATCH 3/4] ref: reduce eval.nix contract even further - meta and evalAll contracts are found to be not consumed --- src/nix/hive/eval.nix | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/nix/hive/eval.nix b/src/nix/hive/eval.nix index fd3e44c..a5ff80c 100644 --- a/src/nix/hive/eval.nix +++ b/src/nix/hive/eval.nix @@ -183,7 +183,6 @@ let deploymentConfigSelected = names: listToAttrs (map (name: { inherit name; value = nodes.${name}.config.deployment; }) names); - evalAll = evalSelected nodeNames; evalSelected = names: let selected = lib.filterAttrs (name: _: elem name names) toplevel; in selected; @@ -205,10 +204,13 @@ let metaConfig = lib.filterAttrs (n: v: elem n metaConfigKeys) hive.meta; in { inherit - nodes toplevel - deploymentConfig deploymentConfigSelected - evalAll evalSelected evalSelectedDrvPaths introspect - metaConfig; - - meta = hive.meta; + deploymentConfig + deploymentConfigSelected + evalSelected + evalSelectedDrvPaths + introspect + metaConfig + nodes + toplevel + ; } From b3ca4b1c4da5feec6e1d3880ec735d093e9b9237 Mon Sep 17 00:00:00 2001 From: David Arnold Date: Thu, 26 May 2022 17:47:19 -0500 Subject: [PATCH 4/4] ref: transparent eval.nix contract - at least to my eyes, this code formatting gives a better view about the gist of the eval.nix interface --- src/nix/hive/eval.nix | 49 ++++++++++--------------------------------- 1 file changed, 11 insertions(+), 38 deletions(-) diff --git a/src/nix/hive/eval.nix b/src/nix/hive/eval.nix index a5ff80c..408b5c9 100644 --- a/src/nix/hive/eval.nix +++ b/src/nix/hive/eval.nix @@ -167,33 +167,6 @@ let value = evalNode name configs; }) nodeNames); - # Exported attributes - # - # Functions are intended to be called with `nix-instantiate --eval --json` - - nodes = listToAttrs (map (name: { - inherit name; - value = evalNode name (configsFor name); - }) nodeNames); - - toplevel = lib.mapAttrs (name: eval: eval.config.system.build.toplevel) nodes; - - deploymentConfig = lib.mapAttrs (name: eval: eval.config.deployment) nodes; - - deploymentConfigSelected = names: - listToAttrs (map (name: { inherit name; value = nodes.${name}.config.deployment; }) names); - - evalSelected = names: let - selected = lib.filterAttrs (name: _: elem name names) toplevel; - in selected; - evalSelectedDrvPaths = names: lib.mapAttrs (k: v: v.drvPath) (evalSelected names); - - introspect = function: function { - inherit lib; - pkgs = nixpkgs; - nodes = uncheckedNodes; - }; - # Add required config Key here since we don't want to eval nixpkgs metaConfigKeys = [ "name" "description" @@ -201,16 +174,16 @@ let "allowApplyAll" ]; +in rec { + # Exported attributes + # + # Functions are intended to be called with `nix-instantiate --eval --json` + nodes = listToAttrs (map (name: { inherit name; value = evalNode name (configsFor name); }) nodeNames); + toplevel = lib.mapAttrs (_: v: v.config.system.build.toplevel) nodes; + deploymentConfig = lib.mapAttrs (_: v: v.config.deployment) nodes; + deploymentConfigSelected = names: lib.filterAttrs (name: _: elem name names) deploymentConfig; + evalSelected = names: lib.filterAttrs (name: _: elem name names) toplevel; + evalSelectedDrvPaths = names: lib.mapAttrs (_: v: v.drvPath) (evalSelected names); metaConfig = lib.filterAttrs (n: v: elem n metaConfigKeys) hive.meta; -in { - inherit - deploymentConfig - deploymentConfigSelected - evalSelected - evalSelectedDrvPaths - introspect - metaConfig - nodes - toplevel - ; + introspect = f: f { inherit lib; pkgs = nixpkgs; nodes = uncheckedNodes; }; }