Am Samstag, dem 05.04.2025 um 09:38 -0700 schrieb Ian Eure:
> Hi Guixers,
>
> I’ve seen a few patches for Emacs packages lately which have the
> form:
>
> (package emacs-whatever
> (name "emacs-whatever")
> (description "Emacs interface for Whatever")
> (inputs (list whatever))
> (arguments
> (list
> #:phases
> (modify-phases %standard-phases
> (add-after 'unpack 'set-whatever-path
> (lambda (#:key inputs #:allow-other-keys)
> (emacs-substitute-variables "whatever.el"
> ("emacs-whatever-program"
> (search-inputs-file inputs
> "/bin/whatever")))))))))
Side note: the ordering of fields here looks rather displeasing.
> ...and looking in emacs-xyz.scm, many packages do this. I
> understand why this pattern exists -- making the inferior an input
> means that installing the Emacs package Just Works -- but it also
> means increased disk consumption and somewhat less user
> flexibility.
>
> On the flexibility side, it means that if you install
> emacs-whatever and my-personal-whatever-fork, emacs-whatever will
> continue using the stock whatever, not your fork; making this work
> requires transforming emacs-whatever to replace the input. I
> think that because this behavior is so different from how most
> other operating systems work, it’s surprising, and the solution
> isn’t obvious.
You obviously can still customize it to use a PATH lookup. You are
wasting disk space if you do so. Alternatively, input rewriting such
as the --with-input command line flag replace whatever with your-
personal-whatever-fork and thus do exactly what you want.
> […]
> I’m not sure how to do that, though. I can think of a few
> options:
>
> a) Leave it as is. Don’t love it, but if there’s concensus that
> this is the right way, then okay.
>
> b) Make packages that align better with specific usecases,
> ex. emacs-emacsql-sqlite, -mysql, etc. This feels fraught to me,
> and I don’t think it works if you get emacs-emacsql-sqlite as an
> input to some other emacs-* package, but want emacs-emacsql-mysql
> as a user. Perhaps metapackages which only exist to combine
> dependencies would make this a workable approach.
>
> c) Don’t set them at all, and use the same $PATH late binding as
> is typical of other Emacs setups. This would mean that
> installing Emacs packages wouldn’t Just Work, and users would
> have to install the inferiors (and know what packages those are
> in) themselves.
>
> d) Have some better policies around when to use inputs and when
> not to. This might be the most pragmatic approach, though it
> means inconsistency from package to package.
>
> e) Build a suggested package mechanism into Guix. This has been
> floated a couple times before. If it defaults to not installing
> suggested packages, but telling the user about them, this would
> be like option C, but making it easier to find which packages you
> might need; if it installs them by default, it would work like
> the current setup, but give users some kind of out to avoid the
> extra bandwidth/disk usage. I don’t know how this would work for
> declarative package setups -- how would I express to Guix Home
> that it should install emacs-emms with flac (for metaflac), but
> without mpg321, vorbis-tools, and mp3info?
f) Implement parametrized packages 😉
I think in practice, transformations and hopefully some day parameters
will be a preferable solution to most of our Emacs-related
customization woes.
Cheers