about summary refs log tree commit diff
path: root/src/nix-env/main.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/nix-env/main.cc')
-rw-r--r--src/nix-env/main.cc22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/nix-env/main.cc b/src/nix-env/main.cc
index 7bced5be07a2..64ae6d4120b3 100644
--- a/src/nix-env/main.cc
+++ b/src/nix-env/main.cc
@@ -605,6 +605,26 @@ static void opQuery(Globals & globals,
 }
 
 
+static void opSwitchProfile(Globals & globals,
+    Strings opFlags, Strings opArgs)
+{
+    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"));
+
+    string linkPath = 
+        opArgs.size() == 0 ? globals.linkPath : opArgs.front();
+
+    string homeDir(getenv("HOME"));
+    if (homeDir == "") throw Error("HOME environment variable not set");
+
+    string linkPathFinal = homeDir + "/.nix-userenv";
+    
+    switchLink(linkPathFinal, linkPath);
+}
+
+
 void run(Strings args)
 {
     /* Use a higher default verbosity (lvlInfo). */
@@ -635,6 +655,8 @@ void run(Strings args)
                 format("`%1%' requires an argument") % arg);
             globals.linkPath = absPath(*i);
         }
+        else if (arg == "--profile" || arg == "-p") 
+            op = opSwitchProfile;
         else if (arg[0] == '-')
             opFlags.push_back(arg);
         else