Merge pull request #12000 from nathan7/nix-auto-run
command-not-found: add NIX_AUTO_RUN option, to automatically invoke nix-shell
This commit is contained in:
commit
e312276b01
@ -16,7 +16,7 @@ let
|
|||||||
isExecutable = true;
|
isExecutable = true;
|
||||||
inherit (pkgs) perl;
|
inherit (pkgs) perl;
|
||||||
perlFlags = concatStrings (map (path: "-I ${path}/lib/perl5/site_perl ")
|
perlFlags = concatStrings (map (path: "-I ${path}/lib/perl5/site_perl ")
|
||||||
[ pkgs.perlPackages.DBI pkgs.perlPackages.DBDSQLite ]);
|
[ pkgs.perlPackages.DBI pkgs.perlPackages.DBDSQLite pkgs.perlPackages.StringShellQuote ]);
|
||||||
};
|
};
|
||||||
|
|
||||||
in
|
in
|
||||||
@ -30,7 +30,7 @@ in
|
|||||||
local p=/run/current-system/sw/bin/command-not-found
|
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
|
if [ -x $p -a -f /nix/var/nix/profiles/per-user/root/channels/nixos/programs.sqlite ]; then
|
||||||
# Run the helper program.
|
# Run the helper program.
|
||||||
$p "$1"
|
$p "$@"
|
||||||
# Retry the command if we just installed it.
|
# Retry the command if we just installed it.
|
||||||
if [ $? = 126 ]; then
|
if [ $? = 126 ]; then
|
||||||
"$@"
|
"$@"
|
||||||
@ -51,7 +51,7 @@ in
|
|||||||
local p=/run/current-system/sw/bin/command-not-found
|
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
|
if [ -x $p -a -f /nix/var/nix/profiles/per-user/root/channels/nixos/programs.sqlite ]; then
|
||||||
# Run the helper program.
|
# Run the helper program.
|
||||||
$p "$1"
|
$p "$@"
|
||||||
|
|
||||||
# Retry the command if we just installed it.
|
# Retry the command if we just installed it.
|
||||||
if [ $? = 126 ]; then
|
if [ $? = 126 ]; then
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
use strict;
|
use strict;
|
||||||
use DBI;
|
use DBI;
|
||||||
use DBD::SQLite;
|
use DBD::SQLite;
|
||||||
|
use String::ShellQuote;
|
||||||
use Config;
|
use Config;
|
||||||
|
|
||||||
my $program = $ARGV[0];
|
my $program = $ARGV[0];
|
||||||
@ -31,6 +32,8 @@ the package ‘$package’, which I will now install for you.
|
|||||||
EOF
|
EOF
|
||||||
;
|
;
|
||||||
exit 126 if system("nix-env", "-iA", "nixos.$package") == 0;
|
exit 126 if system("nix-env", "-iA", "nixos.$package") == 0;
|
||||||
|
} elsif ($ENV{"NIX_AUTO_RUN"} // "") {
|
||||||
|
exec("nix-shell", "-p", $package, "--run", shell_quote("exec", @ARGV));
|
||||||
} else {
|
} else {
|
||||||
print STDERR <<EOF;
|
print STDERR <<EOF;
|
||||||
The program ‘$program’ is currently not installed. You can install it by typing:
|
The program ‘$program’ is currently not installed. You can install it by typing:
|
||||||
|
13
pkgs/shells/fish/command-not-found.patch
Normal file
13
pkgs/shells/fish/command-not-found.patch
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
diff --git a/share/functions/__fish_config_interactive.fish b/share/functions/__fish_config_interactive.fish
|
||||||
|
index c3864a8..a12ac4d 100644
|
||||||
|
--- a/share/functions/__fish_config_interactive.fish
|
||||||
|
+++ b/share/functions/__fish_config_interactive.fish
|
||||||
|
@@ -230,7 +230,7 @@ function __fish_config_interactive -d "Initializations that should be performed
|
||||||
|
# Check for NixOS handler
|
||||||
|
else if test -f /run/current-system/sw/bin/command-not-found
|
||||||
|
function __fish_command_not_found_handler --on-event fish_command_not_found
|
||||||
|
- /run/current-system/sw/bin/command-not-found $argv[1]
|
||||||
|
+ /run/current-system/sw/bin/command-not-found $argv
|
||||||
|
end
|
||||||
|
# Ubuntu Feisty places this command in the regular path instead
|
||||||
|
else if type -q -p command-not-found
|
@ -4,6 +4,8 @@ stdenv.mkDerivation rec {
|
|||||||
name = "fish-${version}";
|
name = "fish-${version}";
|
||||||
version = "2.2.0";
|
version = "2.2.0";
|
||||||
|
|
||||||
|
patches = [ ./command-not-found.patch ];
|
||||||
|
|
||||||
src = fetchurl {
|
src = fetchurl {
|
||||||
url = "http://fishshell.com/files/${version}/${name}.tar.gz";
|
url = "http://fishshell.com/files/${version}/${name}.tar.gz";
|
||||||
sha256 = "0ympqz7llmf0hafxwglykplw6j5cz82yhlrw50lw4bnf2kykjqx7";
|
sha256 = "0ympqz7llmf0hafxwglykplw6j5cz82yhlrw50lw4bnf2kykjqx7";
|
||||||
|
Loading…
x
Reference in New Issue
Block a user