From a programming viewpoint, the package definitions of the
GNU distribution are provided by Guile modules in the
…) name space16 (see Guile modules in GNU Guile
Reference Manual). For instance, the
(gnu packages emacs)
module exports a variable named
emacs, which is bound to a
<package> object (see Defining Packages).
(gnu packages …) module name space is
automatically scanned for packages by the command-line tools. For
instance, when running
guix package -i emacs, all the
packages …) modules are scanned until one that exports a package
object whose name is
emacs is found. This package search
facility is implemented in the
(gnu packages) module.
Users can store package definitions in modules with different
(my-packages emacs)17 These package definitions
will not be visible by default. Thus, users can invoke commands such as
guix package and
guix build have to be used with the
-e option so that they know where to find the package, or use the
-L option of these commands to make those modules visible
--load-path), or define the
GUIX_PACKAGE_PATH environment variable. This environment
variable makes it easy to extend or customize the distribution and is
honored by all the user interfaces.
This is a colon-separated list of directories to search for package modules. Directories listed in this variable take precedence over the distribution’s own modules.
The distribution is fully bootstrapped and self-contained:
each package is built based solely on other packages in the
distribution. The root of this dependency graph is a small set of
bootstrap binaries, provided by the
bootstrap) module. For more information on bootstrapping,
Note that packages under the
packages …) module name space are not necessarily “GNU
packages”. This module naming scheme follows the usual Guile module
gnu means that these modules are distributed
as part of the GNU system, and
packages identifies modules that
Note that the file name and module name must match. See Modules and the File System in GNU Guile Reference Manual, for details.