Próximo: Diretrizes de empacotamento, Anterior: Configurações alternativas, Acima: Contribuindo [Conteúdo][Índice]
Se você estiver disposto a contribuir com o Guix além dos pacotes, ou se quiser aprender como tudo se encaixa, esta seção fornece um tour guiado na base de código que pode ser útil.
No geral, a árvore de origem do Guix contém quase exclusivamente Guile módulos, cada um dos quais pode ser visto como uma biblioteca independente (veja Modules em Manual de Referência do GNU Guile).
A tabela a seguir fornece uma visão geral dos principais diretórios e o que
eles contêm. Lembre-se de que no Guile, cada nome de módulo é derivado de
seu nome de arquivo—por exemplo, o módulo no arquivo
guix/packages.scm é chamado (guix packages)
.
Esta é a localização dos mecanismos principais do Guix. Para ilustrar o que significa “core”, aqui estão alguns exemplos, começando com ferramentas de baixo nível e indo em direção a ferramentas de nível mais alto:
(guix store)
Conectando e interagindo com o daemon de compilação (veja O armazém).
(guix derivations)
Criando derivações (veja Derivações).
(guix gexps)
Escrevendo expressões-G (veja Expressões-G).
(guix packages)
Definindo pacotes e origens (veja package
Reference).
(guix download)
(guix git-download)
Os métodos de download de origem url-fetch
e git-fetch
(veja origin
Reference).
(guix swh)
Obtendo código-fonte do arquivo Software Heritage.
(guix search-paths)
Implementando caminhos de pesquisa (veja Caminhos de pesquisa).
(guix build-system)
A interface do sistema de compilação (veja Sistemas de compilação).
(guix profiles)
Implementing profiles.
Este diretório contém implementações específicas do sistema de compilação (veja Sistemas de compilação), como:
(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.
Isto contém código geralmente usado no “lado da construção” (veja strata of code). Isto inclui código usado para construir pacotes ou outros componentes do sistema operacional, assim como utilitários:
(guix build utils)
Utilitários para definições de pacotes e muito mais (veja Construir utilitários).
(guix build gnu-build-system)
(guix build cmake-build-system)
(guix build pyproject-build-system)
Implementação de sistemas de construção e, em particular, definição de suas fases de construção (veja Fases de construção).
(guix build syscalls)
Interface para a biblioteca C e para chamadas de sistema Linux.
Isto contém módulos correspondentes aos subcomandos guix
. Por
exemplo, o módulo (guix scripts shell)
exporta o procedimento
guix-shell
, que corresponde diretamente ao comando guix
shell
(veja Invoking guix shell
).
Isto contém código de suporte para os importadores e atualizadores
(veja Invoking guix import
e veja Invocando guix refresh
). Por exemplo,
(guix import pypi)
define a interface para PyPI, que é usada pelo
comando guix import pypi
.
Todos os diretórios que vimos até agora estão em guix/. O outro lugar
importante é o diretório gnu/, que contém principalmente definições
de pacotes, bem como bibliotecas e ferramentas para Guix System
(veja Configuração do sistema) e Guix Home (veja Home Configuration),
todos os quais se baseiam na funcionalidade fornecida pelos módulos
(guix …)
46.
Este é de longe o diretório mais lotado da árvore de fontes: ele contém package modules que exportam definições de pacotes (veja Módulos de pacote). Alguns exemplos:
(gnu packages base)
Módulo que fornece pacotes “base”: glibc
, coreutils
,
grep
, etc.
(gnu packages guile)
Guile e pacotes principais do Guile.
(gnu packages linux)
O kernel Linux-libre e pacotes relacionados.
(gnu packages python)
Python e pacotes principais do Python.
(gnu packages python-xyz)
Pacotes Python diversos (não fomos muito criativos).
Em qualquer caso, você pode pular para uma definição de pacote usando
guix edit
(veja Invocando guix edit
) e visualizar sua
localização com guix show
(veja Invocando guix package
).
Este diretório contém patches aplicados aos pacotes e obtidos usando o
procedimento search-patches
.
Isto contém definições de serviço, principalmente para Guix System (veja Serviços), mas algumas delas são adaptadas e reutilizadas para Guix Home, como veremos abaixo. Exemplos:
(gnu services)
A estrutura do serviço em si, que define os tipos de dados do serviço e do tipo de serviço (veja Composição de serviço).
(gnu services base)
Serviços “Básicos” (veja Serviços básicos).
(gnu services desktop)
Serviços “Desktop” (veja Serviços de desktop).
(gnu services shepherd)
Apoio aos serviços Shepherd (veja Serviços de Shepherd).
Você pode pular para uma definição de serviço usando guix system
edit
e visualizar sua localização com guix system search
(veja Invoking guix system
).
Estes são os principais módulos do sistema Guix, como:
(gnu system)
Define operating-system
(veja operating-system
Reference).
(gnu system file-systems)
Define file-system
(veja Sistemas de arquivos).
(gnu system mapped-devices)
Define mapped-device
(veja Dispositivos mapeados).
Esses são módulos que são usados no “lado da compilação” ao criar sistemas operacionais ou pacotes, ou em tempo de execução pelos sistemas operacionais.
(gnu build accounts)
Criando /etc/passwd, /etc/shadow, etc. (veja Contas de usuário).
(gnu build activation)
Ativar um sistema operacional no momento da inicialização ou da reconfiguração.
(gnu build file-systems)
Pesquisar, verificar e montar sistemas de arquivos.
(gnu build linux-boot)
(gnu build hurd-boot)
Inicializando sistemas operacionais GNU/Linux e GNU/Hurd.
(gnu build linux-initrd)
Criando um disco RAM inicial do Linux (veja Disco de RAM inicial).
Isso contém todas as coisas do Guix Home (veja Home Configuration); exemplos:
(gnu home services)
Serviços principais como home-files-service-type
.
(gnu home services ssh)
Serviços relacionados a SSH (veja Secure Shell).
Isso contém o instalador do sistema gráfico em modo texto (veja Instalação gráfica guiada).
Estas são as abstrações de máquina usadas por guix deploy
(veja Invoking guix deploy
).
Isso contém testes de sistema — testes que geram máquinas virtuais para verificar se os serviços do sistema funcionam conforme o esperado (veja Executando o conjunto de testes).
Por fim, há também alguns diretórios que contêm arquivos que não são módulos Guile:
Esta é a implementação C++ do guix-daemon
, herdada do Nix
(veja Invocando guix-daemon
).
Esses são testes unitários, cada arquivo correspondendo mais ou menos a um
módulo, em particular os módulos (guix …)
(veja Executando o conjunto de testes).
Esta é a documentação na forma de arquivos Texinfo: este manual e o Livro de receitas. Veja Writing a Texinfo File em GNU Texinfo, para informações sobre a linguagem de marcação Texinfo.
Este é o local das traduções do próprio Guix, das sinopses e descrições dos pacotes, do manual e do livro de receitas. Note que os arquivos .po que vivem aqui são retirados diretamente do Weblate (veja Traduzindo o Guix).
Arquivos diversos: conclusões de shell, suporte para systemd e outros sistemas init, ganchos do Git, etc.
Com tudo isso, uma boa parte do seu sistema operacional está na ponta dos
seus dedos! Além de grep
e git grep
, veja A configuração perfeita sobre como navegar no código do seu editor e veja Using Guix Interactively para obter informações sobre como usar módulos Scheme
interativamente. Aproveite!
Por esse motivo, os módulos (guix
…)
geralmente não devem depender dos módulos (gnu …)
,
com exceções notáveis: os módulos (guix build-system …)
podem
procurar pacotes em tempo de execução — por exemplo, (guix
build-system cmake)
precisa acessar a variável cmake
em tempo de
execução —, (guix scripts …)
geralmente dependem dos módulos
(gnu …)
, e o mesmo vale para alguns dos módulos (guix
import …)
módulos.
Próximo: Diretrizes de empacotamento, Anterior: Configurações alternativas, Acima: Contribuindo [Conteúdo][Índice]