diff options
author | Spencer Whitt <sw@swhitt.me> | 2015-01-12 03:45:48 -0500 |
---|---|---|
committer | Spencer Whitt <sw@swhitt.me> | 2015-01-12 03:45:48 -0500 |
commit | 6cba6dc61bb0530ad03419364c19b299c6c9c6d4 (patch) | |
tree | ab09c5758efe86c38d8f5bde0a9abc4435ea06f6 /nixos/modules/programs/command-not-found/command-not-found.pl | |
parent | 173f41cf0bc618f0b2c313b1915fee8d8a6d0ee2 (diff) | |
download | nixlib-6cba6dc61bb0530ad03419364c19b299c6c9c6d4.tar nixlib-6cba6dc61bb0530ad03419364c19b299c6c9c6d4.tar.gz nixlib-6cba6dc61bb0530ad03419364c19b299c6c9c6d4.tar.bz2 nixlib-6cba6dc61bb0530ad03419364c19b299c6c9c6d4.tar.lz nixlib-6cba6dc61bb0530ad03419364c19b299c6c9c6d4.tar.xz nixlib-6cba6dc61bb0530ad03419364c19b299c6c9c6d4.tar.zst nixlib-6cba6dc61bb0530ad03419364c19b299c6c9c6d4.zip |
command-not-found: Add ZSH Support
Diffstat (limited to 'nixos/modules/programs/command-not-found/command-not-found.pl')
-rw-r--r-- | nixos/modules/programs/command-not-found/command-not-found.pl | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/nixos/modules/programs/command-not-found/command-not-found.pl b/nixos/modules/programs/command-not-found/command-not-found.pl new file mode 100644 index 000000000000..916649059d37 --- /dev/null +++ b/nixos/modules/programs/command-not-found/command-not-found.pl @@ -0,0 +1,48 @@ +#! @perl@/bin/perl -w @perlFlags@ + +use strict; +use DBI; +use DBD::SQLite; +use Config; + +my $program = $ARGV[0]; + +my $dbPath = "/nix/var/nix/profiles/per-user/root/channels/nixos/programs.sqlite"; + +my $dbh = DBI->connect("dbi:SQLite:dbname=$dbPath", "", "") + or die "cannot open database `$dbPath'"; +$dbh->{RaiseError} = 0; +$dbh->{PrintError} = 0; + +my $system = $ENV{"NIX_SYSTEM"} // $Config{myarchname}; + +my $res = $dbh->selectall_arrayref( + "select package from Programs where system = ? and name = ?", + { Slice => {} }, $system, $program); + +if (!defined $res || scalar @$res == 0) { + print STDERR "$program: command not found\n"; +} elsif (scalar @$res == 1) { + my $package = @$res[0]->{package}; + if ($ENV{"NIX_AUTO_INSTALL"} // "") { + print STDERR <<EOF; +The program ‘$program’ is currently not installed. It is provided by +the package ‘$package’, which I will now install for you. +EOF + ; + exit 126 if system("nix-env", "-i", $package) == 0; + } else { + print STDERR <<EOF; +The program ‘$program’ is currently not installed. You can install it by typing: + nix-env -i $package +EOF + } +} else { + print STDERR <<EOF; +The program ‘$program’ is currently not installed. It is provided by +several packages. You can install it by typing one of the following: +EOF + print STDERR " nix-env -i $_->{package}\n" foreach @$res; +} + +exit 127; |