summaryrefslogtreecommitdiffstats
path: root/nixos
diff options
context:
space:
mode:
authorJörg Thalheim <Mic92@users.noreply.github.com>2017-04-18 17:18:20 +0200
committerGitHub <noreply@github.com>2017-04-18 17:18:20 +0200
commitb2ed3db94aea937fc77fcbd4e1ce4a51fd18def9 (patch)
treef84fcef258b767253e90a7dc4fd2f43c8ef960b1 /nixos
parent91ad6b35970b1378ac99de209b4ec48318704b07 (diff)
parent5a5db609e5bd83bc589f36eef394f3ad172d6648 (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.nix93
-rw-r--r--nixos/modules/programs/command-not-found/command-not-found.pl2
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'";