Alex Kost <alez...@gmail.com> skribis: > Ludovic Courtès (2016-09-14 16:58 +0200) wrote: > >> Hello, >> >> csanchez...@gmail.com (Carlos Sánchez de La Lama) skribis: >> >>> I have an interesting case here. I have guile installed in my system >>> profile, so that >>> >>> /var/guix/profiles/system/profile/share/aclocal/guile.m4 >>> >>> is there. However, autoconf is installed in my *user* profile, so >>> ACLOCAL_PATH is augmented in ~/.guix-profile/etc/profile to include >>> >>> ~/.guix-profile/share/aclocal >>> >>> But not the system-profile aclocal directory, which would be put into >>> ACLOCAL_PATH by /var/guix/profiles/system/profile/etc/profile if >>> autoconf was installed in the systme profile as well. >>> >>> 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. :-) > > I think I was the one who prevents the consensus. To make it clear, I'm > for the suggested solution, but only *after* giving a user a freedom to > avoid loading such a heavy command as "guix package --search-paths". On > a "usual" GNU/Linux distro a user can edit /etc/profile, but on GuixSD > it is not possible currently. That's why I think there should be > provided a possibility to override /etc/profile at first.
Indeed, thanks for the reminder! In fact, we have this through ‘etc-service-type’, except that currently /etc/profile is systematically added. So an idea that comes to mind is to allow ‘etc-service-type’ to be extended with procedures that would be able to filter or otherwise change the /etc entries (similar to what we do for PAM):
diff --git a/gnu/services.scm b/gnu/services.scm index 7e322c5..9397232 100644 --- a/gnu/services.scm +++ b/gnu/services.scm @@ -426,9 +426,13 @@ directory." (extensions (list (service-extension activation-service-type - (lambda (files) - (let ((etc - (files->etc-directory files))) + (lambda (files+procs) + (let* ((proc (apply compose + (filter procedure? + files+procs))) + (files (filter pair? files+procs)) + (etc + (files->etc-directory (proc files)))) #~(activate-etc #$etc)))) (service-extension system-service-type etc-entry))) (compose concatenate)
In your config, you could have something like: (services (cons (simple-service 'rm-/etc/profile etc-service-type (const (lambda (files) (assoc-delete "profile" files)))) %base-services)) WDYT? In fact I think we would need to have a more generic mechanism to hook into ‘fold-services’, but I’m not sure what it should look like. Ludo’.