Próximo: Conferir o hacking direto, Anterior: Arquivo local, Acima: Configuração [Conteúdo][Índice]
Guix e sua coleção de pacotes podem ser estendidos através de canais. Um canal é um repositório Git, público ou não, contendo arquivos .scm que fornecem pacotes (veja Definindo pacotes em Manual de Referência do GNU Guix) ou serviços (veja Definindo serviços em Manual de Referência GNU Guix).
Como você criaria um canal? Primeiro, crie um diretório que conterá seus arquivos .scm, digamos ~/my-channel:
mkdir ~/my-channel
Suponha que você queira adicionar o pacote ‘my-hello’ que vimos anteriormente; primeiro precisa de alguns ajustes:
(define-module (my-hello) #:use-module (guix licenses) #:use-module (guix packages) #:use-module (guix build-system gnu) #:use-module (guix download)) (define-public my-hello (package (name "my-hello") (version "2.10") (source (origin (method url-fetch) (uri (string-append "mirror://gnu/hello/hello-" version ".tar.gz")) (sha256 (base32 "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i")))) (build-system gnu-build-system) (synopsis "Olá, mundo Guix: Um exemplo de pacote Guix personalizado") (description "GNU Hello imprime a mensagem \"Olá, mundo!\" e então sai. Ele serve como um exemplo de práticas de codificação GNU padrão. Como tal, ele suporta argumentos de linha de comando, vários idiomas e assim por diante.") (home-page "https://www.gnu.org/software/hello/") (license gpl3+)))
Observe que atribuímos o valor do pacote a um nome de variável exportado com
define-public
. Isso é efetivamente atribuir o pacote à variável
my-hello
para que ele possa ser referenciado, entre outras coisas,
como dependência de outros pacotes.
Se você usar guix package --install-from-file=my-hello.scm
no arquivo
acima, ele falhará porque a última expressão, define-public
, não
retorna um pacote. Mesmo assim, se você quiser usar define-public
neste caso de uso, certifique-se de que o arquivo termine com uma avaliação
de my-hello
:
;; ... (define-public my-hello ;; ... ) my-hello
Este último exemplo não é muito típico.
Agora, como você torna esse pacote visível para os comandos guix
para poder testar seus pacotes? Você precisa adicionar o diretório ao
caminho de pesquisa usando a opção de linha de comando -L, como
nestes exemplos:
guix show -L ~/my-channel my-hello guix build -L ~/my-channel my-hello
A etapa final é transformar ~/my-channel em um canal real,
disponibilizando sua coleção de pacotes perfeitamente via qualquer
comando guix
. Para fazer isso, primeiro você precisa torná-lo um
repositório Git:
cd ~/my-channel git init git add my-hello.scm git commit -m "Primeiro commit do meu canal."
E pronto, você tem um canal! A partir daí, você pode adicionar este canal à configuração do seu canal em ~/.config/guix/channels.scm (veja Especificando canais adicionais em Manual de Referência do GNU Guix); supondo que você mantenha seu canal local por enquanto, o channels.scm ficaria mais ou menos assim:
(append (list (channel
(name 'my-channel)
(url (string-append "file://" (getenv "HOME")
"/my-channel"))))
%default-channels)
Da próxima vez que você executar guix pull
, seu canal será
selecionado e os pacotes que ele definir estarão prontamente disponíveis
para todos os comandos guix
, mesmo se você não passar
-L. O comando guix description
mostrará que o Guix está,
de fato, usando os canais my-channel
e guix
.
Veja Criando um canal em Manual de Referência do GNU Guix, para detalhes.
Próximo: Conferir o hacking direto, Anterior: Arquivo local, Acima: Configuração [Conteúdo][Índice]