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
