about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEelco Dolstra <e.dolstra@tudelft.nl>2004-01-05T11·18+0000
committerEelco Dolstra <e.dolstra@tudelft.nl>2004-01-05T11·18+0000
commitf83c5e3e5f3e6b33c095d6559a4b3cd5922e88ce (patch)
treea54f68b0882367374c88d58a6812461c7b40be0c
parent0e68af0ce380b09c14ff36084499c0d8a6590b25 (diff)
* Implemented Eelco V.'s `-p' command to switch profiles. It switches
  the symlink ~/.nix-userenv to the given argument (which defaults to
  .../links/current).  /etc/profile.d/nix-profile creates this symlink
  if it doesn't exist yet.  Example use:

  $ nix-env -l my_profile -i foo.nix subversion quake
  $ nix-env -p my_profile

  I don't like the term "profile".  Let's deprecate it :-)

-rw-r--r--scripts/nix-profile.sh.in27
-rw-r--r--src/nix-env/help.txt2
-rw-r--r--src/nix-env/main.cc22
3 files changed, 33 insertions, 18 deletions
diff --git a/scripts/nix-profile.sh.in b/scripts/nix-profile.sh.in
index 0d059e1a25de..064a6a347a4a 100644
--- a/scripts/nix-profile.sh.in
+++ b/scripts/nix-profile.sh.in
@@ -1,20 +1,11 @@
-#if test -z "$NIX_SET"; then
+if test -n "$HOME"; then
+    NIX_LINK="$HOME/.nix-userenv"
 
-#    export NIX_SET=1
+    if ! test -a "$NIX_LINK"; then
+        echo "creating $NIX_LINK"
+        _NIX_DEF_LINK=@localstatedir@/nix/links/current
+        ln -s "$_NIX_DEF_LINK" "$NIX_LINK"
+    fi
 
-    NIX_LINKS=@localstatedir@/nix/links/current
-
-    export PATH=$NIX_LINKS/bin:@prefix@/bin:$PATH
-
-#    export LD_LIBRARY_PATH=$NIX_LINKS/lib:$LD_LIBRARY_PATH
-
-    export LIBRARY_PATH=$NIX_LINKS/lib:$LIBRARY_PATH
-
-    export C_INCLUDE_PATH=$NIX_LINKS/include:$C_INCLUDE_PATH
-    export CPLUS_INCLUDE_PATH=$NIX_LINKS/include:$CPLUS_INCLUDE_PATH
-
-    export PKG_CONFIG_PATH=$NIX_LINKS/lib/pkgconfig:$PKG_CONFIG_PATH
-
-#    export MANPATH=$NIX_LINKS/man:$MANPATH
-
-#fi
+    export PATH=$NIX_LINK/bin:@prefix@/bin:$PATH
+fi
diff --git a/src/nix-env/help.txt b/src/nix-env/help.txt
index d940bd209d60..3f15e6a8e2de 100644
--- a/src/nix-env/help.txt
+++ b/src/nix-env/help.txt
@@ -12,6 +12,8 @@ Operations:
 The previous operations take a list of derivation names.  The special
 name `*' may be used to indicate all derivations.
 
+  --profile / -p [FILE]: switch to specified user environment 
+
   --version: output version information
   --help: display help
 
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