Próximo: , Anterior: , Acima: Contribuindo   [Conteúdo][Índice]


22.7 Source Tree Structure

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 (veja Modules em 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).

guix

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 (veja O armazém).

(guix derivations)

Creating derivations (veja Derivações).

(guix gexps)

Writing G-expressions (veja Expressões-G).

(guix packages)

Defining packages and origins (veja package Reference).

(guix download)
(guix git-download)

The url-fetch and git-fetch origin download methods (veja origin Reference).

(guix swh)

Fetching source code from the Software Heritage archive.

(guix search-paths)

Implementing search paths (veja Search Paths).

(guix build-system)

The build system interface (veja Sistemas de compilação).

(guix profiles)

Implementing profiles.

guix/build-system

This directory contains specific build system implementations (veja Sistemas de compilação), 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.

guix/build

This contains code generally used on the “build side” (veja 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 (veja Build Utilities).

(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 (veja Build Phases).

(guix build syscalls)

Interface to the C library and to Linux system calls.

guix/scripts

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 (veja Invoking guix shell).

guix/import

This contains supporting code for the importers and updaters (veja Invoking guix import, and veja Invocando 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 (veja Configuração do sistema) and Guix Home (veja Home Configuration), all of which build upon functionality provided by (guix …) modules44.

gnu/packages

This is by far the most crowded directory of the source tree: it contains package modules that export package definitions (veja Módulos de pacote). 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 (veja Invocando guix edit) and view its location with guix show (veja Invocando guix package).

gnu/packages/patches

This directory contains patches applied against packages and obtained using the search-patches procedure.

gnu/services

This contains service definitions, primarily for Guix System (veja Serviços) 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 (veja Composição de serviço).

(gnu services base)

“Base” services (veja Serviços base).

(gnu services desktop)

“Desktop” services (veja Serviços de desktop).

(gnu services shepherd)

Support for Shepherd services (veja Serviços de Shepherd).

You can jump to a service definition using guix system edit and view its location with guix system search (veja Invoking guix system).

gnu/system

These are core Guix System modules, such as:

(gnu system)

Defines operating-system (veja operating-system Reference).

(gnu system file-systems)

Defines file-system (veja Sistemas de arquivos).

(gnu system mapped-devices)

Defines mapped-device (veja Dispositivos mapeados).

gnu/build

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. (veja Contas de usuários).

(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 (veja Disco de RAM inicial).

gnu/home

This contains all things Guix Home (veja Home Configuration); examples:

(gnu home services)

Core services such as home-files-service-type.

(gnu home services ssh)

SSH-related services (veja Secure Shell).

gnu/installer

This contains the text-mode graphical system installer (veja Instalação gráfica guiada).

gnu/machine

These are the machine abstractions used by guix deploy (veja Invoking guix deploy).

gnu/tests

This contains system tests—tests that spawn virtual machines to check that system services work as expected (veja Executando a suíte de testes).

Last, there’s also a few directories that contain files that are not Guile modules:

nix

This is the C++ implementation of guix-daemon, inherited from Nix (veja Invocando guix-daemon).

tests

These are unit tests, each file corresponding more or less to one module, in particular (guix …) modules (veja Executando a suíte de testes).

doc

This is the documentation in the form of Texinfo files: this manual and the Cookbook. Veja Writing a Texinfo File em GNU Texinfo, for information on Texinfo markup language.

po

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 (veja Traduzindo o Guix).

etc

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, veja A configuração perfeita on how to navigate code from your editor, and veja Using Guix Interactively for information on how to use Scheme modules interactively. Enjoy!


Notas de Rodapé

(44)

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.


Próximo: Diretrizes de empacotamento, Anterior: Alternative Setups, Acima: Contribuindo   [Conteúdo][Índice]