Merge pull request #89 from blaggacao/ref/reduce-eval-nix-interface

ref/reduce eval nix interface
This commit is contained in:
Zhaofeng Li 2022-07-13 08:45:43 +00:00 committed by GitHub
commit 07efd5818d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 29 additions and 71 deletions

View file

@ -17,10 +17,6 @@
supportedSystems = [ "x86_64-linux" "i686-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ]; supportedSystems = [ "x86_64-linux" "i686-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ];
colmenaOptions = import ./src/nix/hive/options.nix; colmenaOptions = import ./src/nix/hive/options.nix;
colmenaModules = import ./src/nix/hive/modules.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 in utils.lib.eachSystem supportedSystems (system: let
pkgs = import nixpkgs { pkgs = import nixpkgs {
inherit system; inherit system;
@ -33,12 +29,24 @@
# Full user manual # Full user manual
manual = let manual = let
suppressModuleArgsDocs = { lib, ... }: {
options = {
_module.args = lib.mkOption {
internal = true;
};
};
};
colmena = self.packages.${system}.colmena; colmena = self.packages.${system}.colmena;
deploymentOptionsMd = (pkgs.nixosOptionsDoc { deploymentOptionsMd = (pkgs.nixosOptionsDoc {
options = evalNix.docs.deploymentOptions pkgs; inherit (pkgs.lib.evalModules {
modules = [ colmenaOptions.deploymentOptions suppressModuleArgsDocs];
specialArgs = { name = "nixos"; nodes = {}; };
}) options;
}).optionsCommonMark; }).optionsCommonMark;
metaOptionsMd = (pkgs.nixosOptionsDoc { metaOptionsMd = (pkgs.nixosOptionsDoc {
options = evalNix.docs.metaOptions pkgs; inherit (pkgs.lib.evalModules {
modules = [ colmenaOptions.metaOptions suppressModuleArgsDocs];
}) options;
}).optionsCommonMark; }).optionsCommonMark;
in pkgs.callPackage ./manual { in pkgs.callPackage ./manual {
inherit colmena deploymentOptionsMd metaOptionsMd; inherit colmena deploymentOptionsMd metaOptionsMd;
@ -74,7 +82,10 @@
overlay = final: prev: { overlay = final: prev: {
colmena = final.callPackage ./package.nix { }; colmena = final.callPackage ./package.nix { };
}; };
inherit (evalNix) nixosModules; nixosModules = {
inherit (colmenaOptions) deploymentOptions metaOptions;
inherit (colmenaModules) keyChownModule keyServiceModule;
};
}; };
nixConfig = { nixConfig = {

View file

@ -167,42 +167,6 @@ let
value = evalNode name configs; value = evalNode name configs;
}) nodeNames); }) 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);
evalAll = evalSelected nodeNames;
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;
};
suppressModuleArgsDocs = { lib, ... }: {
options = {
_module.args = lib.mkOption {
internal = true;
};
};
};
# Add required config Key here since we don't want to eval nixpkgs # Add required config Key here since we don't want to eval nixpkgs
metaConfigKeys = [ metaConfigKeys = [
"name" "description" "name" "description"
@ -210,33 +174,16 @@ let
"allowApplyAll" "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; metaConfig = lib.filterAttrs (n: v: elem n metaConfigKeys) hive.meta;
in { introspect = f: f { inherit lib; pkgs = nixpkgs; nodes = uncheckedNodes; };
inherit
nodes toplevel
deploymentConfig deploymentConfigSelected
evalAll evalSelected evalSelectedDrvPaths introspect
metaConfig;
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;
};
} }