aboutsummaryrefslogtreecommitdiff
path: root/doc/manual/local.mk
diff options
context:
space:
mode:
authorAlexander Bantyev <balsoft@balsoft.ru>2023-03-23 19:27:41 +0400
committerValentin Gagarin <valentin.gagarin@tweag.io>2023-03-30 09:46:28 +0200
commit36b059748d06e39fb3e588463bbc4ddcd2255f27 (patch)
treec56ec5afaa12e37ababda1132c189f9334338974 /doc/manual/local.mk
parent84c2c09ec2889d3caf1841140cc2bcb4ab34228b (diff)
Split nix-env and nix-store documentation per-subcommand
Documentation on "classic" commands with many sub-commands are notoriously hard to discover due to lack of overview and anchor links. Additionally the information on common options and environment variables is not accessible offline in man pages, and therefore often overlooked by readers. With this change, each sub-command of nix-store and nix-env gets its own page in the manual (listed in the table of contents), and each own man page. Also, man pages for each subcommand now (again) list common options and environment variables. While this makes each page quite long and some common parameters don't apply, this should still make it easier to navigate as that additional information was not accessible on the command line at all. It is now possible to run 'nix-store --<subcommand> --help` to display help pages for the given subcommand. Co-authored-by: Valentin Gagarin <valentin.gagarin@tweag.io>
Diffstat (limited to 'doc/manual/local.mk')
-rw-r--r--doc/manual/local.mk27
1 files changed, 27 insertions, 0 deletions
diff --git a/doc/manual/local.mk b/doc/manual/local.mk
index 284a85ab5..a38046701 100644
--- a/doc/manual/local.mk
+++ b/doc/manual/local.mk
@@ -13,6 +13,13 @@ man-pages := $(foreach n, \
nix.conf.5 nix-daemon.8 \
, $(d)/$(n))
+# man pages for subcommands
+# convert from `$(d)/src/command-ref/nix-{1}/{2}.md` to `$(d)/nix-{1}-{2}.1`
+# FIXME: unify with how nix3-cli man pages are generated
+man-pages += $(foreach subcommand, \
+ $(filter-out %opt-common.md %env-common.md, $(wildcard $(d)/src/command-ref/nix-*/*.md)), \
+ $(d)/$(subst /,-,$(subst $(d)/src/command-ref/,,$(subst .md,.1,$(subcommand)))))
+
clean-files += $(d)/*.1 $(d)/*.5 $(d)/*.8
# Provide a dummy environment for nix, so that it will not access files outside the macOS sandbox.
@@ -38,6 +45,26 @@ define process-includes
done < <(grep '{{#include' $(1))
endef
+$(d)/nix-env-%.1: $(d)/src/command-ref/nix-env/%.md
+ @printf "Title: %s\n\n" "$(subst nix-env-,nix-env --,$$(basename "$@" .1))" > $^.tmp
+ $(render-subcommand)
+
+$(d)/nix-store-%.1: $(d)/src/command-ref/nix-store/%.md
+ @printf -- 'Title: %s\n\n' "$(subst nix-store-,nix-store --,$$(basename "$@" .1))" > $^.tmp
+ $(render-subcommand)
+
+# FIXME: there surely is some more deduplication to be achieved here with even darker Make magic
+define render-subcommand
+ @cat $^ >> $^.tmp
+ @$(call process-includes,$^,$^.tmp)
+ $(trace-gen) lowdown -sT man --nroff-nolinks -M section=1 $^.tmp -o $@
+ @# fix up `lowdown`'s automatic escaping of `--`
+ @# https://github.com/kristapsdz/lowdown/blob/edca6ce6d5336efb147321a43c47a698de41bb7c/entity.c#L202
+ @sed -i 's/\e\[u2013\]/--/' $@
+ @rm $^.tmp
+endef
+
+
$(d)/%.1: $(d)/src/command-ref/%.md
@printf "Title: %s\n\n" "$$(basename $@ .1)" > $^.tmp
@cat $^ >> $^.tmp