aboutsummaryrefslogtreecommitdiff
path: root/src/nix
diff options
context:
space:
mode:
authoreldritch horrors <pennae@lix.systems>2024-03-04 07:50:55 +0100
committereldritch horrors <pennae@lix.systems>2024-03-04 07:50:55 +0100
commit180984178dc4e063607f6e9e94eb2fdfedbfe452 (patch)
tree073cde58b67bbc9b6e2c1ecade8ee14f508f24be /src/nix
parentaaf1ed1a4cf0ca53f5324932fe13769cb2b69f74 (diff)
Merge pull request #9648 from cole-h/nix-shell-ordering
nix shell: reflect command line order in PATH order (cherry picked from commit b91c935c2faf08ced2c763dcd2a831f26d84fa86) Change-Id: If16c120bb74857c2817366e74e5b0877eb997260
Diffstat (limited to 'src/nix')
-rw-r--r--src/nix/develop.cc4
-rw-r--r--src/nix/run.cc9
2 files changed, 8 insertions, 5 deletions
diff --git a/src/nix/develop.cc b/src/nix/develop.cc
index 8b92d4ccc..e9326cae9 100644
--- a/src/nix/develop.cc
+++ b/src/nix/develop.cc
@@ -340,7 +340,7 @@ struct Common : InstallableCommand, MixProfile
for (auto & [installable_, dir_] : redirects) {
auto dir = absPath(dir_);
auto installable = parseInstallable(store, installable_);
- auto builtPaths = Installable::toStorePaths(
+ auto builtPaths = Installable::toStorePathSet(
getEvalStore(), store, Realise::Nothing, OperateOn::Output, {installable});
for (auto & path: builtPaths) {
auto from = store->printStorePath(path);
@@ -554,7 +554,7 @@ struct CmdDevelop : Common, MixEnvironment
bool found = false;
- for (auto & path : Installable::toStorePaths(getEvalStore(), store, Realise::Outputs, OperateOn::Output, {bashInstallable})) {
+ for (auto & path : Installable::toStorePathSet(getEvalStore(), store, Realise::Outputs, OperateOn::Output, {bashInstallable})) {
auto s = store->printStorePath(path) + "/bin/bash";
if (pathExists(s)) {
shell = s;
diff --git a/src/nix/run.cc b/src/nix/run.cc
index 1c16ce2c9..94d492ca7 100644
--- a/src/nix/run.cc
+++ b/src/nix/run.cc
@@ -113,7 +113,7 @@ struct CmdShell : InstallablesCommand, MixEnvironment
setEnviron();
- auto unixPath = tokenizeString<Strings>(getEnv("PATH").value_or(""), ":");
+ std::vector<std::string> pathAdditions;
while (!todo.empty()) {
auto path = todo.front();
@@ -121,7 +121,7 @@ struct CmdShell : InstallablesCommand, MixEnvironment
if (!done.insert(path).second) continue;
if (true)
- unixPath.push_front(store->printStorePath(path) + "/bin");
+ pathAdditions.push_back(store->printStorePath(path) + "/bin");
auto propPath = store->printStorePath(path) + "/nix-support/propagated-user-env-packages";
if (accessor->stat(propPath).type == FSAccessor::tRegular) {
@@ -130,7 +130,10 @@ struct CmdShell : InstallablesCommand, MixEnvironment
}
}
- setenv("PATH", concatStringsSep(":", unixPath).c_str(), 1);
+ auto unixPath = tokenizeString<Strings>(getEnv("PATH").value_or(""), ":");
+ unixPath.insert(unixPath.begin(), pathAdditions.begin(), pathAdditions.end());
+ auto unixPathString = concatStringsSep(":", unixPath);
+ setenv("PATH", unixPathString.c_str(), 1);
Strings args;
for (auto & arg : command) args.push_back(arg);