1let
2 pkgs = import ./.. { };
3 lib = pkgs.lib;
4 sources = lib.sourceFilesBySuffices ./. [".xml"];
5 sources-langs = ./languages-frameworks;
6in
7pkgs.stdenv.mkDerivation {
8 name = "nixpkgs-manual";
9
10
11 buildInputs = with pkgs; [ pandoc libxml2 libxslt zip ];
12
13 xsltFlags = ''
14 --param section.autolabel 1
15 --param section.label.includes.component.label 1
16 --param html.stylesheet 'style.css'
17 --param xref.with.number.and.title 1
18 --param toc.section.depth 3
19 --param admon.style '''
20 --param callout.graphics.extension '.gif'
21 '';
22
23
24 buildCommand = let toDocbook = { useChapters ? false, inputFile, outputFile }:
25 let
26 extraHeader = lib.optionalString (!useChapters)
27 ''xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" '';
28 in ''
29 {
30 pandoc '${inputFile}' -w docbook+smart ${lib.optionalString useChapters "--top-level-division=chapter"} \
31 -f markdown+smart \
32 | sed -e 's|<ulink url=|<link xlink:href=|' \
33 -e 's|</ulink>|</link>|' \
34 -e 's|<sect. id=|<section xml:id=|' \
35 -e 's|</sect[0-9]>|</section>|' \
36 -e '1s| id=| xml:id=|' \
37 -e '1s|\(<[^ ]* \)|\1${extraHeader}|'
38 } > '${outputFile}'
39 '';
40 in
41
42 ''
43 ln -s '${sources}/'*.xml .
44 mkdir ./languages-frameworks
45 cp -s '${sources-langs}'/* ./languages-frameworks
46 ''
47 + toDocbook {
48 inputFile = ./introduction.md;
49 outputFile = "introduction.xml";
50 useChapters = true;
51 }
52 + toDocbook {
53 inputFile = ./shell.md;
54 outputFile = "shell.xml";
55 }
56 + toDocbook {
57 inputFile = ./languages-frameworks/python.md;
58 outputFile = "./languages-frameworks/python.xml";
59 }
60 + toDocbook {
61 inputFile = ./languages-frameworks/haskell.md;
62 outputFile = "./languages-frameworks/haskell.xml";
63 }
64 + toDocbook {
65 inputFile = ../pkgs/development/idris-modules/README.md;
66 outputFile = "languages-frameworks/idris.xml";
67 }
68 + toDocbook {
69 inputFile = ../pkgs/development/node-packages/README.md;
70 outputFile = "languages-frameworks/node.xml";
71 }
72 + toDocbook {
73 inputFile = ../pkgs/development/r-modules/README.md;
74 outputFile = "languages-frameworks/r.xml";
75 }
76 + toDocbook {
77 inputFile = ./languages-frameworks/rust.md;
78 outputFile = "./languages-frameworks/rust.xml";
79 }
80 + toDocbook {
81 inputFile = ./languages-frameworks/vim.md;
82 outputFile = "./languages-frameworks/vim.xml";
83 }
84 + ''
85 echo ${lib.nixpkgsVersion} > .version
86
87 # validate against relaxng schema
88 xmllint --nonet --xinclude --noxincludenode manual.xml --output manual-full.xml
89 ${pkgs.jing}/bin/jing ${pkgs.docbook5}/xml/rng/docbook/docbook.rng manual-full.xml
90
91 dst=$out/share/doc/nixpkgs
92 mkdir -p $dst
93 xsltproc $xsltFlags --nonet --xinclude \
94 --output $dst/manual.html \
95 ${pkgs.docbook5_xsl}/xml/xsl/docbook/xhtml/docbook.xsl \
96 ./manual.xml
97
98 cp ${./style.css} $dst/style.css
99
100 mkdir -p $dst/images/callouts
101 cp "${pkgs.docbook5_xsl}/xml/xsl/docbook/images/callouts/"*.gif $dst/images/callouts/
102
103 mkdir -p $out/nix-support
104 echo "doc manual $dst manual.html" >> $out/nix-support/hydra-build-products
105
106 xsltproc $xsltFlags --nonet --xinclude \
107 --output $dst/epub/ \
108 ${pkgs.docbook5_xsl}/xml/xsl/docbook/epub/docbook.xsl \
109 ./manual.xml
110
111 cp -r $dst/images $dst/epub/OEBPS
112 echo "application/epub+zip" > mimetype
113 manual="$dst/nixpkgs-manual.epub"
114 zip -0Xq "$manual" mimetype
115 cd $dst/epub && zip -Xr9D "$manual" *
116 rm -rf $dst/epub
117 '';
118}