about summary refs log tree commit diff
path: root/nixos/doc/manual
diff options
context:
space:
mode:
authorJan Malakhovski <oxij@oxij.org>2016-04-20 21:46:02 +0000
committerJan Malakhovski <oxij@oxij.org>2018-02-09 19:51:05 +0000
commita7d75ab6489dc5834e8402db374b4d0f1e774d53 (patch)
treede9ebcf6ee6a521c2de5488b80b387820fedb9c4 /nixos/doc/manual
parentee3220440da59e39154b520353a3d03a1abf3405 (diff)
downloadnixlib-a7d75ab6489dc5834e8402db374b4d0f1e774d53.tar
nixlib-a7d75ab6489dc5834e8402db374b4d0f1e774d53.tar.gz
nixlib-a7d75ab6489dc5834e8402db374b4d0f1e774d53.tar.bz2
nixlib-a7d75ab6489dc5834e8402db374b4d0f1e774d53.tar.lz
nixlib-a7d75ab6489dc5834e8402db374b4d0f1e774d53.tar.xz
nixlib-a7d75ab6489dc5834e8402db374b4d0f1e774d53.tar.zst
nixlib-a7d75ab6489dc5834e8402db374b4d0f1e774d53.zip
nixos/doc: push all the `enable*' and `package*` options to the top of their option group
Why? Because this way configuration.nix(5) can be read linearly.

Before:

> virtualisation.xen.bootParams
> ...
> virtualisation.xen.enable
> ...
> virtualisation.xen.package
> ...

After:

> virtualisation.xen.enable
> virtualisation.xen.package
> virtualisation.xen.bootParams
> ...
Diffstat (limited to 'nixos/doc/manual')
-rw-r--r--nixos/doc/manual/default.nix22
1 files changed, 18 insertions, 4 deletions
diff --git a/nixos/doc/manual/default.nix b/nixos/doc/manual/default.nix
index 8079a2feb29f..9ee70ba59b79 100644
--- a/nixos/doc/manual/default.nix
+++ b/nixos/doc/manual/default.nix
@@ -6,7 +6,7 @@ let
   lib = pkgs.lib;
 
   # Remove invisible and internal options.
-  optionsList = lib.filter (opt: opt.visible && !opt.internal) (lib.optionAttrSetToDocList options);
+  optionsListVisible = lib.filter (opt: opt.visible && !opt.internal) (lib.optionAttrSetToDocList options);
 
   # Replace functions by the string <function>
   substFunction = x:
@@ -16,7 +16,7 @@ let
     else x;
 
   # Clean up declaration sites to not refer to the NixOS source tree.
-  optionsList' = lib.flip map optionsList (opt: opt // {
+  optionsListDesc = lib.flip map optionsListVisible (opt: opt // {
     declarations = map stripAnyPrefixes opt.declarations;
   }
   // lib.optionalAttrs (opt ? example) { example = substFunction opt.example; }
@@ -32,8 +32,22 @@ let
   prefixesToStrip = map (p: "${toString p}/") ([ ../../.. ] ++ extraSources);
   stripAnyPrefixes = lib.flip (lib.fold lib.removePrefix) prefixesToStrip;
 
+  # Custom "less" that pushes up all the things ending in ".enable*"
+  # and ".package"
+  optionListLess = a: b:
+    let
+      splt = lib.splitString ".";
+      ise = lib.hasPrefix "enable";
+      isp = lib.hasPrefix "package";
+      cmp = lib.splitByAndCompare ise lib.compare
+                                 (lib.splitByAndCompare isp lib.compare lib.compare);
+    in lib.compareLists cmp (splt a) (splt b) < 0;
+
+  # Customly sort option list for the man page.
+  optionsList = lib.sort (a: b: optionListLess a.name b.name) optionsListDesc;
+
   # Convert the list of options into an XML file.
-  optionsXML = builtins.toFile "options.xml" (builtins.toXML optionsList');
+  optionsXML = builtins.toFile "options.xml" (builtins.toXML optionsList);
 
   optionsDocBook = runCommand "options-db.xml" {} ''
     optionsXML=${optionsXML}
@@ -191,7 +205,7 @@ in rec {
       mkdir -p $dst
 
       cp ${builtins.toFile "options.json" (builtins.unsafeDiscardStringContext (builtins.toJSON
-        (builtins.listToAttrs (map (o: { name = o.name; value = removeAttrs o ["name" "visible" "internal"]; }) optionsList'))))
+        (builtins.listToAttrs (map (o: { name = o.name; value = removeAttrs o ["name" "visible" "internal"]; }) optionsList))))
       } $dst/options.json
 
       mkdir -p $out/nix-support