Pierre Neidhardt skribis: > Since staging was merged a few days ago, I've noticed an undesirable > side-effect of our revamped asdf-build-system: the systems packages have > priority over the user-local ones. > > Here is the default list of registries: > > --8<---------------cut here---------------start------------->8--- > (defparameter* *default-source-registries* > '(environment-source-registry > user-source-registry > user-source-registry-directory > default-user-source-registry > system-source-registry > system-source-registry-directory > default-system-source-registry) > "List of default source registries" "3.1.0.102") > --8<---------------cut here---------------end--------------->8--- > > `user-source-registry' points to what is read in > ~/.config/common-lisp/source-registry.conf(.d/)?, so nothing by default. > > user-source-registry-directory reads what's in XDG_CONFIG_DIRS, and it > finds the Guix packages there. > > The default-user-source-registry expands to > > --8<---------------cut here---------------start------------->8--- > (:SOURCE-REGISTRY (:TREE (:HOME "common-lisp/")) > (:DIRECTORY (:HOME ".sbcl/systems/")) > (:DIRECTORY > #P"/home/ambrevar/.local/share/common-lisp/systems/") > (:TREE #P"/home/ambrevar/.local/share/common-lisp/source/") > :INHERIT-CONFIGURATION) > --8<---------------cut here---------------end--------------->8--- > > which is where I would drop my user-local packages. > > Finally, default-system-source-registry reads what's in XDG_DATA_DIRS, > and it finds the packages there again, but it does not read the > Guix-generated conf which collects the dependencies of each package. > > > > I believe the issue is that `user-source-registry-directory' should read > from XDG_CONFIG_HOME, and not XDG_CONFIG_DIRS (which would make it > redundant with `user-source-registry'). This would make it an upstream > issue, but I wanted to double-check I properly understood the problem > with the Guix community first. > > Guillaume, thoughts on this? Our cl-asdf package definition has little patches for 'user-source-registry-directory' and 'user-output-translations-directory-pathname' to make ASDF read configuration files in all the directories listed in 'XDG_CONFIG_DIRS' (IIRC regular ASDF was only reading from the first valid one in 'XDG_CONFIG_HOME' or 'XDG_CONFIG_DIRS'): --8<---------------cut here---------------start------------->8--- (substitute* dst-asdf (("\\(xdg-config-pathname \\*source-registry-directory\\* direction\\)") "`(:source-registry ,@(loop for dir in (xdg-config-dirs \"common-lisp/source-registry.conf.d/\") collect `(:include ,dir)) :inherit-configuration)") (("\\(xdg-config-pathname \\*output-translations-directory\\* direction\\)") "`(:output-translations ,@(loop for dir in (xdg-config-dirs \"common-lisp/asdf-output-translations.conf.d/\") collect `(:include ,dir)) :inherit-configuration)"))) --8<---------------cut here---------------end--------------->8--- I guess 'XDG_CONFIG_HOME' is missing here and we could add it in the list before the 'XDG_CONFIG_DIRS' directories. Something like: --8<---------------cut here---------------start------------->8--- (substitute* dst-asdf (("\\(xdg-config-pathname \\*source-registry-directory\\* direction\\)") "`(:source-registry (:include (xdg-config-home \"common-lisp/source-registry.conf.d/\")) ,@(loop for dir in (xdg-config-dirs \"common-lisp/source-registry.conf.d/\") collect `(:include ,dir)) :inherit-configuration)") (("\\(xdg-config-pathname \\*output-translations-directory\\* direction\\)") "`(:output-translations (:include (xdg-config-home \"common-lisp/asdf-output-translations.conf.d/\")) ,@(loop for dir in (xdg-config-dirs \"common-lisp/asdf-output-translations.conf.d/\") collect `(:include ,dir)) :inherit-configuration)"))) --8<---------------cut here---------------end--------------->8--- Or maybe we could make a better patch not changing 'user-source-registry-directory', but adding a new 'guix-source-registry' between 'default-user-source-registry' and 'system-source-registry' in the list of registries (and likewise for output-translations). I think this way the systems in '$HOME/.config/...', '$HOME/.local/...' or '$HOME/common-lisp/...' will have priority on the ones in Guix profiles. What do you think?