help-guix
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

etc/profile from Guix pack is a noop when $GUIX_PROFILE is defined


From: EuAndreh
Subject: etc/profile from Guix pack is a noop when $GUIX_PROFILE is defined
Date: Wed, 16 Dec 2020 14:21:51 -0300

Hi Guix!

In a chat with civodul on IRC the other day we discussed about the
generated etc/profile profile created by the "guix pack" command.  It is
my understanding that it falls just a very tiny bit short on making
tarballs a great application bundle.  This happens because of how
$GUIX_PROFILE is treated on the generated profile.  Here's the output of
an interactive session:

--8<---------------cut here---------------start------------->8---
$ echo $GUIX_PROFILE
/home/andreh/.config/guix/current
$ tar xf `guix pack -RR -S /bin=bin -S /etc=etc guile gnutls guile-json`
$ cat etc/profile
# Source this file to define all the relevant environment variables in Bash
# for this profile.  You may want to define the 'GUIX_PROFILE' environment
# variable to point to the "visible" name of the profile, like this:
#
#  GUIX_PROFILE=/path/to/profile ; \
#  source /path/to/profile/etc/profile
#
# When GUIX_PROFILE is undefined, the various environment variables refer
# to this specific profile generation.

export 
PATH="${GUIX_PROFILE:-/gnu/store/8yjf5dypd0fw3va2y5hfdigfjxr6fpy6-profile}/bin${PATH:+:}$PATH"
export 
GUILE_LOAD_PATH="${GUIX_PROFILE:-/gnu/store/8yjf5dypd0fw3va2y5hfdigfjxr6fpy6-profile}/share/guile/site/3.0${GUILE_LOAD_PATH:+:}$GUILE_LOAD_PATH"
export 
GUILE_LOAD_COMPILED_PATH="${GUIX_PROFILE:-/gnu/store/8yjf5dypd0fw3va2y5hfdigfjxr6fpy6-profile}/lib/guile/3.0/site-ccache:${GUIX_PROFILE:-/gnu/store/8yjf5dypd0fw3va2y5hfdigfjxr6fpy6-profile}/share/guile/site/3.0${GUILE_LOAD_COMPILED_PATH:+:}$GUILE_LOAD_COMPILED_PATH"
$ echo $GUILE_LOAD_PATH
/home/andreh/.config/guix/current/share/guile/site/3.0
$ source etc/profile
$ echo $GUILE_LOAD_PATH
/home/andreh/.config/guix/current/share/guile/site/3.0:/home/andreh/.config/guix/current/share/guile/site/3.0
$ GUIX_PROFILE= source etc/profile
$ echo $GUILE_LOAD_PATH
/gnu/store/8yjf5dypd0fw3va2y5hfdigfjxr6fpy6-profile/share/guile/site/3.0:/home/andreh/.config/guix/current/share/guile/site/3.0:/home/andreh/.config/guix/current/share/guile/site/3.0
--8<---------------cut here---------------end--------------->8---

By using $GUIX_PROFILE and falling back to the /gnu/store/...-profile
path, the environment variables declarations won't work in a case: when
$GUIX_PROFILE is already defined.  In my case, what ended up happening
is that $GUILE_LOAD_PATH wasn't being enriched by the file, and ended up
with a duplicate entry of $HOME/.config/guix/current.  I was able to
achieve the desired behaviour by making $GUIX_PROFILE undefined, but it
felt like a pitfall to me.  I was left with the impression that this
wasn't the desired behaviour.

My previous mental model was that I could take a tarball generated by
"guix pack", source the profile and the binaries would be added to
$PATH.  Now I feel I have to remember this detail: remember to prefix
the "source" command with "GUIX_PROFILE= ", and this should work
regardless of the environment.

Is this the desired behaviour? Am I missing something?



reply via email to

[Prev in Thread] Current Thread [Next in Thread]