Subject: Re: bug#22970: guix edit mutt -- not working

From: Alex Kost <[email-masked]>
Date: Fri, 11 Mar 2016 13:48:39 +0300

Jean Louis (2016-03-10 22:34 +0300) wrote:

> Hello Andreas,
>
> I have now 2 files in gnu/guix/packages/*.scm, for mutt and postgresql:
> and now I get each time on running guix, following:
>
> guix package: warning: failed to load '(databases)':
> ERROR: no code for module (databases)
> guix package: warning: failed to load '(mutt)':
> ERROR: no code for module (mutt)
>
> because 2 files are: databases.scm and mutt.scm
>
> I have already installed mutt, with changes, and it works. On the end of
> file there is word "mutt". Similar for PostgreSQL, only it did not yet
> compile.
>
> Now I get a feeling, if I have 20 files to change or adapt to my system,
> I will get 20 warnings by each run of guix package manager.
>
> Somehow it does not feel right.
>
> It would be more logical to have GUIX_PACKAGE_PATH plus one separate
> file where some modified or user related packages are listed, instead of
> having the package name on the end of *.scm file.

I agree, using GUIX_PACKAGE_PATH is such a nice way to keep your own
packages.  I don't understand why Andreas recommended to use "guix
package -f".  I think it is suitable to build some development
"guix.scm" file (not related, but see ¹).  But for user packages, I
think keeping them in GUIX_PACKAGE_PATH directories is a much better
solution.

I also don't recommend to use the same /gnu/packages/*.scm structure, as
there may be problems with this.  For example, you copied
/gnu/packages/databases.scm to your GUIX_PACKAGE_PATH dir and modified
some package in it.  Then you have to follow the changes in this file
made in Guix, and update your local databases.scm accordingly all the
time.

So if you want to keep all your packages in a single file, you can make
"<some-dir>/my-guix-packages.scm", add <some-dir> to GUIX_PACKAGE_PATH,
and that's it!  This "my-guix-packages.scm" file will look like this:

(define-module (my-guix-packages)
  #:use-module (guix packages)
  #:use-module (guix download)
  #:use-module (guix utils)
  #:use-module (gnu packages mail))

(define-public my-mutt
  (package
    (inherit mutt)
    (name "my-mutt")
    (arguments
     (substitute-keyword-arguments (package-arguments mutt)
       ((#:configure-flags cf)
        `(cons "--enable-hcache" ,cf))))
    (synopsis (string-append (package-synopsis mutt)
                             " (configured with --enable-hcache)"))))

And all guix commands will find packages in this file, for example you
can do: "guix package -i my-mutt".  Try it!

¹ http://lists.gnu.org/archive/html/guix-devel/2016-03/msg00419.html

-- 
Alex