Suivant: , Précédent: , Monter: Configuration   [Table des matières][Index]


2.1.2.2 Canaux

Guix et sa collection de paquet peut être étendu par des canaux. Un canal est un dépôt Git public ou non, qui contient des fichiers .scm qui fournissent des paquets (voir Définition des paquets dans le manuel de référence de GNU Guix) ou des services (voir Définir des services dans le manuel de référence de GNU Guix).

Comment créer un canal ? Tout d’abord, créez un répertoire qui contiendra vos fichiers .scm, disons ~/mon-canal :

mkdir ~/mon-canal

Imaginons que vous souhaitiez ajouter le paquet ‘my-hello’ que nous avons vu plus tôt. Il a d’abord besoin de quelques ajustement :

(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+)))

Remarquez que nous avons assigné la valeur du paquet à un nom de variable exportée avec define-public. Cela assigne en fait le paquet à la variable my-hello pour qu’elle puisse être utilisée, par exemple en dépendance d’un autre paquet.

Si vous utilisez guix package --install-from-file=my-hello.scm avec le fichier précédent, la commande échouera car la dernière expression, define-public, ne renvoie pas un paquet. Si vous voulez utiliser define-public dans ce cas tout de même, assurez-vous que le fichier termine par une évaluation de my-hello :

;; ...
(define-public my-hello
  ;; ...
  )

my-hello

Ce dernier exemple n’est pas très typique.

Maintenant, comme rendre ce paquet visible pour les commandes guix afin de tester vos paquets ? Vous devez ajouter le répertoire au chemin de recherche avec l’option en ligne de commande -L, comme dans ces exemples :

guix show -L ~/mon-canal my-hello
guix build -L ~/mon-canal my-hello

L’étape finale consiste à transformer ~/mon-canal en un vrai canal, pour rendre disponible votre collection de paquets via n’importe quelle commande guix. Pour cela, vous devez d’abord en faire un dépôt Git :

cd ~/mon-canal
git init
git add my-hello.scm
git commit -m "Premier commit sur mon canal."

Et voilà, vous avez un canal ! À partir de maintenant, vous pouvez ajouter ce canal à votre configuration des canaux dans ~/.config/guix/channels.scm (voir Spécifier des canaux supplémentaires dans le manuel de référence de GNU Guix). En supposant que vous gardez votre canal localement pour l’instant, le fichier channels.scm ressemblerait à quelque chose comme ça :

(append (list (channel
                (name 'mon-canal)
                (url (string-append "file://" (getenv "HOME")
                                    "/mon-canal"))))
        %default-channels)

La prochaine fois que vous exécuterez guix pull, votre canal sera récupéré et les paquets qu’il définit seront directement disponibles pour toutes les commandes guix, même si vous n’utilisez pas -L. La commande guix describe vous montrera que Guix utilise effectivement à la fois mon-canal et les canaux guix.

Voir Écrire de nouveaux de canaux dans le manuel de référence de GNU Guix pour des détails.


Suivant: Bidouillage direct dans le dépôt git, Précédent: Fichier local, Monter: Configuration   [Table des matières][Index]