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 9524d91ea3bc..9741aa7ca539 100644 --- a/nixos/modules/programs/command-not-found/command-not-found.nix +++ b/nixos/modules/programs/command-not-found/command-not-found.nix @@ -16,7 +16,7 @@ let isExecutable = true; inherit (pkgs) 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 @@ -30,7 +30,7 @@ in 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" + $p "$@" # Retry the command if we just installed it. if [ $? = 126 ]; then "$@" @@ -51,7 +51,7 @@ in 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" + $p "$@" # Retry the command if we just installed it. if [ $? = 126 ]; then 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 b233d973a4ab..5bdda26592e6 100644 --- a/nixos/modules/programs/command-not-found/command-not-found.pl +++ b/nixos/modules/programs/command-not-found/command-not-found.pl @@ -3,6 +3,7 @@ use strict; use DBI; use DBD::SQLite; +use String::ShellQuote; use Config; my $program = $ARGV[0]; @@ -31,6 +32,8 @@ the package ‘$package’, which I will now install for you. EOF ; 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 { print STDERR <