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" ];
|
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 = {
|
||||||
|
|
|
@ -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;
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue