summary refs log tree commit diff
path: root/doc/doc-support/lib-function-docs.nix
blob: cf218fa704017e76a40a7dfac5dea3da46ad96e7 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# Generates the documentation for library functions via nixdoc.

{ pkgs, locationsXml, libsets }:

with pkgs; stdenv.mkDerivation {
  name = "nixpkgs-lib-docs";
  src = ../../lib;

  buildInputs = [ nixdoc ];
  installPhase = ''
    function docgen {
      # TODO: wrap lib.$1 in <literal>, make nixdoc not escape it
      if [[ -e "../lib/$1.nix" ]]; then
        nixdoc -c "$1" -d "lib.$1: $2" -f "$1.nix" > "$out/$1.xml"
      else
        nixdoc -c "$1" -d "lib.$1: $2" -f "$1/default.nix" > "$out/$1.xml"
      fi
      echo "<xi:include href='$1.xml' />" >> "$out/index.xml"
    }

    mkdir -p "$out"

    cat > "$out/index.xml" << 'EOF'
    <?xml version="1.0" encoding="utf-8"?>
    <root xmlns:xi="http://www.w3.org/2001/XInclude">
    EOF

    ${lib.concatMapStrings ({ name, description }: ''
      docgen ${name} ${lib.escapeShellArg description}
    '') libsets}

    echo "</root>" >> "$out/index.xml"

    ln -s ${locationsXml} $out/locations.xml
  '';
}