Generating Markdown documentation for NixOS modules #
Using the nixosOptionsDoc package we can generate markdown documentation for both nixos and home-manager modules:
perSystem =
{
self',
system,
pkgs,
...
}:
{
packages = {
nixos-options-doc =
let
eval = inputs.nixpkgs.lib.evalModules {
modules = [
{ _module.check = false; }
inputs.self.modules.nixos.core
inputs.self.modules.nixos.desktop
inputs.self.modules.nixos.server
];
};
cleanEval = inputs.nixpkgs.lib.filterAttrsRecursive (n: v: n != "_module") eval;
optionsDoc = pkgs.nixosOptionsDoc { inherit (cleanEval) options; };
in
pkgs.runCommand "OPTIONS.md" { } ''
cp ${optionsDoc.optionsCommonMark} $out
'';
home-manager-options-doc =
let
eval = inputs.nixpkgs.lib.evalModules {
modules = [
{ _module.check = false; }
inputs.self.modules.homeManager.secrets
inputs.self.modules.homeManager.theme
inputs.self.modules.homeManager.backup
inputs.self.modules.homeManager.cosmic-manager
inputs.self.modules.homeManager.development
inputs.self.modules.homeManager.editing
inputs.self.modules.homeManager.gaming
inputs.self.modules.homeManager.plasma-manager
inputs.self.modules.homeManager.utilities
inputs.self.modules.homeManager.web
];
};
cleanEval = inputs.nixpkgs.lib.filterAttrsRecursive (n: v: n != "_module") eval;
optionsDoc = pkgs.nixosOptionsDoc { inherit (cleanEval) options; };
in
pkgs.runCommand "OPTIONS.md" { } ''
cp ${optionsDoc.optionsCommonMark} $out
'';
};
};