Antecedentes
Quando mais de um dispositivo em funcionamento aparece em suas mãos,% username% chega a você para ter a mesma configuração aqui e ali, no trabalho e em casa. Quando comecei a tentar sincronizar arquivos, o Dropbox e o Yandex.disk eram suficientes para mim. Eles eram especialmente bons em sincronizar documentos e histórico de tagarelice, mas assim que tentei adaptá-los a .bashrc, .vimrc e similares, vários efeitos colaterais apareceram. Por exemplo, com links simbólicos nos dois sistemas, é um desastre completo; existe algum tipo de histórico apenas na caixa de depósito. Bem, eu precisaria escrever scripts para gerenciar o zoológico. Certamente algo já foi escrito, certo?
A história
Na página https://dotfiles.imtqy.com/, você pode ver um pouco menos de uma centena de utilitários, plug-ins e abordagens diferentes para gerenciar configurações - de programas individuais a programas universais. Eu recomendo fortemente que você se familiarize, é bem possível que você pare de ler mais e escolha algo mais aceitável.
O significado geral de filosofia se resume ao fato de que as configurações estão no repositório% your_favorit_vcs% de uma certa forma e a partir daí se arrastam para $HOME
. Como% default_vcs% é git agora, vou usá-lo ainda mais.
Comecei meu conhecimento com dotfiles-in-git com um utilitário chamado dotgit . Começou como "simples e direto em pura festa". Mas no momento em que o autor adicionou criptografia lá, com a capacidade de criar links simbólicos diretamente para o diretório, e eu tentei descobrir tudo (por volta do início de 2017), um pepino do meu cérebro aconteceu na minha pasta pessoal com links quebrados e recuperação manual de arquivos do gita. Em geral, um dia foi alocado para procurar alternativas com a possibilidade de ajustar o comportamento e uma configuração simples.
rcm
Portanto, como já mencionado, existem realmente muitas opções para utilitários. O rcm foi escolhido pelos seguintes motivos:
- Sh puro, nem mesmo festança. Não puxa nem python nem rubi, nada mais
- Permite que você configure o comportamento de entrega da configuração
- A presença de páginas de manual
- Personalização da implantação usando as pastas
tag-*
e host-*
- Suporte longo, projeto em desenvolvimento animado
- No momento do uso, até hoje não é relevante, mas os ganchos
{pre,post}-{up,down}
para atualização e limpeza de arquivos de configuração são suportados
O ponto mais importante é, é claro, a documentação, porque sem ela eu não teria ido tão longe a ponto de personalizar totalmente o comportamento da implantação para mim.
Após instalar o gerenciador, 4 comandos estarão disponíveis:
- lsrc - lista como será a configuração após o
rcup
- mkrc - adiciona o arquivo a
~/.dotfiles
(por padrão, você pode alterá-lo para ~/.rcrc
) e depois instala-os novamente. Se você precisar de comportamento fora do padrão, é melhor primeiro corrigir ~/.rcrc
, caso contrário, poderá haver efeitos especiais inesperados. - rcdn - exclui todos os arquivos de configuração gerenciados pelo rcm.
- rcup - instala todos os arquivos. Se você usar a opção
-g
, será gerado um script de shell separado, que também poderá ser colocado no repositório para uso em hosts nos quais o gerenciador não está instalado.
Como tal, o ~/.rcrc
é simplesmente parte do script shell incluído no comando source
toda vez que os utilitários rcm são chamados. Com base nisso, ele pode ser modular, com lógica integrada. De acordo com a documentação, seu conteúdo permite controlar com precisão as configurações dos arquivos de ponto usando o rcup
, por exemplo:
- comportamento padrão: para cada arquivo dentro de
~/.dotfiles
, um link simbólico é criado na pasta inicial sem um ponto de partida (por exemplo, '/home/felixoid/.dotfiles/bashrc' -> '/home/felixoid/.bashrc'
, '/home/felixoid/.dotfiles/README.md' -> '/home/felixoid/.README.md'
) - daddy
~/.vim
: é um link simbólico para a pasta /home/felixoid/.dotfiles/vim
(opção SYMLINK_DIRS) - daddy
~/.some_secret_files
: copiado de /home/felixoid/.dotfiles/tag-dmz/some_secret_files
(opção COPY_ALWAYS) - o arquivo
~/.README.md
é realmente ignorado (opção EXCLUI) - o arquivo
'/home/felixoid/.zshenv'
é um link simbólico para '/home/felixoid/.dotfiles/tag-zsh/zshenv'
(parâmetro TAGS) - a
~/bin
também ~/bin
gerenciada com o rcm, seu conteúdo vem de /home/felixoid/.dotfiles/bin/
(parâmetro UNDOTTED)
Às vezes, pode ser necessário mencionar o mesmo arquivo em várias opções. Por exemplo, o trecho .rcrc deve ter esta aparência se todo o conteúdo de ~/bin
estiver em ~/.dotfiles/tag-bins/bin
e copiado da seguinte maneira:
COPY_ALWAYS="bin/*" TAGS="bins" UNDOTTED="bin"
Na verdade, um exemplo de como organizar o conteúdo da pasta ~/.dotfiles
está no repositório com dotfiles. Informações abrangentes estão contidas na documentação, sinta-se à vontade para ler as seguintes páginas do manual: lsrc (1), mkrc (1), rcrc (5) rcdn (1), rcm (7), rcup (1).
Incalculável e incalculável
Enquanto escrevia esse texto, surgiram boas idéias sobre como organizar o armazenamento de dados confidenciais dentro de um repositório público. Por exemplo, eu sempre estava preocupado com a pergunta: faz sentido e é possível fazer backup de chaves gpg e ssh? Só por isso, ganchos podem ser úteis: empacotá-los no alcatrão e depois criptografar com o mesmo gpg simétrico, seguido pela descompactação. Talvez eu dedique a seguinte nota a isso após a implementação. Ou talvez essa seja outra bicicleta? E tudo já foi inventado? Adicione os comentários se esse for realmente o caso.
Eu realmente espero que este material desperte interesse e desejo tentar organizar o gerenciamento de configurações em um modo semi-automático!
E uma pequena pesquisa: