Próximo: Direct checkout hacking, 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 GNU Guix Reference Manual) 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 "Hello, Guix world: An example custom Guix package") (description "GNU Hello prints the message \"Hello, world!\" and then exits. It serves as an example of standard GNU coding practices. As such, it supports command-line arguments, multiple languages, and so on.") (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 "First commit of my channel."
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 GNU Guix Reference Manual); 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 GNU Guix Reference Manual, para detalhes.
Próximo: Direct checkout hacking, Anterior: Arquivo local, Acima: Configuração [Conteúdo][Índice]