Guix: “Search & Discovery” NLNet grant 2020

I’m happy to let your know that my application to the NLNet Next Generation Internet – Search & Discovery grant for Guix has been accepted!

You’ll find official grant entry here: https://nlnet.nl/project/GUIX/ (the description is misleading, read on for the actual plan).

See also the European Union NGI website behind this initiative.

This grant will allow me to work on Guix for a flexible period of time, probably between 6 months and 1 year.

Here follows the current plan which is still subject to change. Ideas, suggestions and criticism are welcome!

The main goal is to enhance search and discovery of Guix packages and services via a catalogue. The subgoal is to refine the meaning of “packages” and “services” within the context of Guix by completing them and broadening their domain.

While I’ll be financially supported by the grant for these specific tasks, I also commit significant work into the development and promotion of Guix and related projects on my limited free time. (See my other projects). If you like what I do and would like help me spend more time on Guix and make free software greater every day, consider supporting me financially, I’d be tremendously grateful for every little bit of help :)

Thank you!

Next follows the list of tasks I aim to tackle.

Parameterized packages Gentoo’s package manager, Portage, exposes a “USE flags” feature which allows users to customize packages in a way that composes (e.g. “disable the GUI elements of all packages” for a headless server). This essentially subdivides packages into smaller “components.” Since those components form the smallest atoms a user could search for, this is a prerequisite for the rest of the searchability improvements. The goal of this task is to implement some form of easy-to-use, composable package parameterization. References: https://lists.gnu.org/archive/html/guix-devel/2019-05/msg00285.html

https://lists.gnu.org/archive/html/guix-devel/2020-01/msg00026.html

File search Many package managers support looking up packages by the file paths they include. This feature is missing in Guix while being crucial for search, e.g. when the user knows the executable name which happens to be different from the package name. The goal of this task is to allow the user to search for any packaged file, installed or not. References: https://lists.gnu.org/archive/html/guix-devel/2019-03/msg00236.html

https://lists.gnu.org/archive/html/guix-devel/2020-01/msg00019.html

User services Guix provides excellent integration with GNU Shepherd for system services (all configurations are programmable and composable using Guile). But it lacks integration for user services. User services can be used to replace much of the traditional “dotfiles” which are often ad-hoc hacks (e.g. environment variables, scripts, various program configurations such as GnuPG). The benefit is as for packages: the work of one can be redistributed to many. Finally, services are not searchable with Guix. We could fix this issue. The goal of this task is to integrate Guix with GNU Shepherd to support user services. A user service should then automatically require the necessary packages, just like a system service does. For instance if the user sets up a GnuPG service, they don’t have to install GnuPG explicitly, Guix+Shepherd will take care of that. References: Guix shepherd user services: https://lists.gnu.org/archive/html/guix-devel/2019-02/msg00128.html

Julien’s home manager: https://lists.gnu.org/archive/html/guix-devel/2019-09/msg00185.html

Nix Home Manager: https://nixos.wiki/wiki/Home_Manager

…? I believe there were many more discussion on user services on the mailing list, feel free to share them!

Graphical user interface (GUI) Guix comes with a command line interface and some Emacs interfaces. None of them are particularly newcomer-friendly. Besides, much of the configuration is done by editing Guile files. The goal of this task is to make Guix more accessible to non-tech users by providing an intuitive user interface to most of Guix actions, in particular: manage channels,

manage profiles,

live fuzzy-search everything (packages, files, services),

edit the (system) configuration.