2013-11-01 15:44:03 +00:00
|
|
|
{ pkgs, options, version, revision }:
|
2008-06-05 16:33:17 +01:00
|
|
|
|
2014-08-09 15:30:44 +01:00
|
|
|
with pkgs;
|
2013-10-17 13:09:05 +01:00
|
|
|
with pkgs.lib;
|
|
|
|
|
2011-09-14 19:20:50 +01:00
|
|
|
let
|
2009-10-06 00:15:06 +01:00
|
|
|
|
2013-10-23 18:32:19 +01:00
|
|
|
# Remove invisible and internal options.
|
2014-08-27 10:53:08 +01:00
|
|
|
optionsList = filter (opt: opt.visible && !opt.internal) (optionAttrSetToDocList options);
|
|
|
|
|
|
|
|
# Replace functions by the string <function>
|
|
|
|
substFunction = x:
|
|
|
|
if builtins.isAttrs x then mapAttrs (name: substFunction) x
|
|
|
|
else if builtins.isList x then map substFunction x
|
|
|
|
else if builtins.isFunction x then "<function>"
|
|
|
|
else x;
|
2013-10-23 18:32:19 +01:00
|
|
|
|
|
|
|
# Clean up declaration sites to not refer to the NixOS source tree.
|
2014-08-27 10:53:08 +01:00
|
|
|
optionsList' = flip map optionsList (opt: opt // {
|
2013-10-23 18:32:19 +01:00
|
|
|
declarations = map (fn: stripPrefix fn) opt.declarations;
|
2014-08-27 10:53:08 +01:00
|
|
|
}
|
|
|
|
// optionalAttrs (opt ? example) { example = substFunction opt.example; }
|
|
|
|
// optionalAttrs (opt ? default) { default = substFunction opt.default; });
|
2013-10-23 18:32:19 +01:00
|
|
|
|
2014-06-13 15:46:59 +01:00
|
|
|
prefix = toString ../../..;
|
2013-10-23 19:06:17 +01:00
|
|
|
|
2013-10-23 18:32:19 +01:00
|
|
|
stripPrefix = fn:
|
|
|
|
if substring 0 (stringLength prefix) fn == prefix then
|
2014-06-13 15:46:59 +01:00
|
|
|
substring (stringLength prefix + 1) 1000 fn
|
2013-10-23 18:32:19 +01:00
|
|
|
else
|
|
|
|
fn;
|
|
|
|
|
2014-08-27 10:53:08 +01:00
|
|
|
# Convert the list of options into an XML file and a JSON file. The builtin
|
|
|
|
# unsafeDiscardStringContext is used to prevent the realisation of the store
|
|
|
|
# paths which are used in options definitions.
|
|
|
|
optionsXML = builtins.toFile "options.xml" (builtins.unsafeDiscardStringContext (builtins.toXML optionsList'));
|
|
|
|
optionsJSON = builtins.toFile "options.json" (builtins.unsafeDiscardStringContext (builtins.toJSON optionsList'));
|
|
|
|
|
|
|
|
# Tools-friendly version of the list of NixOS options.
|
|
|
|
options' = stdenv.mkDerivation {
|
|
|
|
name = "options";
|
|
|
|
|
|
|
|
buildCommand = ''
|
|
|
|
# Export list of options in different format.
|
|
|
|
dst=$out/share/doc/nixos
|
|
|
|
mkdir -p $dst
|
|
|
|
|
|
|
|
cp ${optionsJSON} $dst/options.json
|
|
|
|
cp ${optionsXML} $dst/options.xml
|
|
|
|
|
|
|
|
mkdir -p $out/nix-support
|
|
|
|
echo "file json $dst/options.json" >> $out/nix-support/hydra-build-products
|
|
|
|
echo "file xml $dst/options.xml" >> $out/nix-support/hydra-build-products
|
|
|
|
''; # */
|
|
|
|
|
|
|
|
meta.description = "List of NixOS options in various formats.";
|
|
|
|
};
|
2008-01-04 14:24:42 +00:00
|
|
|
|
2014-08-09 15:30:44 +01:00
|
|
|
optionsDocBook = runCommand "options-db.xml" {} ''
|
2014-09-09 12:43:23 +01:00
|
|
|
optionsXML=${options'}/share/doc/nixos/options.xml
|
2014-08-27 10:53:08 +01:00
|
|
|
if grep /nixpkgs/nixos/modules $optionsXML; then
|
2013-10-23 19:06:17 +01:00
|
|
|
echo "The manual appears to depend on the location of Nixpkgs, which is bad"
|
|
|
|
echo "since this prevents sharing via the NixOS channel. This is typically"
|
|
|
|
echo "caused by an option default that refers to a relative path (see above"
|
|
|
|
echo "for hints about the offending path)."
|
|
|
|
exit 1
|
|
|
|
fi
|
2014-08-09 15:30:44 +01:00
|
|
|
${libxslt}/bin/xsltproc \
|
2009-10-06 00:47:50 +01:00
|
|
|
--stringparam revision '${revision}' \
|
2014-08-27 10:53:08 +01:00
|
|
|
-o $out ${./options-to-docbook.xsl} $optionsXML
|
2008-01-04 14:24:42 +00:00
|
|
|
'';
|
2009-09-18 16:10:37 +01:00
|
|
|
|
2014-08-25 13:33:17 +01:00
|
|
|
sources = sourceFilesBySuffices ./. [".xml"];
|
|
|
|
|
|
|
|
copySources =
|
|
|
|
''
|
|
|
|
cp -prd $sources/* . # */
|
2014-08-27 11:24:10 +01:00
|
|
|
chmod -R u+w .
|
|
|
|
cp ${../../modules/services/databases/postgresql.xml} configuration/postgresql.xml
|
2014-08-25 13:33:17 +01:00
|
|
|
ln -s ${optionsDocBook} options-db.xml
|
|
|
|
echo "${version}" > version
|
|
|
|
'';
|
|
|
|
|
2010-08-11 13:28:53 +01:00
|
|
|
in rec {
|
|
|
|
|
2014-08-27 10:53:08 +01:00
|
|
|
# Tools-friendly version of the list of NixOS options.
|
|
|
|
options = options';
|
|
|
|
|
2010-08-11 13:28:53 +01:00
|
|
|
# Generate the NixOS manual.
|
2014-08-09 15:30:44 +01:00
|
|
|
manual = stdenv.mkDerivation {
|
2008-01-04 14:24:42 +00:00
|
|
|
name = "nixos-manual";
|
|
|
|
|
2014-08-25 13:33:17 +01:00
|
|
|
inherit sources;
|
2008-01-04 14:24:42 +00:00
|
|
|
|
2014-08-09 15:30:44 +01:00
|
|
|
buildInputs = [ libxml2 libxslt ];
|
2008-01-04 14:24:42 +00:00
|
|
|
|
|
|
|
buildCommand = ''
|
2014-08-25 13:33:17 +01:00
|
|
|
${copySources}
|
2009-07-14 16:47:03 +01:00
|
|
|
|
2009-10-05 14:17:45 +01:00
|
|
|
# Check the validity of the manual sources.
|
|
|
|
xmllint --noout --nonet --xinclude --noxincludenode \
|
2014-08-09 15:30:44 +01:00
|
|
|
--relaxng ${docbook5}/xml/rng/docbook/docbook.rng \
|
2009-10-05 14:17:45 +01:00
|
|
|
manual.xml
|
|
|
|
|
|
|
|
# Generate the HTML manual.
|
2009-07-14 16:47:03 +01:00
|
|
|
dst=$out/share/doc/nixos
|
2014-06-30 13:56:10 +01:00
|
|
|
mkdir -p $dst
|
2014-08-25 18:08:12 +01:00
|
|
|
xsltproc \
|
|
|
|
--param section.autolabel 1 \
|
|
|
|
--param section.label.includes.component.label 1 \
|
|
|
|
--stringparam html.stylesheet style.css \
|
|
|
|
--param xref.with.number.and.title 1 \
|
|
|
|
--param toc.section.depth 3 \
|
|
|
|
--stringparam admon.style "" \
|
|
|
|
--stringparam callout.graphics.extension .gif \
|
2014-08-27 11:24:10 +01:00
|
|
|
--param chunk.section.depth 0 \
|
2014-08-25 18:08:12 +01:00
|
|
|
--param chunk.first.sections 1 \
|
|
|
|
--param use.id.as.filename 1 \
|
2014-08-26 14:13:17 +01:00
|
|
|
--stringparam generate.toc "book toc chapter toc appendix toc" \
|
2014-08-25 18:08:12 +01:00
|
|
|
--nonet --xinclude --output $dst/ \
|
|
|
|
${docbook5_xsl}/xml/xsl/docbook/xhtml/chunkfast.xsl ./manual.xml
|
2009-09-18 16:10:37 +01:00
|
|
|
|
2012-07-25 16:54:24 +01:00
|
|
|
mkdir -p $dst/images/callouts
|
2014-08-09 15:30:44 +01:00
|
|
|
cp ${docbook5_xsl}/xml/xsl/docbook/images/callouts/*.gif $dst/images/callouts/
|
2013-01-09 12:43:57 +00:00
|
|
|
|
2009-07-14 16:47:03 +01:00
|
|
|
cp ${./style.css} $dst/style.css
|
2011-09-14 19:20:50 +01:00
|
|
|
|
2013-10-24 19:06:02 +01:00
|
|
|
mkdir -p $out/nix-support
|
|
|
|
echo "nix-build out $out" >> $out/nix-support/hydra-build-products
|
2014-09-10 14:03:49 +01:00
|
|
|
echo "doc manual $dst" >> $out/nix-support/hydra-build-products
|
2012-07-25 16:54:24 +01:00
|
|
|
''; # */
|
2013-10-24 19:06:02 +01:00
|
|
|
|
|
|
|
meta.description = "The NixOS manual in HTML format";
|
2010-08-11 13:28:53 +01:00
|
|
|
};
|
|
|
|
|
2014-08-09 15:30:44 +01:00
|
|
|
manualPDF = stdenv.mkDerivation {
|
|
|
|
name = "nixos-manual-pdf";
|
|
|
|
|
2014-08-25 13:33:17 +01:00
|
|
|
inherit sources;
|
2014-08-09 15:30:44 +01:00
|
|
|
|
|
|
|
buildInputs = [ libxml2 libxslt dblatex tetex ];
|
|
|
|
|
|
|
|
buildCommand = ''
|
|
|
|
# TeX needs a writable font cache.
|
|
|
|
export VARTEXFONTS=$TMPDIR/texfonts
|
|
|
|
|
2014-08-25 13:33:17 +01:00
|
|
|
${copySources}
|
2014-08-09 15:30:44 +01:00
|
|
|
|
|
|
|
dst=$out/share/doc/nixos
|
|
|
|
mkdir -p $dst
|
|
|
|
xmllint --xinclude manual.xml | dblatex -o $dst/manual.pdf - \
|
|
|
|
-P doc.collab.show=0 \
|
|
|
|
-P latex.output.revhistory=0
|
|
|
|
|
|
|
|
mkdir -p $out/nix-support
|
|
|
|
echo "doc-pdf manual $dst/manual.pdf" >> $out/nix-support/hydra-build-products
|
|
|
|
''; # */
|
|
|
|
};
|
|
|
|
|
2010-08-11 13:28:53 +01:00
|
|
|
# Generate the NixOS manpages.
|
2014-08-09 15:30:44 +01:00
|
|
|
manpages = stdenv.mkDerivation {
|
2010-08-11 13:28:53 +01:00
|
|
|
name = "nixos-manpages";
|
|
|
|
|
2014-08-25 13:33:17 +01:00
|
|
|
inherit sources;
|
2010-08-11 13:28:53 +01:00
|
|
|
|
2014-08-09 15:30:44 +01:00
|
|
|
buildInputs = [ libxml2 libxslt ];
|
2010-08-11 13:28:53 +01:00
|
|
|
|
|
|
|
buildCommand = ''
|
2014-08-25 13:33:17 +01:00
|
|
|
${copySources}
|
2010-08-11 13:28:53 +01:00
|
|
|
|
|
|
|
# Check the validity of the manual sources.
|
|
|
|
xmllint --noout --nonet --xinclude --noxincludenode \
|
2014-08-09 15:30:44 +01:00
|
|
|
--relaxng ${docbook5}/xml/rng/docbook/docbook.rng \
|
2010-08-11 13:28:53 +01:00
|
|
|
./man-pages.xml
|
2009-07-14 16:47:03 +01:00
|
|
|
|
2009-10-05 14:17:45 +01:00
|
|
|
# Generate manpages.
|
2013-10-24 19:06:02 +01:00
|
|
|
mkdir -p $out/share/man
|
2009-07-14 16:47:03 +01:00
|
|
|
xsltproc --nonet --xinclude \
|
|
|
|
--param man.output.in.separate.dir 1 \
|
|
|
|
--param man.output.base.dir "'$out/share/man/'" \
|
2009-10-06 00:15:06 +01:00
|
|
|
--param man.endnotes.are.numbered 0 \
|
2014-08-09 15:30:44 +01:00
|
|
|
${docbook5_xsl}/xml/xsl/docbook/manpages/docbook.xsl \
|
2009-07-14 16:47:03 +01:00
|
|
|
./man-pages.xml
|
2008-01-04 14:24:42 +00:00
|
|
|
'';
|
|
|
|
};
|
|
|
|
|
2011-09-14 19:20:50 +01:00
|
|
|
}
|