Suivant: , Monter: Les profils Guix en pratique   [Table des matières][Index]


6.1.1 Utilisation de base avec des manifestes

Un profil Guix peut être paramétré par un manifeste. Un manifeste est un bout de code Scheme qui spécifie l’ensemble des paquets que vous voulez avoir dans votre profil ; il ressemble à ceci :

(specifications->manifest
  '("package-1"
    ;; Version 1.3 de package-2.
    "package-2@1.3"
    ;; La sortie « lib » de package-3.
    "package-3:lib"
    ; ...
    "package-N"))

Voir Écrire un manifeste dans le manuel de référence de GNU Guix, pour plus d’informations sur la syntaxe.

On peut créer une spécification de manifeste par profil et les installer de cette manière :

GUIX_EXTRA_PROFILES=$HOME/.guix-extra-profiles
mkdir -p "$GUIX_EXTRA_PROFILES"/my-project # s'il n'existe pas encore
guix package --manifest=/path/to/guix-my-project-manifest.scm \
 --profile="$GUIX_EXTRA_PROFILES"/my-project/my-project

On spécifie ici une variable arbitraire ‘GUIX_EXTRA_PROFILES’ pour pointer vers le répertoire où seront stockés nos profils dans le reste de cet article.

C’est un peu plus propre de placer tous vos profils dans un répertoire unique, où chaque profil a son propre sous-répertoire. De cette manière, chaque sous-répertoire contiendra tous les liens symboliques pour exactement un profil. En plus, il devient facile d’énumérer les profils depuis n’importe quel langage de programmation (p. ex. un script shell) en énumérant simplement les sous-répertoires de ‘$GUIX_EXTRA_PROFILES’.

Remarquez qu’il est aussi possible d’utiliser la sortie de

guix package --list-profiles

même si vous devrez sans doute enlever ~/.config/guix/current.

Pour activer tous les profils à la connexion, ajoutez cela à votre ~/.bash_profile (ou similaire) :

for i in $GUIX_EXTRA_PROFILES/*; do
  profile=$i/$(basename "$i")
  if [ -f "$profile"/etc/profile ]; then
    GUIX_PROFILE="$profile"
    . "$GUIX_PROFILE"/etc/profile
  fi
  unset profile
done

Remarque pour les utilisateurs du système Guix : ce qui précède ressemble à la manière dont votre profil par défaut ~/.guix-profile est activé dans /etc/profile, ce dernier étant chargé par défaut par ~/.bashrc.

Vous pouvez évidemment choisir de n’en activer qu’une partie :

for i in "$GUIX_EXTRA_PROFILES"/my-project-1 "$GUIX_EXTRA_PROFILES"/my-project-2; do
  profile=$i/$(basename "$i")
  if [ -f "$profile"/etc/profile ]; then
    GUIX_PROFILE="$profile"
    . "$GUIX_PROFILE"/etc/profile
  fi
  unset profile
done

Lorsqu’un profil est désactivé, il est facile de l’activer pour un shell individuel sans « polluer » le reste de la session :

GUIX_PROFILE="path/to/my-project" ; . "$GUIX_PROFILE"/etc/profile

Le secret pour activer un profil est de sourcer son fichier ‘etc/profile’. Ce fichier contient du code shell qui exporte les bonnes variables d’environnement nécessaires à activer les logiciels présents dans le profil. Il est créé automatiquement par Guix et doit être sourcé. Il contient les mêmes variables que ce que vous obtiendrez en lançant :

guix package --search-paths=prefix --profile=$my_profile"

Encore une fois, Voir Invoquer guix package dans le manuel de référence de GNU Guix pour les options de la ligne de commande.

Pour mettre à jour un profil, installez de nouveau le manifeste :

guix package -m /path/to/guix-my-project-manifest.scm \
 -p "$GUIX_EXTRA_PROFILES"/my-project/my-project

Pour mettre à jour tous les profils, vous pouvez simplement les énumérer. Par exemple, en supposant que vous spécifications sont dans ~/.guix-manifests/guix-$profile-manifest.scm, où ‘$profile’ est le nom du profil (p. ex « projet1 »), vous pouvez utiliser ce qui suit dans le shell :

for profile in "$GUIX_EXTRA_PROFILES"/*; do
  guix package --profile="$profile" \
   --manifest="$HOME/.guix-manifests/guix-$profile-manifest.scm"
done

Chaque profil a ses propres générations :

guix package -p "$GUIX_EXTRA_PROFILES"/my-project/my-project --list-generations

Vous pouvez revenir à n’importe quelle génération d’un profil donné :

guix package -p "$GUIX_EXTRA_PROFILES"/my-project/my-project --switch-generations=17

Enfin, si vous voulez passer à un profil sans hériter l’environnement actuel, vous pouvez l’activer dans un shell vide :

env -i $(which bash) --login --noprofile --norc
. my-project/etc/profile

Suivant: Paquets requis, Monter: Les profils Guix en pratique   [Table des matières][Index]