From 6cba6dc61bb0530ad03419364c19b299c6c9c6d4 Mon Sep 17 00:00:00 2001 From: Spencer Whitt Date: Mon, 12 Jan 2015 03:45:48 -0500 Subject: [PATCH] command-not-found: Add ZSH Support --- nixos/modules/module-list.nix | 2 +- .../command-not-found.nix | 20 +++++++++++++++++++ .../command-not-found.pl | 0 3 files changed, 21 insertions(+), 1 deletion(-) rename nixos/modules/programs/{bash => command-not-found}/command-not-found.nix (68%) rename nixos/modules/programs/{bash => command-not-found}/command-not-found.pl (100%) diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix index 844fae536e9..c74ba7557e3 100755 --- a/nixos/modules/module-list.nix +++ b/nixos/modules/module-list.nix @@ -54,8 +54,8 @@ ./misc/version.nix ./programs/atop.nix ./programs/bash/bash.nix - ./programs/bash/command-not-found.nix ./programs/blcr.nix + ./programs/command-not-found/command-not-found.nix ./programs/dconf.nix ./programs/environment.nix ./programs/info.nix diff --git a/nixos/modules/programs/bash/command-not-found.nix b/nixos/modules/programs/command-not-found/command-not-found.nix similarity index 68% rename from nixos/modules/programs/bash/command-not-found.nix rename to nixos/modules/programs/command-not-found/command-not-found.nix index 8c86d48b080..bead2dcdcf9 100644 --- a/nixos/modules/programs/bash/command-not-found.nix +++ b/nixos/modules/programs/command-not-found/command-not-found.nix @@ -44,6 +44,26 @@ in } ''; + programs.zsh.interactiveShellInit = + '' + # This function is called whenever a command is not found. + command_not_found_handler() { + local p=/run/current-system/sw/bin/command-not-found + if [ -x $p -a -f /nix/var/nix/profiles/per-user/root/channels/nixos/programs.sqlite ]; then + # Run the helper program. + $p "$1" + + # Retry the command if we just installed it. + if [ $? = 126 ]; then + "$@" + fi + else + # Indicate than there was an error so ZSH falls back to its default handler + return 127 + fi + } + ''; + environment.systemPackages = [ commandNotFound ]; # TODO: tab completion for uninstalled commands! :-) diff --git a/nixos/modules/programs/bash/command-not-found.pl b/nixos/modules/programs/command-not-found/command-not-found.pl similarity index 100% rename from nixos/modules/programs/bash/command-not-found.pl rename to nixos/modules/programs/command-not-found/command-not-found.pl