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.
This commit is contained in:
hylodon 2026-03-01 17:49:00 +00:00
parent 2a5ced3905
commit 9232d12f25
3 changed files with 59 additions and 0 deletions

1
.gitignore vendored
View file

@ -3,5 +3,6 @@
!.gitignore !.gitignore
!flake.nix !flake.nix
!flake.lock !flake.lock
!docs/**/*.nix
!lib/**.nix !lib/**.nix
!modules/**/*.nix !modules/**/*.nix

56
docs/default.nix Normal file
View file

@ -0,0 +1,56 @@
{
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;
};
};
}

View file

@ -11,6 +11,8 @@
forAllSystems = nixos.lib.genAttrs nixos.lib.systems.flakeExposed; forAllSystems = nixos.lib.genAttrs nixos.lib.systems.flakeExposed;
in in
{ {
docs = forAllSystems (system: nixos.legacyPackages.${system}.callPackage ./docs { inherit self; });
formatter = forAllSystems (system: nixos.legacyPackages.${system}.nixfmt-tree); formatter = forAllSystems (system: nixos.legacyPackages.${system}.nixfmt-tree);
hmModules = import ./modules/home-manager self.lib.hylonix; hmModules = import ./modules/home-manager self.lib.hylonix;