nixos-modules/lib/doc.nix

46 lines
1.5 KiB
Nix

{ lib, pkgs, ... }:
{
# based on https://github.com/j-brn/nixos-vfio/blob/master/lib/mkModuleDoc.nix
mkModuleDoc = { modules, urlPrefix }: let
inherit (lib.evalModules {
modules = lib.singleton {
config._module.check = false;
} ++ modules;
}) options;
filteredOptions = lib.filterAttrs (key: _: key != "_module") options;
docs = pkgs.nixosOptionsDoc {
options = filteredOptions;
warningsAreErrors = false;
};
url = lib.escape [ ":" "." "-" ] urlPrefix;
in pkgs.runCommand "options.md" { } /* bash */ ''
mkdir $out
cat ${docs.optionsCommonMark} \
| sed -r -e 's|\[/nix/store/.+\-source/(.+\.nix)\]|[\1]|g' \
-e 's|\[/nix/store/.+\-source/(.+)\]|[\1/default\.nix]|g' \
-e 's|\[flake\\.nix\\#nixosModules\\.(\w+)\/default\.nix\]|\[modules\/\1\/default\.nix\]|g' \
-e 's|file\:///nix/store/.+\-source/(.+\.nix)|${url}\1|g' \
-e 's|file\:///nix/store/.+\-source/(.+)\)|${url}/\1/default\.nix\)|g' \
> $out/options.md
'';
mkMdBook = { projectName, moduleDoc }: with pkgs; stdenv.mkDerivation {
name = "${projectName}-docs";
nativeBuildInputs = [ mdbook ];
buildCommand = ''
mkdir src
cp ${pkgs.substituteAll {
src = ./book.toml;
inherit projectName;
}} book.toml
echo -e "# Summary\n\n- [Options](options.md)" > src/SUMMARY.md
ln -s ${moduleDoc}/options.md ./src
mdbook build
mv book/html $out
'';
};
}