Acima: Gerenciamento de ambientes   [Conteúdo][Índice]


8.1 Ambiente Guix via direnv

Guix fornece um pacote ‘direnv’, que pode estender o shell após a mudança de diretório. Esta ferramenta pode ser usada para preparar um ambiente Guix puro.

O exemplo a seguir fornece uma função de shell para o arquivo ~/.direnvrc, que pode ser usada no repositório Guix Git no arquivo ~/src/guix/.envrc para configurar um ambiente de compilação semelhante ao descrito em veja Compilando do git em Manual de Referência do GNU Guix.

Crie um ~/.direnvrc com um código Bash:

# Obrigado <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
    # Observe que adicionamos variáveis de shell ao gatilho da função.
    echo "$name \$*" >> "$target"
    chmod +x "$target"
  fi
}

use_guix()
{
    # Defina o token do GitHub.
    export GUIX_GITHUB_TOKEN="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

    # Unset 'GUIX_PACKAGE_PATH'.
    export GUIX_PACKAGE_PATH=""

    # Recrie uma raiz do coletor de lixo.
    gcroots="$HOME/.config/guix/gcroots"
    mkdir -p "$gcroots"
    gcroot="$gcroots/guix"
    if [ -L "$gcroot" ]
    then
        rm -v "$gcroot"
    fi

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

    # Pacotes de ambiente.
    PACKAGES=(help2man guile-sqlite3 guile-gcrypt)

    # Obrigado <https://lists.gnu.org/archive/html/guix-devel/2016-09/msg00859.html>
    eval "$(guix shell --search-paths --root="$gcroot" --pure \
     --development guix ${PACKAGES[@]} ${PACKAGES_MAINTENANCE[@]} "$@")"

    # Predefina sinalizadores de configuração.
    configure()
    {
        ./configure
    }
    export_function configure

    # Execute make e, opcionalmente, construa algo.
    build()
    {
        make -j 2
        if [ $# -gt 0 ]
        then
            ./pre-inst-env guix build "$@"
        fi
    }
    export_function build

    # Predefina o comando push do Git.
    push()
    {
        git push --set-upstream origin
    }
    export_function push

    clear                        # Limpe a tela.
    git-cal --author='Seu nome' # Mostrar calendário de contribuições.

    #Mostrar ajuda de comandos.
    echo "
build          construir um pacote ou apenas um projeto se nenhum argumento for fornecido
configure      execute ./configure com parâmetros predefinidos
push           enviar para o repositório Git upstream
"
}

Cada projeto contendo .envrc com uma string use guix terá variáveis de ambiente e procedimentos predefinidos.

Execute direnv allow para configurar o ambiente pela primeira vez.


Acima: Gerenciamento de ambientes   [Conteúdo][Índice]