diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix index 844fae536e95..c74ba7557e3d 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 8c86d48b0808..bead2dcdcf90 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