Next: Defining Packages, Up: Programming Interface [Contents][Index]
From a programming viewpoint, the package definitions of the
GNU distribution are provided by Guile modules in the (gnu packages
…)
name space17 (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).
The (gnu packages …)
module name space is
automatically scanned for packages by the command-line tools. For
instance, when running guix install emacs
, all the (gnu
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
names—e.g., (my-packages emacs)
18. There are two ways to make
these package definitions visible to the user interfaces:
-L
flag of guix package
and other commands
(see Common Build Options), or by setting the GUIX_PACKAGE_PATH
environment variable described below.
guix pull
so that it
pulls from it. A channel is essentially a Git repository containing package
modules. See Channels, for more information on how to define and use
channels.
GUIX_PACKAGE_PATH
works similarly to other search path variables:
This is a colon-separated list of directories to search for additional package modules. Directories listed in this variable take precedence over the own modules of the distribution.
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 (gnu packages
bootstrap)
module. For more information on bootstrapping,
see Bootstrapping.
Note that packages under the (gnu
packages …)
module name space are not necessarily “GNU
packages”. This module naming scheme follows the usual Guile module
naming convention: gnu
means that these modules are distributed
as part of the GNU system, and packages
identifies modules that
define packages.
Note that the file
name and module name must match. For instance, the (my-packages
emacs)
module must be stored in a my-packages/emacs.scm file
relative to the load path specified with --load-path or
GUIX_PACKAGE_PATH
. See Modules and the File System in GNU Guile Reference Manual, for details.
Next: Defining Packages, Up: Programming Interface [Contents][Index]