| 
									
										
										
										
											2013-11-01 16:44:03 +01:00
										 |  |  | { pkgs, options, version, revision }: | 
					
						
							| 
									
										
										
										
											2008-06-05 15:33:17 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-08-09 16:30:44 +02:00
										 |  |  | with pkgs; | 
					
						
							| 
									
										
										
										
											2013-10-17 14:09:05 +02:00
										 |  |  | with pkgs.lib; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-14 18:20:50 +00:00
										 |  |  | let | 
					
						
							| 
									
										
										
										
											2009-10-05 23:15:06 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-10-23 19:32:19 +02:00
										 |  |  |   # Remove invisible and internal options. | 
					
						
							| 
									
										
										
										
											2014-08-27 11:53:08 +02: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 19:32:19 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |   # Clean up declaration sites to not refer to the NixOS source tree. | 
					
						
							| 
									
										
										
										
											2014-08-27 11:53:08 +02:00
										 |  |  |   optionsList' = flip map optionsList (opt: opt // { | 
					
						
							| 
									
										
										
										
											2013-10-23 19:32:19 +02:00
										 |  |  |     declarations = map (fn: stripPrefix fn) opt.declarations; | 
					
						
							| 
									
										
										
										
											2014-08-27 11:53:08 +02:00
										 |  |  |   } | 
					
						
							|  |  |  |   // optionalAttrs (opt ? example) { example = substFunction opt.example; } | 
					
						
							|  |  |  |   // optionalAttrs (opt ? default) { default = substFunction opt.default; }); | 
					
						
							| 
									
										
										
										
											2013-10-23 19:32:19 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-06-13 16:46:59 +02:00
										 |  |  |   prefix = toString ../../..; | 
					
						
							| 
									
										
										
										
											2013-10-23 20:06:17 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-10-23 19:32:19 +02:00
										 |  |  |   stripPrefix = fn: | 
					
						
							|  |  |  |     if substring 0 (stringLength prefix) fn == prefix then | 
					
						
							| 
									
										
										
										
											2014-06-13 16:46:59 +02:00
										 |  |  |       substring (stringLength prefix + 1) 1000 fn | 
					
						
							| 
									
										
										
										
											2013-10-23 19:32:19 +02:00
										 |  |  |     else | 
					
						
							|  |  |  |       fn; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-08-27 11:53:08 +02: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 16:30:44 +02:00
										 |  |  |   optionsDocBook = runCommand "options-db.xml" {} ''
 | 
					
						
							| 
									
										
										
										
											2014-09-09 13:43:23 +02:00
										 |  |  |     optionsXML=${options'}/share/doc/nixos/options.xml | 
					
						
							| 
									
										
										
										
											2014-08-27 11:53:08 +02:00
										 |  |  |     if grep /nixpkgs/nixos/modules $optionsXML; then | 
					
						
							| 
									
										
										
										
											2013-10-23 20:06:17 +02: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 16:30:44 +02:00
										 |  |  |     ${libxslt}/bin/xsltproc \ | 
					
						
							| 
									
										
										
										
											2009-10-05 23:47:50 +00:00
										 |  |  |       --stringparam revision '${revision}' \ | 
					
						
							| 
									
										
										
										
											2014-08-27 11:53:08 +02:00
										 |  |  |       -o $out ${./options-to-docbook.xsl} $optionsXML | 
					
						
							| 
									
										
										
										
											2008-01-04 14:24:42 +00:00
										 |  |  |   '';
 | 
					
						
							| 
									
										
										
										
											2009-09-18 15:10:37 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-08-25 14:33:17 +02:00
										 |  |  |   sources = sourceFilesBySuffices ./. [".xml"]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   copySources = | 
					
						
							|  |  |  |     ''
 | 
					
						
							|  |  |  |       cp -prd $sources/* . # */ | 
					
						
							| 
									
										
										
										
											2014-08-27 12:24:10 +02:00
										 |  |  |       chmod -R u+w . | 
					
						
							|  |  |  |       cp ${../../modules/services/databases/postgresql.xml} configuration/postgresql.xml | 
					
						
							| 
									
										
										
										
											2014-08-25 14:33:17 +02:00
										 |  |  |       ln -s ${optionsDocBook} options-db.xml | 
					
						
							|  |  |  |       echo "${version}" > version | 
					
						
							|  |  |  |     '';
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-08-11 12:28:53 +00:00
										 |  |  | in rec { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-08-27 11:53:08 +02:00
										 |  |  |   # Tools-friendly version of the list of NixOS options. | 
					
						
							|  |  |  |   options = options'; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-08-11 12:28:53 +00:00
										 |  |  |   # Generate the NixOS manual. | 
					
						
							| 
									
										
										
										
											2014-08-09 16:30:44 +02:00
										 |  |  |   manual = stdenv.mkDerivation { | 
					
						
							| 
									
										
										
										
											2008-01-04 14:24:42 +00:00
										 |  |  |     name = "nixos-manual"; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-08-25 14:33:17 +02:00
										 |  |  |     inherit sources; | 
					
						
							| 
									
										
										
										
											2008-01-04 14:24:42 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-08-09 16:30:44 +02:00
										 |  |  |     buildInputs = [ libxml2 libxslt ]; | 
					
						
							| 
									
										
										
										
											2008-01-04 14:24:42 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     buildCommand = ''
 | 
					
						
							| 
									
										
										
										
											2014-08-25 14:33:17 +02:00
										 |  |  |       ${copySources} | 
					
						
							| 
									
										
										
										
											2009-07-14 15:47:03 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-05 13:17:45 +00:00
										 |  |  |       # Check the validity of the manual sources. | 
					
						
							|  |  |  |       xmllint --noout --nonet --xinclude --noxincludenode \ | 
					
						
							| 
									
										
										
										
											2014-08-09 16:30:44 +02:00
										 |  |  |         --relaxng ${docbook5}/xml/rng/docbook/docbook.rng \ | 
					
						
							| 
									
										
										
										
											2009-10-05 13:17:45 +00:00
										 |  |  |         manual.xml | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       # Generate the HTML manual. | 
					
						
							| 
									
										
										
										
											2009-07-14 15:47:03 +00:00
										 |  |  |       dst=$out/share/doc/nixos | 
					
						
							| 
									
										
										
										
											2014-06-30 14:56:10 +02:00
										 |  |  |       mkdir -p $dst | 
					
						
							| 
									
										
										
										
											2014-08-25 19:08:12 +02: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 12:24:10 +02:00
										 |  |  |         --param chunk.section.depth 0 \ | 
					
						
							| 
									
										
										
										
											2014-08-25 19:08:12 +02:00
										 |  |  |         --param chunk.first.sections 1 \ | 
					
						
							|  |  |  |         --param use.id.as.filename 1 \ | 
					
						
							| 
									
										
										
										
											2014-08-26 15:13:17 +02:00
										 |  |  |         --stringparam generate.toc "book toc chapter toc appendix toc" \ | 
					
						
							| 
									
										
										
										
											2014-08-25 19:08:12 +02:00
										 |  |  |         --nonet --xinclude --output $dst/ \ | 
					
						
							|  |  |  |         ${docbook5_xsl}/xml/xsl/docbook/xhtml/chunkfast.xsl ./manual.xml | 
					
						
							| 
									
										
										
										
											2009-09-18 15:10:37 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-25 11:54:24 -04:00
										 |  |  |       mkdir -p $dst/images/callouts | 
					
						
							| 
									
										
										
										
											2014-08-09 16:30:44 +02:00
										 |  |  |       cp ${docbook5_xsl}/xml/xsl/docbook/images/callouts/*.gif $dst/images/callouts/
 | 
					
						
							| 
									
										
										
										
											2013-01-09 13:43:57 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-07-14 15:47:03 +00:00
										 |  |  |       cp ${./style.css} $dst/style.css | 
					
						
							| 
									
										
										
										
											2011-09-14 18:20:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-10-24 20:06:02 +02:00
										 |  |  |       mkdir -p $out/nix-support | 
					
						
							|  |  |  |       echo "nix-build out $out" >> $out/nix-support/hydra-build-products | 
					
						
							| 
									
										
										
										
											2014-09-10 15:03:49 +02:00
										 |  |  |       echo "doc manual $dst" >> $out/nix-support/hydra-build-products | 
					
						
							| 
									
										
										
										
											2012-07-25 11:54:24 -04:00
										 |  |  |     ''; # */
 | 
					
						
							| 
									
										
										
										
											2013-10-24 20:06:02 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     meta.description = "The NixOS manual in HTML format"; | 
					
						
							| 
									
										
										
										
											2010-08-11 12:28:53 +00:00
										 |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-08-09 16:30:44 +02:00
										 |  |  |   manualPDF = stdenv.mkDerivation { | 
					
						
							|  |  |  |     name = "nixos-manual-pdf"; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-08-25 14:33:17 +02:00
										 |  |  |     inherit sources; | 
					
						
							| 
									
										
										
										
											2014-08-09 16:30:44 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     buildInputs = [ libxml2 libxslt dblatex tetex ]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     buildCommand = ''
 | 
					
						
							|  |  |  |       # TeX needs a writable font cache. | 
					
						
							|  |  |  |       export VARTEXFONTS=$TMPDIR/texfonts | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-08-25 14:33:17 +02:00
										 |  |  |       ${copySources} | 
					
						
							| 
									
										
										
										
											2014-08-09 16:30:44 +02: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 12:28:53 +00:00
										 |  |  |   # Generate the NixOS manpages. | 
					
						
							| 
									
										
										
										
											2014-08-09 16:30:44 +02:00
										 |  |  |   manpages = stdenv.mkDerivation { | 
					
						
							| 
									
										
										
										
											2010-08-11 12:28:53 +00:00
										 |  |  |     name = "nixos-manpages"; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-08-25 14:33:17 +02:00
										 |  |  |     inherit sources; | 
					
						
							| 
									
										
										
										
											2010-08-11 12:28:53 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-08-09 16:30:44 +02:00
										 |  |  |     buildInputs = [ libxml2 libxslt ]; | 
					
						
							| 
									
										
										
										
											2010-08-11 12:28:53 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     buildCommand = ''
 | 
					
						
							| 
									
										
										
										
											2014-08-25 14:33:17 +02:00
										 |  |  |       ${copySources} | 
					
						
							| 
									
										
										
										
											2010-08-11 12:28:53 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |       # Check the validity of the manual sources. | 
					
						
							|  |  |  |       xmllint --noout --nonet --xinclude --noxincludenode \ | 
					
						
							| 
									
										
										
										
											2014-08-09 16:30:44 +02:00
										 |  |  |         --relaxng ${docbook5}/xml/rng/docbook/docbook.rng \ | 
					
						
							| 
									
										
										
										
											2010-08-11 12:28:53 +00:00
										 |  |  |         ./man-pages.xml | 
					
						
							| 
									
										
										
										
											2009-07-14 15:47:03 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-05 13:17:45 +00:00
										 |  |  |       # Generate manpages. | 
					
						
							| 
									
										
										
										
											2013-10-24 20:06:02 +02:00
										 |  |  |       mkdir -p $out/share/man | 
					
						
							| 
									
										
										
										
											2009-07-14 15:47:03 +00:00
										 |  |  |       xsltproc --nonet --xinclude \ | 
					
						
							|  |  |  |         --param man.output.in.separate.dir 1 \ | 
					
						
							|  |  |  |         --param man.output.base.dir "'$out/share/man/'" \ | 
					
						
							| 
									
										
										
										
											2009-10-05 23:15:06 +00:00
										 |  |  |         --param man.endnotes.are.numbered 0 \ | 
					
						
							| 
									
										
										
										
											2014-08-09 16:30:44 +02:00
										 |  |  |         ${docbook5_xsl}/xml/xsl/docbook/manpages/docbook.xsl \ | 
					
						
							| 
									
										
										
										
											2009-07-14 15:47:03 +00:00
										 |  |  |         ./man-pages.xml | 
					
						
							| 
									
										
										
										
											2008-01-04 14:24:42 +00:00
										 |  |  |     '';
 | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-14 18:20:50 +00:00
										 |  |  | } |