# Iniciando minha aventura no _guix_

Pouco tempo depois de iniciar meu uso no NixOS eu me deparei com outro projeto baseado nesse sistema, o Guix. Tais projetos consistem principalmente no gerenciador de pacotes que permite tratar os mesmos de forma funcional.

No caso do Nix o gerenciador de mesmo nome precisamos aprender a linguagem nix para poder escrever as receitas de empacotamento para o NixOS ou o uso do pacote no gerenciador nix. Já o Guix usa uma variação da linguagem scheme, o guile para escrever as receitas de pacotes que poderão ser usados nesse gerenciador.

Uma grande vantagem desses gerenciadores é que eles podem ser instalados em qualquer distribuição Linux, no caso do Nix é possível usar ele inclusive no MacOS, uma vez instalados tais gerenciadores num sistema qualquer, podemos instalar os pacotes por esses gerenciadores e esquecer o gerenciador nativo do sistema.

Mas também é possível instalar o sistema por completo, NixOS ou GuixSD, daí podemos tratar o sistema operacional como um programa para ser montado por esse gerenciador. Atualmente tenho usado o NixOS como meu sistema principal, mas iniciei recentemente uma aventura pelo _guix_.

## Gerenciando os pacotes _texlive_ com _guix_

A princípio instalei o guix no meu NixOS para começar a me acostumar com ele, e das características que mais me chamou atenção foi o fato de se não precisarmos gerenciar serviços no root, nunca mais precisaremos usar sudo nem nada parecido para nossos pacotes e configurações pessoais. Dentro do NixOS conseguimos fazer bem tudo sem o root usando o _home-manager_, no Guix, usamos o `guix home`.

Então iniciei o uso do guix, inicialmente para gerenciar algum projeto de texto em _LaTeX_ para gerar um _shell_ contendo todos os pacotes da _texlive_ que preciso usar no meu texto. Veja um exemplo de `manifest.scm` que deixo no diretório do meu projeto de texto.
```guile
(specifications->manifest
'(;; Compilação
       "entr"
       "texlive-latexmk"
       "texlive-biber"

       ;; Escrita em context
  "texlive-scheme-context"

  ;; Escrita no latex
       "texlive-scheme-basic"
       "texlive-wrapfig"
       "texlive-xpatch"
       "texlive-babel-portuges"
       "texlive-csvsimple"
       "texlive-pgf"
       "texlive-filecontents"

       ;; Estilos e bibliografgia
       "texlive-biblatex"
       "texlive-biblatex-abnt"
       "texlive-abntex2"

       ;; Fontes extras(()a
  "texlive-fontawesome5"))
```

Aqui dá pra perceber como o guile simplifica tudo, basta deixar entre parêntesis o que se deseja fazer, neste caso preciso apenas listar os pacotes que necessito para meu projeto de texto em _LaTeX_. Então apenas faço o comando `guix shell` e tenho um _shell_ com tudo prontinho. O `manifest.scm` poderia ser usado para montar um ambiente de desenvolvimento python, lua, c, etc. basta listar as bibliotecas, interpretadores ou compiladores necessários.

## Configurando a home

Um arquivo `.scm` também pode ser usado para configurar os _dotfiles_ da _home_, bem como listar os pactes que quero usar no meu perfil. Essa tem sido a etapa que estou desenvolvendo agora, para depois que tiver um shell e um gerenciador de janelas configurado no meu perfil, mudar em definitivo para um sistema Guix.

Até lá deem uma olhada no maravilhoso manual desse projeto no [link](https://guix.gnu.org/manual/pt-br/html_node/).