Précédent: Invoquer guix repl
, Monter: Interface de programmation [Table des matières][Index]
La commande guix repl
vous donne accès à une
boucle-lecture-évalutation-affichage (BLÉA ou REPL en anglais)
chaleureuse et amicale (voir Invoquer guix repl
). Si vous commencez la
programmation avec Guix — pour définir vos propres paquets, écrire des
manifestes, définir des services pour le système Guix ou Guix Home, etc —
vous la trouverez sans doute pratique pour jouer avec vos idées sur la REPL.
Si vous utilisez Emacs, le moyen le plus pratique pour cela est d’utiliser
Geiser (voir La configuration parfaite), mais vous n’avez pas besoin d’utiliser
Emacs pour profiter de la REPL. Lorsque vous utilisez guix repl
ou guile
dans un terminal, nous vous recommandons d’utiliser
Readline pour la complétion et Colorized pour avoir une sortie colorée. Pour
cela, vous pouvez lancer :
guix install guile guile-readline guile-colorized
… puis créer un fichier .guile dans votre répertoire personnel, contenant ceci :
(use-modules (ice-9 readline) (ice-9 colorized)) (activate-readline) (activate-colorized)
La REPL vous permet d’évaluer du code Scheme ; vous tapez une expression Scheme sur l’invite, et la REPL affiche ce en quoi elle s’évalue :
$ guix repl scheme@(guix-user)> (+ 2 3) $1 = 5 scheme@(guix-user)> (string-append "a" "b") $2 = "ab"
Ça devient plus intéressant quand vous commencez à jouer avec Guix sur la
REPL. La première chose à faire est « d’importer » le module (guix)
,
qui vous donne accès à la partie principale de l’interface de programmation,
et peut-être à un ensemble de modules Guix utiles. Vous pouvez taper
(use-modules (guix))
, ce qui est du code Scheme valide pour importer
un module (voir Using Guile Modules dans manuel de référence de GNU
Guile), mais la REPL fournit la commande use
comme raccourci
(voir REPL Commands dans manuel de référence de GNU Guile) :
scheme@(guix-user)> ,use (guix) scheme@(guix-user)> ,use (gnu packages base)
Remarquez que les commandes de la REPL sont introduites par une virgule. Une
commande REPL comme use
n’est pas du code Scheme valide, elle est
interprétée de manière spéciale par la REPL.
Guix étend la REPL Guile avec des commandes supplémentaires pour votre
confort. Parmi celles-ci, la commande build
est pratique : elle
s’assure que l’objet simili-fichier donné est construit, en le construisant
si nécessaire, et renvoie le nom de fichier de sa sortie. Dans l’exemple
ci-dessous, nous construisons les paquets coreutils
et grep
,
ainsi qu’un « fichiers calculé » (voir computed-file
), et nous utilisons la procédure scandir
pour
lister les fichiers du répertoire /bin
de Grep :
scheme@(guix-user)> ,build coreutils $1 = "/gnu/store/…-coreutils-8.32-debug" $2 = "/gnu/store/…-coreutils-8.32" scheme@(guix-user)> ,build grep $3 = "/gnu/store/…-grep-3.6" scheme@(guix-user)> ,build (computed-file "x" #~(mkdir #$output)) construction de /gnu/store/…-x.drv... $4 = "/gnu/store/…-x" scheme@(guix-user)> ,use(ice-9 ftw) scheme@(guix-user)> (scandir (string-append $3 "/bin")) $5 = ("." ".." "egrep" "fgrep" "grep")
As a packager, you may be willing to inspect the build phases or flags of a given package; this is particularly useful when relying a lot on inheritance to define package variants (voir Définition de variantes de paquets) or when package arguments are a result of some computation, both of which can make it harder to foresee what ends up in the package arguments. Additional commands let you inspect those package arguments:
scheme@(guix-user)> ,phases grep $1 = (modify-phases %standard-phases (add-after 'install 'fix-egrep-and-fgrep (lambda* (#:key outputs #:allow-other-keys) (let* ((out (assoc-ref outputs "out")) (bin (string-append out "/bin"))) (substitute* (list (string-append bin "/egrep") (string-append bin "/fgrep")) (("^exec grep") (string-append "exec " bin "/grep"))))))) scheme@(guix-user)> ,configure-flags findutils $2 = (list "--localstatedir=/var") scheme@(guix-user)> ,make-flags binutils $3 = '("MAKEINFO=true")
À plus bas niveau, une commande utile est lower
: elle prend un objet
simili-fichier et l’« abaisse » en une dérivation (voir Dérivations) ou
un fichier du dépôt :
scheme@(guix-user)> ,lower grep $6 = #<derivation /gnu/store/…-grep-3.6.drv => /gnu/store/…-grep-3.6 7f0e639115f0> scheme@(guix-user)> ,lower (plain-file "x" "Hello!") $7 = "/gnu/store/…-x"
La liste complète des commandes de la REPL se trouvent en tapant ,help
guix
et est donnée ci-dessous pour référence.
Abaisse objet et le construit s’il n’est pas déjà construit, et renvoie le nom de fichier de ses sorties.
Abaisse objet en une dérivation ou un nom de fichier du dépôt et le renvoie.
Change la verbosité des construction à niveau.
C’est similaire à l’option en ligne de commande --verbosity (voir Options de construction communes) : le niveau 0 signifie le silence total, le niveau 1 montre les événements de construction et les niveaux plus élevés affichent les journaux de construction.
These REPL commands return the value of one element of the arguments
field of package (voir Référence de package
): the first one show the
staged code associated with #:phases
(voir Phases de construction), the
second shows the code for #:configure-flags
, and ,make-flags
returns the code for #:make-flags
.
Lance exp, une expression monadique dans la monade du dépôt. Voir La monade du dépôt, pour plus d’information.
Entre dans une nouvelle REPL pour évaluer des expressions monadiques
(voir La monade du dépôt). Vous pouvez quitter la REPL « interne » en tapant
,q
.
Précédent: Invoquer guix repl
, Monter: Interface de programmation [Table des matières][Index]