Hi 宋文武. Help me understand. What you are inventing here is search path configuration files as a preferred alternative to environment variables.
So GUIX_XDG_DATA_DIRS is a new environment variable created to be used instead of XDG_DATA_DIRS and set by creating a file etc/search-paths.d/GUIX_XDG_DATA_DIRS rather than by calling setenv to ensure it does not propagate to child processes. Same for GUIX_GI_TYPELIB_PATH etc. Also because it does not propagate, it will not have duplicate entries. Not propagating sounds quite appropriate for krusader, gnome-commander or such, which launch other binaries. I like your proposal. When we do need to propagate to child processes, e.g. when environment variables should apply to launching plug-ins in child processes, we can still wrap-program as before? Not sure if such might be needed in gnome-builder. Does this mean we can no longer refer to a 'glib-or-gtk-wrap phase? Judging from Maxim’s comment <https://issues.guix.gnu.org/75688#34>, > In its current form, this phase should be renamed > 'write-search-path-files' or similar; we could introduce a deprecated > symbol for wrap-all-programs for backward compatibility. we would rename the phase. Which is possible, but might impact third-party channels. No more: (arguments (list #:phases #~(modify-phases %standard-phases (add-after 'glib-or-gtk-wrap 'wrap-binaries […] I am thinking of Guile scripts, which still need wrap-program for GUILE_LOAD_PATH and GUILE_LOAD_COMPILED_PATH. (wrap-program installed-binary `("GUILE_LOAD_PATH" prefix (,(string-append g-golf scm) ,(string-append gcairo scm))) `("GUILE_LOAD_COMPILED_PATH" prefix (,(string-append g-golf go) ,(string-append gcairo go))) ;; Library path for libraries loaded from Guile. `("LD_LIBRARY_PATH" prefix (,(string-append gcairo "/lib")))) Regards, Florian