docs/nixpkgs-doc/doc-support/lib-function-docs.nix
2024-06-30 01:43:43 -04:00

52 lines
1.2 KiB
Nix

# Generates the documentation for library functions via nixdoc.
{
pkgs,
spkgs,
libsets,
inputs,
}:
let
inherit (pkgs) stdenv lib nixdoc;
in
stdenv.mkDerivation {
name = "nixpkgs-lib-docs";
src = "${inputs.nixpkgs.outPath}/lib";
buildInputs = [ nixdoc ];
installPhase = ''
function docgen {
name=$1
baseName=$2
description=$3
# TODO: wrap lib.$name in <literal>, make nixdoc not escape it
if [[ -e "../lib/$baseName.nix" ]]; then
nixdoc -c "$name" -d "lib.$name: $description" -l ${spkgs.doc-locations-json} -f "$baseName.nix" > "$out/$name.md"
else
nixdoc -c "$name" -d "lib.$name: $description" -l ${spkgs.doc-locations-json} -f "$baseName/default.nix" > "$out/$name.md"
fi
echo "$out/$name.md" >> "$out/index.md"
}
mkdir -p "$out"
cat > "$out/index.md" << 'EOF'
```{=include=} sections auto-id-prefix=auto-generated
EOF
${lib.concatMapStrings (
{
name,
baseName ? name,
description,
}:
''
docgen ${name} ${baseName} ${lib.escapeShellArg description}
''
) libsets}
echo '```' >> "$out/index.md"
'';
}