Nach oben: Umgebungen verwalten   [Inhalt][Index]


8.1 Guix-Umgebung mit direnv

Guix stellt ein ‘direnv’-Paket zur Verfügung, mit der die Shell nach einem Verzeichniswechsel erweitert werden kann. Dieses Werkzeug kann benutzt werden, um eine reine, „pure“ Guix-Umgebung vorzubereiten.

Das folgende Beispiel zeigt eine Shell-Funktion für die ~/.direnvrc-Datei, die in einer Datei ~/src/guix/.envrc in Guix’ Git-Repository benutzt werden kann, um eine zur Beschreibung im Erstellung aus dem Git in Referenzhandbuch zu GNU Guix ähnliche Erstellungsumgebung herzustellen.

Erstellen Sie eine ~/.direnvrc mit einem Bash-Code darin:

# Dank an <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
    # Beachten Sie, wir fügen Shell-Variable in den Funktionsauslöser ein.
    echo "$name \$*" >> "$target"
    chmod +x "$target"
  fi
}

use_guix()
{
    # GitHub-Token festlegen.
    export GUIX_GITHUB_TOKEN="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

    # Deaktivieren von 'GUIX_PACKAGE_PATH'.
    export GUIX_PACKAGE_PATH=""

    # Müllsammlerwurzel neu erzeugen.
    gcroots="$HOME/.config/guix/gcroots"
    mkdir -p "$gcroots"
    gcroot="$gcroots/guix"
    if [ -L "$gcroot" ]
    then
        rm -v "$gcroot"
    fi

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

    # In die Umgebung aufzunehmende Pakete.
    PACKAGES=(help2man guile-sqlite3 guile-gcrypt)

    # Dank an <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[@]} "$@")"

    # configure-Optionen vordefinieren.
    configure()
    {
        ./configure --localstatedir=/var --prefix=
    }
    export_function configure

    # make ausführen und optional etwas erstellen.
    build()
    {
        make -j 2
        if [ $# -gt 0 ]
        then
            ./pre-inst-env guix build "$@"
        fi
    }
    export_function build

    # Git-Befehl zum Pushen vordefinieren.
    push()
    {
        git push --set-upstream origin
    }
    export_function push

    clear                        # Den Bildschirm löschen.
    git-cal --author='Ihr Name'  # Kalender bisheriger Beiträge zeigen.

    # Befehlsübersicht anzeigen.
    echo "
build          ein Paket oder, ohne Argumente, ein Projekt erstellen
configure      ./configure mit vordefinierten Parametern
push           ins Upstream-Git-Repository pushen
"
}

Jedes Projekt, das eine .envrc mit einer Zeichenkette use guix enthält, wird vordefinierte Umgebungsvariable und Prozeduren verwenden.

Führen Sie direnv allow aus, um die Umgebung bei der ersten Nutzung einzurichten.


Nach oben: Umgebungen verwalten   [Inhalt][Index]