Hi Guix,

I spoke about Guix at STEP-UP RSLondon 2026, a conference for research
software engineers (RSEs) primarily based at UK universities. Abstract here:
https://step-up.ac.uk/events/step-up-2026/abstracts/#software4 My
thinking was to advocate for Guix in the primarily conda+pip dominated
world of the RSE. I got some feedback that I'd like to share.

I heard from someone who said that they tried Guix and were very
frustrated with all the scheme file editing (manifest files, package
definitions, etc.) that they had to do. They came from a python world
where they are used to adding dependencies from the CLI—like `uv add
packagename`. They felt that the CLI is the direction modern tooling has
gone, and that's what they'd prefer.

Now, I know we pride ourselves on the expressive power of our scheme
files. And, I absolutely prefer writing them. But, perhaps there's a
case for providing a more declarative config—something like TOML—for
simpler and common use cases.

For example, we often have very short manifest files that look like:
```
(specifications->manifest '("pkg1" "pkg2" "pkg3"))
```
Maybe, we should additionally support a plain text format like:
```
pkg1
pkg2
pkg3
```
This will enable us to write tooling like `guix manifest add pkg4`, etc.
When we only have a scheme file, it is hard to programmatically edit it
(I don't know how `guix refresh -u …` does it). The only way to really
edit arbitrary scheme code might be to reach out to an LLM, and I know
we don't want to go there. Keeping with the promise of GCD008[1], I
think we should put more effort into our user-facing tooling in order to
keep LLMs at bay.

Other places Guix could benefit from declarative configuration files are
channel files (channels.scm, .guix-channel and .guix-authorizations). If
we had a guix-channel.toml and a guix-authorizations.toml, it would be
much easier to write a tool like `guix channel init`, or `guix channel
authorize`, etc. To illustrate, this .guix-channel:
```
(channel
  (version 0)
  (news-file "etc/news.scm")
  (keyring-reference "keyring")
  (url "https://git.guix.gnu.org/guix.git";))
```
could become:
```
[channel]
version=0
news_file=etc/news.scm
keyring_reference=keyring
url=https://git.guix.gnu.org/guix.git
```

Maybe even package definitions could benefit from a similar idea. There
are a lot of simpler packages (think Emacs packages, many Python
packages, etc.) that don't really benefit from the full expressive power
of scheme. Maybe such a shift could also speed up guix pull
significantly since we won't have to compile scheme source code all the
time. Here's an illustration for a Julia package. This:
```
(define-public julia-json
  (package
    (name "julia-json")
    (version "0.21.3")
    (source
     (origin
       (method git-fetch)
       (uri (git-reference
             (url "https://github.com/JuliaIO/JSON.jl";)
             (commit (string-append "v" version))))
       (file-name (git-file-name name version))
       (sha256
        (base32 "1l2p852sxq6h5fif3dqshvbw17gb06jmq2nkr88spvp7s0n0nslz"))))
    (build-system julia-build-system)
    (propagated-inputs
     (list julia-datastructures
           julia-fixedpointnumbers
           julia-parsers
           julia-offsetarrays))
    (home-page "https://github.com/JuliaIO/JSON.jl";)
    (synopsis "JSON parsing and printing library for Julia")
    (description "@code{JSON.jl} is a pure Julia module which supports parsing
and printing JSON documents.")
    (license license:expat)))
```
could become:
```
[julia-json]
name = julia-json
version = 0.21.3
source = git+https://github.com/JuliaIO/[email protected]
build_system = julia-build-system
propagated_inputs = [julia-datastructures, julia-fixedpointnumbers,
julia-parsers, julia-offsetarrays]
home_page = https://github.com/JuliaIO/JSON.jl
synopsis = JSON parsing and printing library for Julia
description = @code{JSON.jl} is a pure Julia module which supports parsing
and printing JSON documents.
license = Expat
```
I've taken liberties with sketching out the exact syntax and fields.
It's just an idea rather than an exact specification.

Thank you for reading this far! Sadly, I can't really dedicate time to
work on any of this at the moment. But, I wanted to get this out there
and initiate the conversation. Would anyone be interested in hacking on
something like this?

Regards,
Arun

[1]: https://codeberg.org/guix/guix-consensus-documents/pulls/13

Reply via email to