Dotfiles (Português)
A configuração de aplicativos específica do usuário é tradicionalmente armazenada nos chamados dotfiles (arquivos cujo nome de arquivo começa com um ponto). É uma prática comum rastrear dotfiles com um sistema de controle de versão, como o Git, para acompanhar as mudanças e sincronizar os arquivos de pontos através de vários hosts. Existem várias abordagens para gerenciar seus dotfiles (por exemplo, rastreando diretamente os dotfiles no diretório inicial vs armazenando-os em um subdiretório e fazendo um link simbólico/copiando/gerando arquivos com um script shell ou uma ferramenta dedicada) . Além de explicar como gerenciar seus dotfiles, este artigo também contém uma lista de repositórios de dotfiles dos usuários do Arch Linux.
Rastreando dotfiles diretamente com Git
O benefício de rastrear dotfiles diretamente com o Git é que ele requer apenas Git e não envolve links simbólicos. A desvantagem é que configuração específica por cada host geralmente requer a mesclagem de alterações em vários ramos (branches).
A maneira mais simples de conseguir essa abordagem é inicializar um repositório Git diretamente em seu diretório inicial e ignorar todos os arquivos por padrão com um padrão de gitignore(5) de *
. Este método, no entanto, vem com duas desvantagens: ele pode se tornar confuso quando você tiver outros repositórios Git em seu diretório inicial (por exemplo, se você esquecer de inicializar um repositório que você subitamente opera em seu repositório dotfile) e você não poderá mais ver facilmente quais arquivos o diretório atual não é rastreado (porque eles são ignorados).
Um método alternativo sem essas desvantagens é o "método repository seco e alias" popularizado por este comentário no Hacker News, que apenas usa três comandos para configurar:
$ git init --bare ~/.dotfiles $ alias config='/usr/bin/git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME' $ config config status.showUntrackedFiles no
Você pode então gerenciar seus dotfiles com o alias criado.
Configuração específica por host
Um problema comum com a sincronização de arquivos de pontos em várias máquinas é a configuração específica para cada host.
Com Git isso pode ser resolvido mantendo um ramo master para toda a configuração compartilhada, enquanto cada máquina individual possui um ramo específico da máquina com check-out. A configuração específica por host pode aplicada para um ramo específico da máquina; Quando a configuração compartilhada é modificada no ramo master, os ramos por máquina precisam ser rebased na parte superior do master atualizado.
Em scripts de configuração como arquivos de configuração do shell, a lógica condicional pode ser usada. Por exemplo, scripts Bash (por exemplo, .bashrc
) podem aplicar configurações diferentes dependendo do nome da máquina (ou tipo, variável personalizada, etc.):
if [[ "$(hostname)" == "archlaptop" ]]; then # comandos específicos de laptop aqui else # comandos de máquina desktop ou servidor fi
Similarmente, também podem ser alcançados com .Xresources.[1]
Se você achar que fazer rebase de ramos do Git é trabalhoso demais, você pode querer usar uma ferramenta que possui suporte a agrupamento de arquivos, ou se uma flexibilidade ainda maior é desejada, uma ferramenta que faz processamento.
Ferramentas
- Agrupamento de arquivos
- Como arquivos de configuração podem ser agrupados para grupos de configuração (também chamados de perfis ou pacotes).
- Processamento
- Algumas ferramentas processam arquivos de configuração para permitir que eles sejam personalizados dependendo do host.
Nome | Pacote | Escrito em | Agrupamento de arquivos | Processamento |
---|---|---|---|---|
dot-templater | dot-templater-gitAUR | Rust | baseado em diretórios | sintaxe personalizada |
dotdrop | dotdropAUR | Python | arquivo de configuração | Jinja2 |
dotfiles | dotfilesAUR | Python | Não | Não |
Dots | dots-managerAUR | Python | baseado em diretórios | pontos de acréscimos personalizados |
chezmoi | chezmoi | Go | baseado em diretórios | modelos em Go |
GNU Stow | stow | Perl | baseado em diretórios[2] | Não |
Mackup | mackupAUR | Python | automático por aplicativo | Não |
mir.qualia | mir.qualiaAUR | Python | Não | blocos personalizados |
rcm | rcmAUR | Perl | baseado em diretórios (por host ou tag) | Não |
Ferramentas interfaceando Git
Se você não estiver confortável com o Git, você pode querer usar uma dessas ferramentas, que abstraem o sistema de controle de versão (mais ou menos).
Nome | Pacote | Escrito em | Agrupamento de arquivos | Processamento |
---|---|---|---|---|
dotgit | dotgitAUR | Bash | baseado em nome de arquivo | Não |
homeshick | homeshick-gitAUR | Bash | direcionado a repositório | Não |
homesick | – | Ruby | direcionado a repositório | Não |
Pearl | pearl-gitAUR | Bash | direcionado a repositório | Não |
vcsh | vcsh | Shell | direcionado a repositório | Não |
yadm(1) | yadm-gitAUR | Shell | baseado em nome de arquivo (por classe, SO, hostname & usuário) [3] |
Jinja2 (opcional)[4] |
Repositórios de usuários
Autor | Shell (Estrutura de shell) |
WM / DE | Editor | Terminal | Multiplexador | Áudio | Monitor | IRC | |
---|---|---|---|---|---|---|---|---|---|
alfunx | zsh | awesome | vim | kitty | tmux | ncmpcpp/mpd | htop/lain | thunderbird | |
peterzuger | zsh | i3-gaps | emacs | rxvt-unicode | screen | moc | htop | ||
Ambrevar | Eshell | EXWM | Emacs | Emacs (Eshell) | Emacs TRAMP + dtach | EMMS | conky/dzen | mu4e | Circe |
awal | fish | i3 | vim | st | tmux | i3status | The Lounge | ||
ayekat | zsh | karuiwm | vim | rxvt-unicode | tmux | ncmpcpp/mpd | karuibar | mutt | irssi |
bamos | zsh | i3/xmonad | vim/emacs | rxvt-unicode | tmux | mpv/cmus | conky/xmobar | mutt | ERC |
brisbin33 | zsh | xmonad | vim | rxvt-unicode | screen | dzen | mutt | irssi | |
BVollmerhaus | fish | i3-gaps | kakoune | rxvt-unicode | polybar | thunderbird | |||
cinelli | zsh | dwm | vim | termite-git | pianobar | htop | mutt-kz | weechat | |
dikiaap | zsh | i3-gaps | neovim | kitty | i3blocks | ||||
Earnestly | zsh | i3/orbment | vim/emacs | termite | tmux | mpd | conky | mutt | weechat |
ErikBjare | zsh | xmonad/xfce4 | vim | terminator | tmux | xfce4-panel | weechat | ||
falconindy | bash | i3 | vim | rxvt-unicode | ncmpcpp | conky | mutt | ||
graysky | zsh | xfce4 | vim | terminal | ncmpcpp | personalizado | thunderbird | ||
hugdru | zsh | awesome | neovim | rxvt-unicode | tmux | thunderbird | weechat | ||
insanum | bash | herbstluftwm | vim | evilvte | tmux | dzen | mutt-kz | ||
jasonwryan | bash/zsh | dwm | vim | rxvt-unicode | tmux | ncmpcpp | personalizado | mutt | irssi |
jdevlieghere | zsh | xmonad | vim | terminal | tmux | htop | mutt | weechat | |
jelly | zsh | i3 | vim | termite | tmux | ncmpcpp | mutt-kz-git | weechat | |
Jorengarenar | bash | i3 | vim | xterm | mpv | i3blocks | aerc | weechat | |
maximbaz | zsh | i3-gaps | neovim | alacritty | tmux | py3status | thunderbird | ||
mehalter | zsh | i3-gaps | neovim | termite | tmux | gpymusic | i3blocks, gotop | neomutt | weechat |
meskarune | bash | herbstluftwm | vim | rxvt-unicode | screen | conky | weechat | ||
neersighted | fish | i3 | neovim | alacritty | tmux | ncmpcpp | |||
oibind | fish | awesome | neovim | termite | htop-vim | weechat | |||
OK100 | bash | dwm | vim | rxvt-unicode | cmus | conky, dzen | mutt | weechat | |
pablox-cl | zsh (zplug) | gnome3 | neovim | kitty | |||||
reisub0 | fish | qtile | neovim | kitty | mpd | conky | |||
sistematico | zsh/fish/bash | i3-gaps | vim/nano | termite | tmux | ncmpcpp | polybar | mutt | weechat |
sitilge | zsh | awesome | neovim | termite | thunderbird | ||||
thiagowfx | bash | i3 | vim/emacs | tilix | i3blocks | ||||
unexist | zsh | subtle | vim | rxvt-unicode | ncmpcpp | mutt | irssi | ||
vodik | zsh | xmonad | vim | termite-git | tmux | ncmpcpp | personalizado | mutt | weechat |
w0ng | zsh | dwm | vim | rxvt-unicode | tmux | ncmpcpp | personalizado | mutt | irssi |
whitelynx | fish | i3 | neovim | kitty | i3pystatus | ||||
wolfcore | bash | dwm | vim | rxvt-unicode | tmux | cmus | personalizado | weechat | |
zendeavor | zsh | i3 | vim | rxvt-unicode | tmux | ncmpcpp | i3status | weechat |
Veja também
- gregswiki:DotFiles
- XMonad Config Archive
- dotshare.it
- dotfiles.github.io
- terminal.sexy - Designer de esquema de cores do terminal