Próximo: Pacotes necessários, Acima: Perfis Guix na Prática [Conteúdo][Índice]
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]