Subject: [bug#66376] [PATCH] fix: correct emacs-guix not finding packages from user channels

From: Sergey Trofimov <[email-masked]>
Date: Tue, 06 May 2025 10:55:35 +0200

Hi Sergio,

Sergio Pastor Pérez <[email-masked]> writes:

> ---
> Hi.
>
> I've noticed that `emacs-guix' is not able to fetch packages from user
> channels. This is a quick fix that could be implemented much easier with some
> help.
>
> As you can see, there is lots of redundant code from modules of the guix core,
> such as: 'gnu/packages.scm' as well as 'guix/describe.scm'.
>
> The issue is that neither of the functions exposed, which are used on the call
> hierarchy, accept a parameter for targeting a profile so all this functions need
> to be reimplemented to change the lowest function on the call hierarchy.
>
> I thought of using:
>
> (module-define! (resolve-module '(guix describe)) 'current-profile
>   (lambda ()
>       "Return the profile (created by 'guix pull') the calling process lives in,
>   or #f if this is not applicable."
>       (find (lambda (str)
>               (string-contains str "current-guix"))
>             (user-profiles))))
>
>
> But this is not possible since most of the functions up in the call hierarchy
> are memoized with `mlambda'.
>
> For now this is what I'm using for myself. I submit this patch hopping that someone will have a more elegant solution.
>
> Will it be okay to redefine the functions from the guix core into generic ones
> that accept a profile as a parameter?
>
> The ones we have could just call the more generic one with a specific parameter
> so they will be the 'curried' versions.
>
> What do you think? Any ideas?
>

%package-module-path is a parameter, which could be set when
 initializing the REPL. It would make `fold-packages` use the right list
 of modules.

So try running this just after `M-x guix-switch-to-repl`. Then `M-x
guix-package-locations` should show the locations from your channels.

--8<---------------cut here---------------start------------->8---
(guix-eval-in-repl 
 (format "((@ (gnu packages) %%package-module-path) '%S)"
         (append (guix-list-maybe guix-load-path)
                 (guix-list-maybe
                  (when guix-repl-use-latest
                      (guix-guile-site-directory guix-pulled-profile))))))
--8<---------------cut here---------------end--------------->8---