Let’s say you have a bunch of custom package variants or personal packages that you think would make little sense to contribute to the Guix project, but would like to have these packages transparently available to you at the command line. By creating a channel, you can use and publish such a package collection. This involves the following steps:
mkdir my-channel cd my-channel git init
For example, Alice might want to provide a module called
packages greetings) that will provide her favorite “hello world”
implementations. To do that Alice will create a directory corresponding
to that module name.
mkdir -p alice/packages $EDITOR alice/packages/greetings.scm git add alice/packages/greetings.scm
You can name your package modules however you like; the main constraint
to keep in mind is to avoid name clashes with other package collections,
which is why our hypothetical Alice wisely chose the
packages …) name space.
Note that you can also place modules in a sub-directory of the repository; see Package Modules in a Sub-directory, for more info on that.
guix build, which needs to
be told to look for modules in the Git checkout. For example, assuming
(alice packages greetings) provides a package called
hi-from-alice, Alice will run this command from the Git checkout:
guix build -L. hi-from-alice
-L. adds the current directory to Guile’s load path
(see Load Paths in GNU Guile Reference Manual).
As a channel author, consider bundling authentication material with your channel so that users can authenticate it. See Channel Authentication, and Specifying Channel Authorizations, for info on how to do it.
$EDITOR ~/.config/guix/channels.scm guix pull
Guix will now behave as if the root directory of that channel’s Git
repository had been permanently added to the Guile load path. In this
(alice packages greetings) will automatically be found
Warning: Before you publish your channel, we would like to share a few words of caution:
- Before publishing a channel, please consider contributing your package definitions to Guix proper (see Contributing). Guix as a project is open to free software of all sorts, and packages in Guix proper are readily available to all Guix users and benefit from the project’s quality assurance process.
- Package modules and package definitions are Scheme code that uses various programming interfaces (APIs). We, Guix developers, never change APIs gratuitously, but we do not commit to freezing APIs either. When you maintain package definitions outside Guix, we consider that the compatibility burden is on you.
- Corollary: if you’re using an external channel and that channel breaks, please report the issue to the channel authors, not to the Guix project.
You’ve been warned! Having said this, we believe external channels are a practical way to exert your freedom to augment Guix’ package collection and to share your improvements, which are basic tenets of free software. Please email us at firstname.lastname@example.org if you’d like to discuss this.