Next: Pautas de empaquetamiento, Previous: Alternative Setups, Up: Contribuir [Contents][Index]
If you’re willing to contribute to Guix beyond packages, or if you’d like to learn how it all fits together, this section provides a guided tour in the code base that you may find useful.
Overall, the Guix source tree contains almost exclusively Guile modules, each of which can be seen as an independent library (see Modules in GNU Guile Reference Manual).
The following table gives an overview of the main directories and what they
contain. Remember that in Guile, each module name is derived from its file
name—e.g., the module in file guix/packages.scm is called
(guix packages)
.
This is the location of core Guix mechanisms. To illustrate what is meant by “core”, here are a few examples, starting from low-level tools and going towards higher-level tools:
(guix store)
Connecting to and interacting with the build daemon (see El almacén).
(guix derivations)
Creating derivations (see Derivaciones).
(guix gexps)
Writing G-expressions (see Expresiones-G).
(guix packages)
Defining packages and origins (see Referencia de package
).
(guix download)
(guix git-download)
The url-fetch
and git-fetch
origin download methods
(see Referencia de origin
).
(guix swh)
Fetching source code from the Software Heritage archive.
(guix search-paths)
Implementing search paths (see Search Paths).
(guix build-system)
The build system interface (see Sistemas de construcción).
(guix profiles)
Implementing profiles.
This directory contains specific build system implementations (see Sistemas de construcción), such as:
(guix build-system gnu)
the GNU build system;
(guix build-system cmake)
the CMake build system;
(guix build-system pyproject)
The Python “pyproject” build system.
This contains code generally used on the “build side” (see strata of code). This includes code used to build packages or other operating system components, as well as utilities:
(guix build utils)
Utilities for package definitions and more (see Utilidades de construcción).
(guix build gnu-build-system)
(guix build cmake-build-system)
(guix build pyproject-build-system)
Implementation of build systems, and in particular definition of their build phases (see Fases de construcción).
(guix build syscalls)
Interface to the C library and to Linux system calls.
This contains modules corresponding to guix
sub-commands. For
example, the (guix scripts shell)
module exports the
guix-shell
procedure, which directly corresponds to the guix
shell
command (see Invoking guix shell
).
This contains supporting code for the importers and updaters
(see Invocación de guix import
, and see Invocación de guix refresh
). For
example, (guix import pypi)
defines the interface to PyPI, which is
used by the guix import pypi
command.
The directories we have seen so far all live under guix/. The other
important place is the gnu/ directory, which contains primarily
package definitions as well as libraries and tools for Guix System
(see Configuración del sistema) and Guix Home (see Home Configuration),
all of which build upon functionality provided by (guix …)
modules59.
This is by far the most crowded directory of the source tree: it contains package modules that export package definitions (see Módulos de paquetes). A few examples:
(gnu packages base)
Module providing “base” packages: glibc
, coreutils
,
grep
, etc.
(gnu packages guile)
Guile and core Guile packages.
(gnu packages linux)
The Linux-libre kernel and related packages.
(gnu packages python)
Python and core Python packages.
(gnu packages python-xyz)
Miscellaneous Python packages (we were not very creative).
In any case, you can jump to a package definition using guix edit
(see Invocación de guix edit
) and view its location with guix show
(see Invocación de guix package
).
This directory contains patches applied against packages and obtained using
the search-patches
procedure.
This contains service definitions, primarily for Guix System (see Servicios) but some of them are adapted and reused for Guix Home as we will see below. Examples:
(gnu services)
The service framework itself, which defines the service and service type data types (see Composición de servicios).
(gnu services base)
“Base” services (see Servicios base).
(gnu services desktop)
“Desktop” services (see Servicios de escritorio).
(gnu services shepherd)
Support for Shepherd services (see Servicios de Shepherd).
You can jump to a service definition using guix system edit
and
view its location with guix system search
(see Invoking guix system
).
These are core Guix System modules, such as:
(gnu system)
Defines operating-system
(see Referencia de operating-system
).
(gnu system file-systems)
Defines file-system
(see Sistemas de archivos).
(gnu system mapped-devices)
Defines mapped-device
(see Dispositivos traducidos).
These are modules that are either used on the “build side” when building operating systems or packages, or at run time by operating systems.
(gnu build accounts)
Creating /etc/passwd, /etc/shadow, etc. (see Cuentas de usuaria).
(gnu build activation)
Activating an operating system at boot time or reconfiguration time.
(gnu build file-systems)
Searching, checking, and mounting file systems.
(gnu build linux-boot)
(gnu build hurd-boot)
Booting GNU/Linux and GNU/Hurd operating systems.
(gnu build linux-initrd)
Creating a Linux initial RAM disk (see Disco en RAM inicial).
This contains all things Guix Home (see Home Configuration); examples:
(gnu home services)
Core services such as home-files-service-type
.
(gnu home services ssh)
SSH-related services (see Secure Shell).
This contains the text-mode graphical system installer (see Instalación gráfica guiada).
These are the machine abstractions used by guix deploy
(see Invoking guix deploy
).
This contains system tests—tests that spawn virtual machines to check that system services work as expected (see Ejecución de la batería de pruebas).
Last, there’s also a few directories that contain files that are not Guile modules:
This is the C++ implementation of guix-daemon
, inherited from Nix
(see Invocación de guix-daemon
).
These are unit tests, each file corresponding more or less to one module, in
particular (guix …)
modules (see Ejecución de la batería de pruebas).
This is the documentation in the form of Texinfo files: this manual and the Cookbook. See Writing a Texinfo File in GNU Texinfo, for information on Texinfo markup language.
This is the location of translations of Guix itself, of package synopses and descriptions, of the manual, and of the cookbook. Note that .po files that live here are pulled directly from Weblate (see Traduciendo Guix).
Miscellaneous files: shell completions, support for systemd and other init systems, Git hooks, etc.
With all this, a fair chunk of your operating system is at your fingertips!
Beyond grep
and git grep
, see La configuración perfecta on
how to navigate code from your editor, and see Using Guix Interactively
for information on how to use Scheme modules interactively. Enjoy!
For this reason, (guix …)
modules must
generally not depend on (gnu …)
modules, with notable
exceptions: (guix build-system …)
modules may look up packages
at run time—e.g., (guix build-system cmake)
needs to access the
cmake
variable at run time—, (guix scripts …)
often
rely on (gnu …)
modules, and the same goes for some of the
(guix import …)
modules.
Next: Pautas de empaquetamiento, Previous: Alternative Setups, Up: Contribuir [Contents][Index]