57 lines
1.7 KiB
Nix
57 lines
1.7 KiB
Nix
with builtins;
|
|
with import ./utils.nix;
|
|
|
|
let
|
|
|
|
showCommand =
|
|
{ command, section, def }:
|
|
"${section} Name\n\n"
|
|
+ "`${command}` - ${def.description}\n\n"
|
|
+ "${section} Synopsis\n\n"
|
|
+ showSynopsis { inherit command; args = def.args; }
|
|
+ (if def ? doc
|
|
then "${section} Description\n\n" + def.doc + "\n\n"
|
|
else "")
|
|
+ (let s = showFlags def.flags; in
|
|
if s != ""
|
|
then "${section} Flags\n\n${s}"
|
|
else "")
|
|
+ (if def.examples or [] != []
|
|
then
|
|
"${section} Examples\n\n"
|
|
+ concatStrings (map ({ description, command }: "${description}\n\n```console\n${command}\n```\n\n") def.examples)
|
|
else "")
|
|
+ (if def.commands or [] != []
|
|
then concatStrings (
|
|
map (name:
|
|
"# Subcommand `${command} ${name}`\n\n"
|
|
+ showCommand { command = command + " " + name; section = "##"; def = def.commands.${name}; })
|
|
(attrNames def.commands))
|
|
else "");
|
|
|
|
showFlags = flags:
|
|
concatStrings
|
|
(map (longName:
|
|
let flag = flags.${longName}; in
|
|
if flag.category or "" != "config"
|
|
then
|
|
" - `--${longName}`"
|
|
+ (if flag ? shortName then " / `${flag.shortName}`" else "")
|
|
+ (if flag ? labels then " " + (concatStringsSep " " (map (s: "*${s}*") flag.labels)) else "")
|
|
+ " \n"
|
|
+ " " + flag.description + "\n\n"
|
|
else "")
|
|
(attrNames flags));
|
|
|
|
showSynopsis =
|
|
{ command, args }:
|
|
"`${command}` [*flags*...] ${concatStringsSep " "
|
|
(map (arg: "*${arg.label}*" + (if arg ? arity then "" else "...")) args)}\n\n";
|
|
|
|
in
|
|
|
|
command:
|
|
|
|
"Title: nix\n\n"
|
|
+ showCommand { command = "nix"; section = "#"; def = command; }
|