summary refs log tree commit diff
path: root/nixos/doc/manual/default.nix
diff options
context:
space:
mode:
authorJan Malakhovski <oxij@oxij.org>2016-04-20 21:57:33 +0000
committerJan Malakhovski <oxij@oxij.org>2017-12-07 21:26:35 +0000
commit67ec6371d5d38224f10432dcf4d10eacd85cc13b (patch)
treeaf2985ee6691654656a041b2efd24ccb4536e1d6 /nixos/doc/manual/default.nix
parent182463dc79bb8dd4ca09ae54e8fcc1637d501c6a (diff)
downloadnixpkgs-67ec6371d5d38224f10432dcf4d10eacd85cc13b.tar
nixpkgs-67ec6371d5d38224f10432dcf4d10eacd85cc13b.tar.gz
nixpkgs-67ec6371d5d38224f10432dcf4d10eacd85cc13b.tar.bz2
nixpkgs-67ec6371d5d38224f10432dcf4d10eacd85cc13b.tar.lz
nixpkgs-67ec6371d5d38224f10432dcf4d10eacd85cc13b.tar.xz
nixpkgs-67ec6371d5d38224f10432dcf4d10eacd85cc13b.tar.zst
nixpkgs-67ec6371d5d38224f10432dcf4d10eacd85cc13b.zip
nixos, lib: implement relatedPackages option
This allows one to specify "related packages" in NixOS that get rendered into
the configuration.nix(5) man page. The interface philosophy is pretty much
stolen from TeX bibliography.
Diffstat (limited to 'nixos/doc/manual/default.nix')
-rw-r--r--nixos/doc/manual/default.nix18
1 files changed, 16 insertions, 2 deletions
diff --git a/nixos/doc/manual/default.nix b/nixos/doc/manual/default.nix
index 9a96f201a39..95363c2458f 100644
--- a/nixos/doc/manual/default.nix
+++ b/nixos/doc/manual/default.nix
@@ -15,13 +15,27 @@ let
     else if builtins.isFunction x then "<function>"
     else x;
 
-  # Clean up declaration sites to not refer to the NixOS source tree.
+  # Generate DocBook documentation for a list of packages
+  genRelatedPackages = packages:
+    let
+      unpack = p: if lib.isString p then { name = p; } else p;
+      describe = { name, package ? pkgs.${name}, comment ? "" }:
+          "<listitem>"
+        + "<para><option>pkgs.${name}</option> (${package.name}): ${package.meta.description or "???"}.</para>"
+        + lib.optionalString (comment != "") "\n<para>${comment}</para>"
+        # Lots of `longDescription's break DocBook, so we just wrap them into <programlisting>
+        + lib.optionalString (package.meta ? longDescription) "\n<programlisting>${package.meta.longDescription}</programlisting>"
+        + "</listitem>";
+    in "<itemizedlist>${lib.concatStringsSep "\n" (map (p: describe (unpack p)) packages)}</itemizedlist>";
+
   optionsList' = lib.flip map optionsList (opt: opt // {
+    # Clean up declaration sites to not refer to the NixOS source tree.
     declarations = map stripAnyPrefixes opt.declarations;
   }
   // lib.optionalAttrs (opt ? example) { example = substFunction opt.example; }
   // lib.optionalAttrs (opt ? default) { default = substFunction opt.default; }
-  // lib.optionalAttrs (opt ? type) { type = substFunction opt.type; });
+  // lib.optionalAttrs (opt ? type) { type = substFunction opt.type; }
+  // lib.optionalAttrs (opt ? relatedPackages) { relatedPackages = genRelatedPackages opt.relatedPackages; });
 
   # We need to strip references to /nix/store/* from options,
   # including any `extraSources` if some modules came from elsewhere,