Working directly on the Guix project is recommended: it reduces the friction when the time comes to submit your changes upstream to let the community benefit from your hard work!
Unlike most software distributions, the Guix repository holds in one place both the tooling (including the package manager) and the package definitions. This choice was made so that it would give developers the flexibility to modify the API without breakage by updating all packages at the same time. This reduces development inertia.
Check out the official Git repository:
$ git clone https://git.savannah.gnu.org/git/guix.git
In the rest of this article, we use ‘$GUIX_CHECKOUT’ to refer to the location of the checkout.
Follow the instructions in the manual (see Contributing in GNU Guix Reference Manual) to set up the repository environment.
Once ready, you should be able to use the package definitions from the repository environment.
Feel free to edit package definitions found in ‘$GUIX_CHECKOUT/gnu/packages’.
The ‘$GUIX_CHECKOUT/pre-inst-env’ script lets you use ‘guix’ over the package collection of the repository (see Running Guix Before It Is Installed in GNU Guix Reference Manual).
$ cd $GUIX_CHECKOUT $ ./pre-inst-env guix package --list-available=ruby ruby 1.8.7-p374 out gnu/packages/ruby.scm:119:2 ruby 2.1.6 out gnu/packages/ruby.scm:91:2 ruby 2.2.2 out gnu/packages/ruby.scm:39:2
$ ./pre-inst-env guix build --keep-failed email@example.com /gnu/store/c13v73jxmj2nir2xjqaz5259zywsa9zi-ruby-2.1.6
$ ./pre-inst-env guix package --install firstname.lastname@example.org
$ ./pre-inst-env guix lint email@example.com
Guix strives at maintaining a high packaging standard; when contributing to the Guix project, remember to
Once you are happy with the result, you are welcome to send your contribution to make it part of Guix. This process is also detailed in the manual. (see Contributing in GNU Guix Reference Manual)
It’s a community effort so the more join in, the better Guix becomes!