aboutsummaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
Diffstat (limited to 'doc')
-rw-r--r--doc/manual/generate-manpage.nix23
-rw-r--r--doc/manual/utils.nix10
2 files changed, 28 insertions, 5 deletions
diff --git a/doc/manual/generate-manpage.nix b/doc/manual/generate-manpage.nix
index c2c748464..30152088d 100644
--- a/doc/manual/generate-manpage.nix
+++ b/doc/manual/generate-manpage.nix
@@ -13,12 +13,27 @@ let
+ showSynopsis { inherit command; args = def.args; }
+ (if def.commands or {} != {}
then
+ let
+ categories = sort (x: y: x.id < y.id) (unique (map (cmd: cmd.category) (attrValues def.commands)));
+ listCommands = cmds:
+ concatStrings (map (name:
+ "* [`${command} ${name}`](./${appendName filename name}.md) - ${cmds.${name}.description}\n")
+ (attrNames cmds));
+ in
"where *subcommand* is one of the following:\n\n"
# FIXME: group by category
- + concatStrings (map (name:
- "* [`${command} ${name}`](./${appendName filename name}.md) - ${def.commands.${name}.description}\n")
- (attrNames def.commands))
- + "\n"
+ + (if length categories > 1
+ then
+ concatStrings (map
+ (cat:
+ "**${toString cat.description}:**\n\n"
+ + listCommands (filterAttrs (n: v: v.category == cat) def.commands)
+ + "\n"
+ ) categories)
+ + "\n"
+ else
+ listCommands def.commands
+ + "\n")
else "")
+ (if def ? doc
then def.doc + "\n\n"
diff --git a/doc/manual/utils.nix b/doc/manual/utils.nix
index 50150bf3e..d4b18472f 100644
--- a/doc/manual/utils.nix
+++ b/doc/manual/utils.nix
@@ -1,7 +1,15 @@
with builtins;
-{
+rec {
splitLines = s: filter (x: !isList x) (split "\n" s);
concatStrings = concatStringsSep "";
+
+ # FIXME: O(n^2)
+ unique = foldl' (acc: e: if elem e acc then acc else acc ++ [ e ]) [];
+
+ nameValuePair = name: value: { inherit name value; };
+
+ filterAttrs = pred: set:
+ listToAttrs (concatMap (name: let v = set.${name}; in if pred name v then [(nameValuePair name v)] else []) (attrNames set));
}