Ludovic Courtès writes: > Hello! > > Ricardo Wurmus skribis: > >> I think it’s a bit difficult to install the Guix Workflow Language at >> this point and I’d like to change that. >> >> Currently, new sub-commands for Guix are looked up by module name on the >> Guile load path. When installing the “gwl” package, though, the Guile >> load path is not automatically altered, so users need to set it up by >> themselves. The load path is only altered automatically when users >> install the “guile” package. This is not a good recommendation because >> users may have Guile 2.2 in their profile, and not Guile 3.0 or whatever >> version may be needed by the extension. >> >> I wonder if we can make this a little nicer by letting Guix look for >> sub-command scripts in directories that are listed in an environment >> variable, such as GUIX_EXTENSIONS_PATH. The “guix” package would set >> this search path and packages wanting to provide a sub-command (such as >> “guix workflow” or “guix home”) would arrange to have their scripts >> placed in that sub-directory of their outputs. >> >> What do you think? > > GUIX_EXTENSIONS_PATH sounds like a good idea. I suppose it could be > implemented pretty much like GUIX_PACKAGE_PATH? > > That would also allow us to consider Guix Home a package rather than a > channel, like you did for GWL. Below is a draft that adds Guile modules from GUIX_EXTENSIONS_PATH to the %load-path and %load-compiled-path. I think this implementation is not good, but I’d like to provoke some comments about the following thoughts: * what happens to the Guile dependencies of an extension? Those would not be added to the load path. Should the extension take care of this by manually augmenting the load path? * The draft simply uses the same directories that GUILE_LOAD_PATH and GUILE_LOAD_COMPILED_PATH use. Is this a bad idea? Would it not be better to have a new directory prefix (such as “lib/guix/extensions”)? * The search path on the “guix” package does not distinguish between compiled modules and source modules; it simply looks for all the conventional directories and puts them on the GUIX_EXTENSIONS_PATH, while (guix ui) adds them to both %load-path and %load-compiled-path. All these points could be solved by only requiring the *entry points* to be on the GUIX_EXTENSIONS_PATH. Say for example that we have the “workflows” extension (provided by the GWL), which is a Guile entry point script at “libexec/guix/workflows.scm”. That script would augment the %load-path and %load-compiled-path with all its modules (in the conventional Guile directories) and load the extension from those modules. What do you think? -- Ricardo