From f83c5e3e5f3e6b33c095d6559a4b3cd5922e88ce Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 5 Jan 2004 11:18:59 +0000 Subject: [PATCH] * 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 :-) --- scripts/nix-profile.sh.in | 27 +++++++++------------------ src/nix-env/help.txt | 2 ++ src/nix-env/main.cc | 22 ++++++++++++++++++++++ 3 files changed, 33 insertions(+), 18 deletions(-) diff --git a/scripts/nix-profile.sh.in b/scripts/nix-profile.sh.in index 0d059e1a2..064a6a347 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 d940bd209..3f15e6a8e 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 7bced5be0..64ae6d412 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