Eu posso te dizer o que faço. Isso pode ou não ser a melhor opção para você, dependendo de quais programas você possui arquivos de configuração, quanta variação existe entre máquinas e quanto esforço você prefere colocar na gravação de arquivos de configuração portáteis versus duplicar a manutenção entre as versões ou arquivos por site.
Todos os meus arquivos de configuração estão sob controle de versão. Eu uso o CVS, o que é perfeitamente suficiente para a tarefa, mas se você está começando agora (ao contrário de quando Linus não acredita em controle de versão), você pode usar outro sistema de controle de versão. O controle de versão é sempre bom, independentemente de você ter vários check-outs. Para sincronizar uma modificação entre sites, eu confirmo e atualizo.
Eu me esforço para escrever arquivos portáteis. Por exemplo, meu .zshrc
deve ser compatível com todas as versões desde 2.5 (no entanto, isso é um pouco complicado: eu não testei recentemente, e a última vez que o carreguei em uma máquina com zsh 2.5, foi muito lento). Isso significa que eu tenho muitas coisas como if type someprogram >/dev/null 2>/dev/null
e case $ZSH_VERSION
(quando não posso evitá-lo). O mesmo vale para outros programas cujo arquivo de configuração é uma linguagem interpretada (bash, Emacs, Vim, Fvwm, Sawfish,…). Eu não queria manter versões separadas desses arquivos, portanto, cada definição dependente de versão está sob uma instrução condicional. Se você quiser manter o aborrecimento (às custas de suportar menos combinações), você pode fazer algo como
case $ZSH_VERSION in
[5-9]*|4.[2-9].*) . ~/.zshrc-42;;
4.[01].*) . ~/.zshrc-40;;
3.1.[6789]) . ~/.zshrc-31;;
*) . ~/.zshrc-2;;
esac
Mas há outras dependências do sistema (por exemplo, a versão de ls
, para que você saiba se deseja alias a gnuls --color -b
ou ls --color -b
ou colorls -G
ou ls -Fb
ou…). Dividir tudo em arquivos separados fica cansativo rapidamente.
Eu mantenho um diretório por site com configurações por site, que são carregadas pelo arquivo principal. Por exemplo, meu .zshrc
contém as linhas
if [ -r ~/Here/lib/shell/local.zshrc ]; then
. ~/Here/lib/shell/local.zshrc
fi
Here
é um link simbólico para um diretório que contém arquivos de configuração específicos do site. Não existe em sites que não foram personalizados. O .zshrc
local geralmente contém aliases, aliases de diretório e afins. A maioria dos sites tem um .profile
local que define algumas variáveis de ambiente. Todas as configurações específicas do site estão sob o mesmo sistema de controle de versão (verificar todas elas é de apenas alguns kB a mais).
Alguns arquivos são gerados automaticamente por um makefile. Por exemplo, eu tenho um script para gerar ~/.ssh/config
a partir de uma lista comum de hosts (aliases e opções para máquinas acessíveis de qualquer lugar) mais uma lista de hosts específica do site (para máquinas acessíveis apenas dentro de uma rede).