aboutsummaryrefslogtreecommitdiff
path: root/misc
diff options
context:
space:
mode:
authormidchildan <git@midchildan.org>2022-04-25 01:23:49 +0900
committermidchildan <git@midchildan.org>2022-04-25 02:21:41 +0900
commitc67d8876c34bdcfbc0d3ea9e68e68dc90fbdaeac (patch)
tree5ac896d4754e4b18854fa9a0af5ea1bbff35ea9c /misc
parent7f814d6d9af9d78f922d59115a94078f807676a8 (diff)
feat: add integration with zsh's run-help
Diffstat (limited to 'misc')
-rw-r--r--misc/zsh/local.mk1
-rw-r--r--misc/zsh/run-help-nix97
2 files changed, 98 insertions, 0 deletions
diff --git a/misc/zsh/local.mk b/misc/zsh/local.mk
index 418fb1377..0b4e294fb 100644
--- a/misc/zsh/local.mk
+++ b/misc/zsh/local.mk
@@ -1 +1,2 @@
$(eval $(call install-file-as, $(d)/completion.zsh, $(datarootdir)/zsh/site-functions/_nix, 0644))
+$(eval $(call install-file-as, $(d)/run-help-nix, $(datarootdir)/zsh/site-functions/run-help-nix, 0644))
diff --git a/misc/zsh/run-help-nix b/misc/zsh/run-help-nix
new file mode 100644
index 000000000..534b51ec2
--- /dev/null
+++ b/misc/zsh/run-help-nix
@@ -0,0 +1,97 @@
+emulate -L zsh
+
+# run-help is a zsh widget that can be bound to a key. It mainly looks up the
+# man page for the currently typed in command.
+#
+# Although run-help works for any command without requiring special support,
+# it can only deduce the right man page based solely on the name of the
+# command. Programs like Nix provide better integration with run-help by
+# helping zsh identify Nix subcommands and their corresponding man pages. This
+# is what this function does.
+#
+# To actually use run-help on zsh, place the following lines in your .zshrc:
+#
+# (( $+aliases[run-help] )) && unalias run-help
+# autoload -Uz run-help run-help-nix
+#
+# Then also assign run-help to any key of choice:
+#
+# bindkey '^[h' run-help
+
+if (( $# == 0 )); then
+ man nix
+ return
+fi
+
+while [[ "$#" != 0 && "$1" == -* ]]; do
+ shift
+done
+
+case "$1" in
+ flake)
+ case "$2" in
+ archive|check|clone|info|init|lock|metadata|new|prefetch|show|update)
+ man "nix3-$1-$2" ;;
+ *)
+ man "nix3-$1" ;;
+ esac ;;
+ hash)
+ case "$2" in
+ file|path|to-base16|to-base32|to-base64|to-sri)
+ man "nix3-$1-$2" ;;
+ *)
+ man "nix3-$1" ;;
+ esac ;;
+ key)
+ case "$2" in
+ convert-secret-to-public|generate-secret)
+ man "nix3-$1-$2" ;;
+ *)
+ man "nix3-$1" ;;
+ esac ;;
+ nar)
+ case "$2" in
+ cat|dump-path|ls)
+ man "nix3-$1-$2" ;;
+ *)
+ man "nix3-$1" ;;
+ esac ;;
+ profile)
+ case "$2" in
+ diff-closures|history|install|list|remove|rollback|upgrade|wipe-history)
+ man "nix3-$1-$2" ;;
+ *)
+ man "nix3-$1" ;;
+ esac ;;
+ realisation)
+ case "$2" in
+ info)
+ man "nix3-$1-$2" ;;
+ *)
+ man "nix3-$1" ;;
+ esac ;;
+ registry)
+ case "$2" in
+ add|list|pin|remove)
+ man "nix3-$1-$2" ;;
+ *)
+ man "nix3-$1" ;;
+ esac ;;
+ store)
+ case "$2" in
+ add-file|add-path|cat|copy-sigs|delete|diff-closures|dump-path|gc|ls)
+ ;& # fallthrough
+ make-content-addressable|optimise|ping|prefetch-file|repair|sign|verify)
+ man "nix3-$1-$2" ;;
+ *)
+ man "nix3-$1" ;;
+ esac ;;
+ *)
+ if man -w "nix3-$1" >/dev/null 2>&1; then
+ man "nix3-$1"
+ else
+ man nix
+ fi ;;
+esac
+
+return $?