use evalClanModules in get-module-docs

This commit is contained in:
Jörg Thalheim
2024-10-09 14:38:38 +02:00
parent 1a6e2f7db6
commit aad4032626
2 changed files with 17 additions and 44 deletions

View File

@@ -11,11 +11,9 @@
buildClanOptions = self'.legacyPackages.clan-internals-docs; buildClanOptions = self'.legacyPackages.clan-internals-docs;
# Simply evaluated options (JSON) # Simply evaluated options (JSON)
# { clanCore = «derivation JSON»; clanModules = { ${name} = «derivation JSON» }; } # { clanCore = «derivation JSON»; clanModules = { ${name} = «derivation JSON» }; }
jsonDocs = import ./get-module-docs.nix { jsonDocs = pkgs.callPackage ./get-module-docs.nix {
inherit (inputs) nixpkgs;
inherit pkgs;
inherit (self.nixosModules) clanCore;
inherit (self) clanModules; inherit (self) clanModules;
evalClanModules = self.lib.evalClanModules;
}; };
clanModulesFileInfo = pkgs.writeText "info.json" (builtins.toJSON jsonDocs.clanModules); clanModulesFileInfo = pkgs.writeText "info.json" (builtins.toJSON jsonDocs.clanModules);

View File

@@ -1,47 +1,22 @@
{ {
nixpkgs, nixosOptionsDoc,
pkgs,
clanCore,
clanModules, clanModules,
evalClanModules,
lib,
}: }:
let {
allNixosModules = (import "${nixpkgs}/nixos/modules/module-list.nix") ++ [
"${nixpkgs}/nixos/modules/misc/assertions.nix"
{ nixpkgs.hostPlatform = "x86_64-linux"; }
];
clanCoreNixosModules = [
clanCore
{ clan.core.clanDir = ./.; }
] ++ allNixosModules;
# TODO: optimally we would not have to evaluate all nixos modules for every page
# but some of our module options secretly depend on nixos modules.
# We would have to get rid of these implicit dependencies and make them explicit
clanCoreNixos = pkgs.nixos { imports = clanCoreNixosModules; };
# using extendModules here instead of re-evaluating nixos every time
# improves eval performance slightly (10%)
getOptions = modules: (clanCoreNixos.extendModules { inherit modules; }).options;
getOptionsWithoutCore = modules: builtins.removeAttrs (getOptions modules) [ "core" ];
evalDocs =
options:
pkgs.nixosOptionsDoc {
options = options;
warningsAreErrors = true;
};
# clanModules docs # clanModules docs
clanModulesDocs = builtins.mapAttrs ( clanModules = lib.mapAttrs (
name: module: (evalDocs ((getOptionsWithoutCore [ module ]).clan.${name} or { })).optionsJSON name: module:
(nixosOptionsDoc {
options = ((evalClanModules [ module ]).options).clan.${name} or { };
warningsAreErrors = true;
}).optionsJSON
) clanModules; ) clanModules;
# clanCore docs clanCore =
clanCoreDocs = (evalDocs (getOptions [ ]).clan.core).optionsJSON; (nixosOptionsDoc {
in options = ((evalClanModules [ ]).options).clan.core or { };
{ warningsAreErrors = true;
clanCore = clanCoreDocs; }).optionsJSON;
clanModules = clanModulesDocs;
} }