about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/libutil/util.cc2
-rw-r--r--src/nix-env/main.cc17
2 files changed, 12 insertions, 7 deletions
diff --git a/src/libutil/util.cc b/src/libutil/util.cc
index 5c8b7279c4..3a6914cba1 100644
--- a/src/libutil/util.cc
+++ b/src/libutil/util.cc
@@ -101,7 +101,7 @@ bool pathExists(const Path & path)
 {
     int res;
     struct stat st;
-    res = stat(path.c_str(), &st);
+    res = lstat(path.c_str(), &st);
     if (!res) return true;
     if (errno != ENOENT)
         throw SysError(format("getting status of %1%") % path);
diff --git a/src/nix-env/main.cc b/src/nix-env/main.cc
index 20b7da655d..00b6c7f8d3 100644
--- a/src/nix-env/main.cc
+++ b/src/nix-env/main.cc
@@ -645,12 +645,11 @@ static void opSwitchProfile(Globals & globals,
 {
     if (opFlags.size() > 0)
         throw UsageError(format("unknown flags `%1%'") % opFlags.front());
-    if (opArgs.size() > 1)
-        throw UsageError(format("`--profile' takes at most one argument"));
+    if (opArgs.size() != 1)
+        throw UsageError(format("`--profile' takes exactly one argument"));
 
-    Path profile = 
-        absPath(opArgs.size() == 0 ? globals.profile : opArgs.front());
-    Path profileLink = getHomeDir() + "/.nix-userenv";
+    Path profile = opArgs.front();
+    Path profileLink = getHomeDir() + "/.nix-profile";
 
     switchLink(profileLink, profile);
 }
@@ -680,7 +679,6 @@ void run(Strings args)
     Operation op = 0;
     
     Globals globals;
-    globals.profile = canonPath(nixStateDir + "/profiles/default");
     globals.nixExprPath = getDefNixExprPath();
 
     for (Strings::iterator i = args.begin(); i != args.end(); ++i) {
@@ -723,6 +721,13 @@ void run(Strings args)
 
     if (!op) throw UsageError("no operation specified");
 
+    if (globals.profile == "") {
+        Path profileLink = getHomeDir() + "/.nix-profile";
+        globals.profile = pathExists(profileLink)
+            ? absPath(readLink(profileLink), dirOf(profileLink))
+            : canonPath(nixStateDir + "/profiles/default");
+    }
+    
     openDB();
 
     op(globals, opFlags, opArgs);