Próximo: , Anterior: , Acima: Configuração   [Conteúdo][Índice]


2.1.2.2 Canais

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]