hylonix/docs/default.nix
hylodon 9232d12f25 Added documentation about modules.
NixOS and Home Manager both automatically generate documentation using 'nixosOptionsDoc', and now so does hylonix.

I can't find any standard reference for where this documentation should go, so I have created a doc attribute in the flake.
2026-03-01 17:49:00 +00:00

56 lines
1.5 KiB
Nix

{
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;
};
};
}