forked from DGNum/colmena
Merge pull request #89 from blaggacao/ref/reduce-eval-nix-interface
ref/reduce eval nix interface
This commit is contained in:
commit
07efd5818d
2 changed files with 29 additions and 71 deletions
25
flake.nix
25
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;
|
||||
|
@ -33,12 +29,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;
|
||||
|
@ -74,7 +82,10 @@
|
|||
overlay = final: prev: {
|
||||
colmena = final.callPackage ./package.nix { };
|
||||
};
|
||||
inherit (evalNix) nixosModules;
|
||||
nixosModules = {
|
||||
inherit (colmenaOptions) deploymentOptions metaOptions;
|
||||
inherit (colmenaModules) keyChownModule keyServiceModule;
|
||||
};
|
||||
};
|
||||
|
||||
nixConfig = {
|
||||
|
|
|
@ -167,42 +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);
|
||||
|
||||
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
|
||||
metaConfigKeys = [
|
||||
"name" "description"
|
||||
|
@ -210,33 +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
|
||||
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;
|
||||
};
|
||||
introspect = f: f { inherit lib; pkgs = nixpkgs; nodes = uncheckedNodes; };
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue