Monter: Gestion de l’environnement   [Table des matières][Index]


8.1 Environnement Guix avec direnv

Guix fournit un paquet ‘direnv’, qui peut étendre le shell après avoir changé de répertoire de travail. Vous pouvez utiliser cet outil pour préparer un environnement Guix pur.

L’exemple suivant fournit une fonction shell dans ~/.direnvrc, qui peut être utilisée dans le dépôt Git de Guix dans ~/src/guix/.envrc pour créer un environnement de construction similaire à celui décrit dans Construire depuis Git dans le manuel de référence de GNU Guix.

Créez un fichier ~/.direnv avec le code Bash suivant :

# Grâce à <https://github.com/direnv/direnv/issues/73#issuecomment-152284914>
export_function()
{
  local name=$1
  local alias_dir=$PWD/.direnv/aliases
  mkdir -p "$alias_dir"
  PATH_add "$alias_dir"
  local target="$alias_dir/$name"
  if declare -f "$name" >/dev/null; then
    echo "#!$SHELL" > "$target"
    declare -f "$name" >> "$target" 2>/dev/null
    # Remarquez qu'on ajoute des variables shells au déclencheur de la fonction.
    echo "$name \$*" >> "$target"
    chmod +x "$target"
  fi
}

use_guix()
{
    # indique un jeton Github.
    export GUIX_GITHUB_TOKEN="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

    # Nettoie « GUIX_PACKAGE_PATH ».
    export GUIX_PACKAGE_PATH=""

    # Recrée une racine du ramasse miettes.
    gcroots="$HOME/.config/guix/gcroots"
    mkdir -p "$gcroots"
    gcroot="$gcroots/guix"
    if [ -L "$gcroot" ]
    then
        rm -v "$gcroot"
    fi

    # Divers paquets.
    PACKAGES_MAINTENANCE=(
        direnv
        git
        git:send-email
        git-cal
        gnupg
        guile-colorized
        guile-readline
        less
        ncurses
        openssh
        xdot
    )

    # Paquets de l'environnement.
    PACKAGES=(help2man guile-sqlite3 guile-gcrypt)

    # Grâce à <https://lists.gnu.org/archive/html/guix-devel/2016-09/msg00859.html>
    eval "$(guix environment --search-paths --root="$gcroot" --pure guix --ad-hoc ${PACKAGES[@]} ${PACKAGES_MAINTENANCE[@]} "$@")"

    # Défini les drapeaux configure à l'avance.
    configure()
    {
        ./configure --localstatedir=/var --prefix=
    }
    export_function configure

    # Lance make et construit éventuellement quelque chose.
    build()
    {
        make -j 2
        if [ $# -gt 0 ]
        then
            ./pre-inst-env guix build "$@"
        fi
    }
    export_function build

    # Défini une commande Git pour pousser.
    push()
    {
        git push --set-upstream origin
    }
    export_function push

    clear                        # Nettoie l'écran.
    git-cal --author='Votre Nom' # Montre le calendrier des contributions.

    # Montre l'aide des commandes.
    echo "
build          construit un paquet ou juste un projet si aucun argument n'est fournit
configure      lance ./configure avec les paramètres pré-définis
push           pousse un dépôt Git
"
}

Tous les projets contenant un .envrc avec une chaine use guix aura des variables d’environnement et des procédures prédéfinies.

Lancez direnv allow pour mettre en place l’environnement pour la première fois.


Monter: Gestion de l’environnement   [Table des matières][Index]