FSF40 Hackathon

November 24, 2025

This past weekend, Guixotic participated in the FSF40 Hackathon, a Free Software Foundation (FSF) organized event in celebration of their 40th anniversary. The hackathon was held virtually over the course of three days via a Galene video conference server instance provided by the FSF, and the GNU Guix participants had a dedicated room.

At its peak, we were more than ten hackers joined by our common love for creatively solving problems, spread across various time zones. It was motivating and great fun to see what others were up to, and try to help one another. Below are some of the things that were hacked on during this buzzing weekend:

New guix shell support for Emacs-Guix

tusharhero continued their ongoing effort adding support for guix shell to Emacs-Guix, so that you can M-x guix-shell to set the environment of the current project to a list of user-provided packages or a local manifest.scm file. You can see it in action in this video. To try it locally, you can use the following environment:

guix shell emacs-pgtk emacs-guix \
 --with-git-url=emacs-guix=https://codeberg.org/tusharhero/emacs-guix \
 --with-branch=emacs-guix=add-guix-shell -- emacs -q

New (guix home services foot) home service

platfott and thunktone teamed up to implement a new Guix Home service for configuring the foot terminal emulator. You can follow their progress on this feature branch.

HaeckseAlexandra added a few VR related packages, such as libsurvive, overte and minetest-paradust-xr. You can review these packages on this feature branch.

Finding missing GNU packages in Guix

GCaggianese and apteryx teamed up to devise a Guile script able to compute which GNU packages are missing from the Guix collection. The script makes use of the Guix API, for example using the pre-existing official-gnu-packages procedure from the (guix gnu-maintenance) module to retrieve the list of GNU packages, and the find-packages-by-name as well as a locally defined find-packages-by-regexp procedures to check whether they are already packaged in Guix.

Thanks to this script, we found that there were 151 missing GNU packages in Guix. The full listing is available in the script as a comment. That's a lot of packages, so the next question we pondered over was: which of these packages should we prioritize? To help answering that question, a Debian popularity contest (popcon) file parser was implemented using Parsing Expression Grammar (PEG) via the (ice-9 peg) Guile module.

You can run the gnu-packages.scm script locally like this:

guile -L . gnu-packages.scm

After about 2 minutes, the execution completes and outputs something like:

151 missing GNU packages in total

29 missing GNU packages sorted by Debian popcon votes:

votes      name
1026       vcdimager
349        shtool
38         userv
37         gtick
33         spell
23         electric
15         hp2xx
14         gretl
13         gnuit
7          gnubiff
4          acm
4          gprofng-gui
4          jwhois
3          ferret
3          melting
2          cfengine
2          gmediaserver
2          gnats
2          pexec
1          gnump3d
1          gnusound
1          oleo
1          teseq
0          bayonne
0          gift
0          gnurobots
0          gnustep
0          nana
0          sysutils

Adding missing GNU packages

Equipped with the list of missing GNU packages, we can try guix import to produce a template to speed up the process of writing a package definition for them (as long as they have their release tarballs uploaded to the GNU FTP). A small issue was fixed in commit e46b6027d0f, so you should run guix pull to ensure you have the fix, after which you can try for example:

guix import gnu gnurobots

which produces the following template:

(define-public gnurobots
  (package
    (name "gnurobots")
    (version "1.2.0")
    (source
     (origin
       (method url-fetch)
       (uri (string-append "mirror://gnu/gnurobots/gnurobots-" version
                           ".tar.gz"))
       (sha256
        (base32 (guix-hash-url tarball)))))
    (build-system gnu-build-system)
    (synopsis "Program a little robot and watch him explore a world")
    (description
     "GNU Robots is a game in which you program a robot to explore a world full of
enemies that can hurt it, obstacles and food to be eaten.  The goal of the game
is to stay alive and collect prizes.  The robot program conveniently may be
written in a plain text file in the Scheme programming language.")
    (home-page "http://www.gnu.org/software/gnurobots/readme.html")
    (license find-by-yourself!)))

The GNU VCDImager, GNU shtool, GTick and GNU spell packages have already been packaged and are awaiting review, while work has started on GNU epsilon and a blueprint has been devised for packaging GNU 3DLDF. If you'd like to continue this effort, your help is much welcome! Perhaps Guix could become the first distribution able to claim to have the whole of GNU available?