Próximo: , Acima: Perfis Guix na Prática   [Conteúdo][Índice]


6.1.1 Configuração básica com manifestos

Um perfil Guix pode ser configurado via um manifest. Um manifesto é um trecho de código Scheme que especifica o conjunto de pacotes que você quer ter em seu perfil; parece com isso:

(specifications->manifest
 '("pacote-1"
   ;; Versão 1.3 do pacote-2.
   "pacote-2@1.3"
   ;; A saída "lib" do pacote-3.
   "pacote-3:lib"
   ; ...
   "pacote-N"))

Veja Escrevendo manifestos em Manual de referência do GNU Guix, para mais informações sobre a sintaxe.

Podemos criar uma especificação de manifesto por perfil e instalá-los desta maneira:

GUIX_EXTRA_PROFILES=$HOME/.guix-extra-profiles
mkdir -p "$GUIX_EXTRA_PROFILES"/meu-projeto # se ainda não existir
guix package --manifest=/caminho/para/guix-meu-projeto-manifest.scm \
 --profile="$GUIX_EXTRA_PROFILES"/meu-projeto/meu-projeto

Aqui definimos uma variável arbitrária ‘GUIX_EXTRA_PROFILES’ para apontar para o diretório onde armazenaremos nossos perfis no restante deste artigo.

Colocar todos os seus perfis em um único diretório, com cada perfil recebendo seu próprio subdiretório, é um pouco mais limpo. Dessa forma, cada subdiretório conterá todos os links simbólicos para precisamente um perfil. Além disso, “fazer loop sobre perfis” se torna óbvio em qualquer linguagem de programação (por exemplo, um script de shell) simplesmente fazendo loop sobre os subdiretórios de ‘$GUIX_EXTRA_PROFILES’.

Observe que também é possível fazer um loop na saída de

guix package --list-profiles

embora você provavelmente tenha que filtrar ~/.config/guix/current.

Para habilitar todos os perfis no login, adicione isto ao seu ~/.bash_profile (ou similar):

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

Nota para usuários do sistema Guix: o acima reflete como seu perfil padrão ~/.guix-profile é ativado a partir de /etc/profile, sendo este último carregado por ~/.bashrc por padrão.

Obviamente, você pode escolher habilitar apenas um subconjunto deles:

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

Quando um perfil está desativado, é fácil habilitá-lo para um shell individual sem "poluir" o restante da sessão do usuário:

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

A chave para habilitar um perfil é source seu arquivo ‘etc/profile’. Este arquivo contém código shell que exporta as variáveis de ambiente corretas necessárias para ativar o software contido no perfil. Ele é construído automaticamente pelo Guix e deve ser sourced. Ele contém as mesmas variáveis que você obteria se executasse:

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

Mais uma vez, veja Invocando guix package em Manual de Referência do GNU Guix para as opções de linha de comando.

Para atualizar um perfil, basta instalar o manifesto novamente:

guix package -m /caminho/para/guix-meu-projeto-manifest.scm \
 -p "$GUIX_EXTRA_PROFILES"/meu-projeto/meu-projeto

Para atualizar todos os perfis, é fácil fazer um loop sobre eles. Por exemplo, supondo que suas especificações de manifesto estejam armazenadas em ~/.guix-manifests/guix-$profile-manifest.scm, com ‘$profile’ sendo o nome do perfil (por exemplo, "project1"), você pode fazer o seguinte no Bourne shell:

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

Cada perfil tem suas próprias gerações:

guix package -p "$GUIX_EXTRA_PROFILES"/meu-projeto/meu-projeto --list-generations

Você pode reverter para qualquer geração de um determinado perfil:

guix package -p "$GUIX_EXTRA_PROFILES"/meu-projeto/meu-projeto --switch-generations=17

Por fim, se você quiser alternar para um perfil sem herdar do ambiente atual, poderá ativá-lo a partir de um shell vazio:

env -i $(which bash) --login --noprofile --norc
. meu-projeto/etc/profile

Próximo: Pacotes necessários, Acima: Perfis Guix na Prática   [Conteúdo][Índice]