Suivant: Bidouillage direct dans le dépôt git, Précédent: Fichier local, Monter: Configuration [Table des matières][Index]
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]