diff --git a/docs/nix/flake-module.nix b/docs/nix/flake-module.nix index 4793962eb..5a8ffa3c6 100644 --- a/docs/nix/flake-module.nix +++ b/docs/nix/flake-module.nix @@ -11,11 +11,9 @@ buildClanOptions = self'.legacyPackages.clan-internals-docs; # Simply evaluated options (JSON) # { clanCore = «derivation JSON»; clanModules = { ${name} = «derivation JSON» }; } - jsonDocs = import ./get-module-docs.nix { - inherit (inputs) nixpkgs; - inherit pkgs; - inherit (self.nixosModules) clanCore; + jsonDocs = pkgs.callPackage ./get-module-docs.nix { inherit (self) clanModules; + evalClanModules = self.lib.evalClanModules; }; clanModulesFileInfo = pkgs.writeText "info.json" (builtins.toJSON jsonDocs.clanModules); diff --git a/docs/nix/get-module-docs.nix b/docs/nix/get-module-docs.nix index 840721375..d78d9be6f 100644 --- a/docs/nix/get-module-docs.nix +++ b/docs/nix/get-module-docs.nix @@ -1,47 +1,22 @@ { - nixpkgs, - pkgs, - clanCore, + nixosOptionsDoc, 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 - clanModulesDocs = builtins.mapAttrs ( - name: module: (evalDocs ((getOptionsWithoutCore [ module ]).clan.${name} or { })).optionsJSON + clanModules = lib.mapAttrs ( + name: module: + (nixosOptionsDoc { + options = ((evalClanModules [ module ]).options).clan.${name} or { }; + warningsAreErrors = true; + }).optionsJSON ) clanModules; - # clanCore docs - clanCoreDocs = (evalDocs (getOptions [ ]).clan.core).optionsJSON; -in -{ - clanCore = clanCoreDocs; - clanModules = clanModulesDocs; + clanCore = + (nixosOptionsDoc { + options = ((evalClanModules [ ]).options).clan.core or { }; + warningsAreErrors = true; + }).optionsJSON; }