summaryrefslogtreecommitdiff
path: root/oh-my-zsh/plugins/command-not-found
diff options
context:
space:
mode:
Diffstat (limited to 'oh-my-zsh/plugins/command-not-found')
-rw-r--r--oh-my-zsh/plugins/command-not-found/README.md34
-rw-r--r--oh-my-zsh/plugins/command-not-found/command-not-found.plugin.zsh69
2 files changed, 103 insertions, 0 deletions
diff --git a/oh-my-zsh/plugins/command-not-found/README.md b/oh-my-zsh/plugins/command-not-found/README.md
new file mode 100644
index 0000000..5a373c5
--- /dev/null
+++ b/oh-my-zsh/plugins/command-not-found/README.md
@@ -0,0 +1,34 @@
+# command-not-found plugin
+
+This plugin uses the command-not-found package for zsh to provide suggested packages to be installed if a command cannot be found.
+
+To use it, add `command-not-found` to the plugins array of your zshrc file:
+
+```zsh
+plugins=(... command-not-found)
+```
+
+An example of how this plugin works in Ubuntu:
+```
+$ mutt
+The program 'mutt' can be found in the following packages:
+ * mutt
+ * mutt-kz
+ * mutt-patched
+Try: sudo apt install <selected package>
+```
+
+### Supported platforms
+
+It works out of the box with the command-not-found packages for:
+
+- [Ubuntu](https://www.porcheron.info/command-not-found-for-zsh/)
+- [Debian](https://packages.debian.org/search?keywords=command-not-found)
+- [Arch Linux](https://wiki.archlinux.org/index.php/Pkgfile#Command_not_found)
+- [macOS (Homebrew)](https://github.com/Homebrew/homebrew-command-not-found)
+- [Fedora](https://fedoraproject.org/wiki/Features/PackageKitCommandNotFound)
+- [NixOS](https://github.com/NixOS/nixpkgs/tree/master/nixos/modules/programs/command-not-found)
+- [Termux](https://github.com/termux/command-not-found)
+- [SUSE](https://www.unix.com/man-page/suse/1/command-not-found/)
+
+You can add support for other platforms by submitting a Pull Request.
diff --git a/oh-my-zsh/plugins/command-not-found/command-not-found.plugin.zsh b/oh-my-zsh/plugins/command-not-found/command-not-found.plugin.zsh
new file mode 100644
index 0000000..cb8a898
--- /dev/null
+++ b/oh-my-zsh/plugins/command-not-found/command-not-found.plugin.zsh
@@ -0,0 +1,69 @@
+## Platforms with a built-in command-not-found handler init file
+
+for file (
+ # Arch Linux. Must have pkgfile installed: https://wiki.archlinux.org/index.php/Pkgfile#Command_not_found
+ /usr/share/doc/pkgfile/command-not-found.zsh
+ # macOS (M1 and classic Homebrew): https://github.com/Homebrew/homebrew-command-not-found
+ /opt/homebrew/Library/Taps/homebrew/homebrew-command-not-found/handler.sh
+ /usr/local/Homebrew/Library/Taps/homebrew/homebrew-command-not-found/handler.sh
+); do
+ if [[ -r "$file" ]]; then
+ source "$file"
+ unset file
+ return 0
+ fi
+done
+unset file
+
+
+## Platforms with manual command_not_found_handler() setup
+
+# Debian and derivatives: https://launchpad.net/ubuntu/+source/command-not-found
+if [[ -x /usr/lib/command-not-found || -x /usr/share/command-not-found/command-not-found ]]; then
+ command_not_found_handler() {
+ if [[ -x /usr/lib/command-not-found ]]; then
+ /usr/lib/command-not-found -- "$1"
+ return $?
+ elif [[ -x /usr/share/command-not-found/command-not-found ]]; then
+ /usr/share/command-not-found/command-not-found -- "$1"
+ return $?
+ else
+ printf "zsh: command not found: %s\n" "$1" >&2
+ return 127
+ fi
+ }
+fi
+
+# Fedora: https://fedoraproject.org/wiki/Features/PackageKitCommandNotFound
+if [[ -x /usr/libexec/pk-command-not-found ]]; then
+ command_not_found_handler() {
+ if [[ -S /var/run/dbus/system_bus_socket && -x /usr/libexec/packagekitd ]]; then
+ /usr/libexec/pk-command-not-found "$@"
+ return $?
+ fi
+
+ printf "zsh: command not found: %s\n" "$1" >&2
+ return 127
+ }
+fi
+
+# NixOS: https://github.com/NixOS/nixpkgs/tree/master/nixos/modules/programs/command-not-found
+if [[ -x /run/current-system/sw/bin/command-not-found ]]; then
+ command_not_found_handler() {
+ /run/current-system/sw/bin/command-not-found "$@"
+ }
+fi
+
+# Termux: https://github.com/termux/command-not-found
+if [[ -x /data/data/com.termux/files/usr/libexec/termux/command-not-found ]]; then
+ command_not_found_handler() {
+ /data/data/com.termux/files/usr/libexec/termux/command-not-found "$1"
+ }
+fi
+
+# SUSE and derivates: https://www.unix.com/man-page/suse/1/command-not-found/
+if [[ -x /usr/bin/command-not-found ]]; then
+ command_not_found_handler() {
+ /usr/bin/command-not-found "$1"
+ }
+fi