diff options
author | Jörg Thalheim <Mic92@users.noreply.github.com> | 2017-04-18 17:18:20 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-04-18 17:18:20 +0200 |
commit | b2ed3db94aea937fc77fcbd4e1ce4a51fd18def9 (patch) | |
tree | f84fcef258b767253e90a7dc4fd2f43c8ef960b1 /nixos | |
parent | 91ad6b35970b1378ac99de209b4ec48318704b07 (diff) | |
parent | 5a5db609e5bd83bc589f36eef394f3ad172d6648 (diff) |
Merge pull request #24962 from makefu/modules/command-not-found/refactor
Refactor command-not-found
Diffstat (limited to 'nixos')
-rw-r--r-- | nixos/modules/programs/command-not-found/command-not-found.nix | 93 | ||||
-rw-r--r-- | nixos/modules/programs/command-not-found/command-not-found.pl | 2 |
2 files changed, 56 insertions, 39 deletions
diff --git a/nixos/modules/programs/command-not-found/command-not-found.nix b/nixos/modules/programs/command-not-found/command-not-found.nix index 9741aa7ca539..6fb926fe1d5f 100644 --- a/nixos/modules/programs/command-not-found/command-not-found.nix +++ b/nixos/modules/programs/command-not-found/command-not-found.nix @@ -8,13 +8,14 @@ with lib; let - + cfg = config.programs.command-not-found; commandNotFound = pkgs.substituteAll { name = "command-not-found"; dir = "bin"; src = ./command-not-found.pl; isExecutable = true; inherit (pkgs) perl; + inherit (cfg) dbPath; perlFlags = concatStrings (map (path: "-I ${path}/lib/perl5/site_perl ") [ pkgs.perlPackages.DBI pkgs.perlPackages.DBDSQLite pkgs.perlPackages.StringShellQuote ]); }; @@ -22,50 +23,66 @@ let in { + options.programs.command-not-found = { + + enable = mkEnableOption "command-not-found hook for interactive shell"; + + dbPath = mkOption { + default = "/nix/var/nix/profiles/per-user/root/channels/nixos/programs.sqlite" ; + description = '' + Absolute path to programs.sqlite. + + By default this file will be provided by your channel + (nixexprs.tar.xz). + ''; + type = types.path; + }; + }; - programs.bash.interactiveShellInit = - '' - # This function is called whenever a command is not found. - command_not_found_handle() { - 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 "$@" - # Retry the command if we just installed it. - if [ $? = 126 ]; then - "$@" + config = mkIf cfg.enable { + programs.bash.interactiveShellInit = + '' + # This function is called whenever a command is not found. + command_not_found_handle() { + local p=${commandNotFound} + if [ -x $p -a -f ${cfg.dbPath} ]; then + # Run the helper program. + $p "$@" + # Retry the command if we just installed it. + if [ $? = 126 ]; then + "$@" + else + return 127 + fi else + echo "$1: command not found" >&2 return 127 fi - else - echo "$1: command not found" >&2 - return 127 - fi - } - ''; + } + ''; - 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 "$@" + programs.zsh.interactiveShellInit = + '' + # This function is called whenever a command is not found. + command_not_found_handler() { + local p=${commandNotFound} + if [ -x $p -a -f ${cfg.dbPath} ]; then + # Run the helper program. + $p "$@" - # Retry the command if we just installed it. - if [ $? = 126 ]; then - "$@" + # 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 + echo "$1: command not found" >&2 + return 127 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! :-) + environment.systemPackages = [ commandNotFound ]; + }; } diff --git a/nixos/modules/programs/command-not-found/command-not-found.pl b/nixos/modules/programs/command-not-found/command-not-found.pl index 5bdda26592e6..ab7aa204653c 100644 --- a/nixos/modules/programs/command-not-found/command-not-found.pl +++ b/nixos/modules/programs/command-not-found/command-not-found.pl @@ -8,7 +8,7 @@ use Config; my $program = $ARGV[0]; -my $dbPath = "/nix/var/nix/profiles/per-user/root/channels/nixos/programs.sqlite"; +my $dbPath = "@dbPath@"; my $dbh = DBI->connect("dbi:SQLite:dbname=$dbPath", "", "") or die "cannot open database `$dbPath'"; |