====== GNU Stow ======
A partir da documentação, com o comando //man stow//, podemos verificar que ele foi criado para auxiliar que pacotes compilados da fonte pudesse ter seus binários //linkados// para os diretórios padrão, permitindo assim uma maior flexibilidade sobre qual versão poderíamos usar no sistema, isto é, o ususário compila em seu diretório pessoal e faz os links simbólicos dentro dos diretórios padrão, por exemplo, ///usr/local/bin/emacs// será um link para o binário emacs dentro de um diretório que possue o emacs compilado direto da fonte.
Hoje os gerenciadores de pacote modernos já constroem os links e muitos como o Nix e o Guix conseguem gerenciar versões distintas do mesmo pacote de uma forma até simples, então o que resta de funcionalidade para o **stow**?
===== Instalação =====
Em sistemas tipo Debian, apenas faça
$ sudo apt install stow
===== Uso básico =====
Vou usar como exemplo duas configurações básicas, uma que geralmente está em todos os diretórios pessoais logo na raiz, o arquivo //.bashrc//, e outra está escrita dentro da pasta //.config/qutebrowser//, para ilustrar arquivos de configurações de aplicativos que deixam suas configurações dentro do diretório //.config//.
Primeiramente vamos organizar nossos //dotfiles// dentro de um diretório para esse propósito, posteriormente podemos usar o //git// para gerenciar o versionamento desses arquivos e subir os mesmos para um serviço como o [[https://www.github.com|github]] ou o [[https://www.codeberg.org|codeberg]], assim teremos nossas configurações sempre salvas há um comando de distância para termos todas as configurações de volta. Crie um diretório dos //dotfiles//, por exemplo
$ mkdir ~/dotfiles
Agora queremos que nossa primeira configuração seja do //bash// então
$ cd dotfiles
$ mkdir bash
e adicionamos o arquivo //.bashrc// dentro desse diretório, de preferência já com as personalizações que você fez ao longo do uso de seu sistema e deseja armazená-las.
Para adicionar esse arquivo basta dentro do diretório //dotfiles// usar o //stow//
$ stow -t /home/username bash
Agora pode verificar que seu arquivo //~/.bashrc// é um link simbólico para o arquvo armazenado em //~/dotfiles//. veja que usamos **-t** isso indica o alvo (//target//) para o qual queremos que o link seja contruído e **bash** indica o aplicativo o qual queremos adicionar os dotfiles, nesse caso só existe um arquivo //.bashrc//.
Vamos a mais um exemplo, agora o arquivos não fica na raiz do diretório do //username// mas sim no diretório oculto de configurações (//.config//). Em nosso diretório //~/dotfiles// vamos criar a pasta do pacote que iremos armazenar as configurações
$ mkdir qutebrowser
$ mkdir qutebrowser/.config
$ mkdir qutebrowser/.config/qutebrowser
Dentro do último diretório criado podemos adicionar o arquivo //config.py// que contém as configurações personalizadas do navegador //qutebrowser//, que desejamos guardar. Agora basta usar o //stow//, sempre dentro da pasta //dotfiles//
stow -t /home/username qutebrowser
===== Resumo =====
A sintaxe básica é
$ stow -t /home/username package
Claro que dentro de seu diretório de dotfiles, trocando o //username// pelo seu nome de usuário e //package// pelo pacote que você organizou os dotfiles dele dentro desse caminho.
Para construir tudo de uma vez só
$ stow -t /home/username * -R
Assim todos os pacotes organizados no ///dotfiles// serão linkados no //target// (**-t**), a opção **-R** (//restow//) é usual para remover links simbólicos que você não usa mais, caso não use esse opção os links antigos irão continuar.