{ pkgs, lib, self, ... }: let baseModule = _: { # Hide documentation relating to _module.args, which isn't a part # of this flake options._module.args = lib.mkOption { internal = true; }; # Turn off the checks on the config. We only want the options, so # don't eval the config. config._module.check = false; }; makeModuleDocs = subcomponent: modules: let eval = lib.evalModules { modules = [ baseModule ] ++ modules; class = "hylonix"; specialArgs = { inherit pkgs lib; }; }; docs = pkgs.buildPackages.nixosOptionsDoc { inherit (eval) options; warningsAreErrors = false; }; in { # These formats are generated by nixosOptionsDoc, # so may as well expose them. asciiDoc = docs.optionsAsciiDoc; commonMark = docs.optionsCommonMark; json = docs.optionsJSON; nix = docs.optionsNix; }; in { modules = { all = makeModuleDocs "modules" ( builtins.attrValues self.hmModules ++ builtins.attrValues self.nixosModules ); hm = { all = makeModuleDocs "hmModules" (builtins.attrValues self.hmModules); module = builtins.mapAttrs (k: v: makeModuleDocs "hmModules-${k}" [ v ]) self.hmModules; }; nixos = { all = makeModuleDocs "nixosModules" (builtins.attrValues self.nixosModules); module = builtins.mapAttrs (k: v: makeModuleDocs "nixosModules-${k}" [ v ]) self.nixosModules; }; }; }