Alex Kost <alez...@gmail.com> writes: > Carlos Sánchez de La Lama (2016-09-20 09:39 +0200) wrote: > >> Hi, >> >>>> Is this the intended behaviour? I am wondering whether packages with >>>> search paths should include both the user-profile directories and the >>>> system-profile ones. >>> >>> I think you’re right. This was discussed at >>> <http://bugs.gnu.org/20255>, leading to a patch (for GuixSD). >>> >>> However, we failed to build consensus around the approach of this patch, >>> so we did not apply it. If you have ideas, please email >>> 20...@debbugs.gnu.org. :-) >> >> what about something like: >> >> - /etc/profile >> # [...] >> GUIX_PROFILES="/run/current-system/profile:$HOME/.guix-profile" >> . /run/current-system/profile/etc/profile >> # [...] >> . "$HOME/.guix-profile/etc/profile" >> # [...] >> >> - /run/current-system/profile/etc/profile >> profiles="${GUIX_PROFILES:=/gnu/store/<hashA>-profile}" >> export PATH="${profiles//:/\/bin}/bin ${profiles//:/\/sbin}/sbin" >> # [...] >> >> >> - $HOME/.guix-profile/etc/profile >> profiles="${GUIX_PROFILES:=/gnu/store/<hashB>-profile}" >> export ACLOCAL_PATH="${profiles//:/\/share/aclocal}/share/aclocal" >> # [...] >> >> That is, each profile adds all its search paths to all the profile roots >> passed in the colon separated variable GUIX_PROFILES. If GUIX_PROFILES >> is empty, it adds the search paths inside its own directory only (as >> until now). > > I think it was mentioned somewhere in the bug discussion: this will not > work for some things. For example, if a user has 'guile' in a system > profile, and several guile packages (but not 'guile' itself) in > ~/.guix-profile, then GUILE_LOAD_PATH will include > "<system-profile>/share/guile/site/2.0" but not > "<user-profile>/share/guile/site/2.0". That's why combining profiles > inside "guix package --search-paths" command looks like the only > solution.
It will actually solve it, that is the case I was trying to fix in fact. The code I show will include /share/guile/site/2.0 prefixed by every root in the colon-separated list GUIX_PROFILES (note the difference with current code with has GUIX_PROFILE, singular). If GUIX_PROFILES is (as in the example): GUIX_PROFILES="/run/current-system/profile:$HOME/.guix-profile" And guile is in the system profile, the line export GUILE_LOAD_PATH="${profiles//://share/guile/site/2.0:}/share/guile/site/2.0" will produce: export GUILE_LOAD_PATH=/run/current-system/profile/share/guile/site/2.0:$HOME/.guix-profile/share/guile/site/2.0 As desired. Same result if guile is only in user profile, or if it is on both. Try the following in bash: profiles="/run/current-system/profile:$HOME/.guix-profile:/my/third/profile" echo "${profiles//://share/guile/site/2.0:}/share/guile/site/2.0" BR Carlos