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 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]