Dotfiles (Português)

From ArchWiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
Status de tradução: Esse artigo é uma tradução de Dotfiles. Data da última tradução: 2019-10-20. Você pode ajudar a sincronizar a tradução, se houver alterações na versão em inglê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.

Dica: Para evitar fazer commit acidental de informações confidenciais, veja Git#Filtering confidential information.

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 homesickAUR[link quebrado: package not found] 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]
  1. Possui suporte a criptografia de arquivos confidenciais com GPG.[5]

Repositórios de usuários

Autor Shell
(Estrutura
de shell)
WM / DE Editor Terminal Multiplexador Áudio Monitor E-mail 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[link inativo 2020-08-02 ⓘ] 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
swalladge[link inativo 2020-08-02 ⓘ] zsh/bash i3 neovim/vim termite tmux cmus i3pystatus mutt
SyfiMalik[link inativo 2020-08-02 ⓘ] zsh i3 vim rxvt-unicode tmux mpd/ncmpcpp polybar mutt weechat
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
Wintervenom[link inativo 2020-08-02 ⓘ] bash herbstluftwm vim rxvt-unicode screen mpd (mpc-utils[link inativo 2020-08-02 ⓘ]) hlwm-dzen2[link inativo 2020-08-02 ⓘ] mutt weechat
wolfcore bash dwm vim rxvt-unicode tmux cmus personalizado weechat
zendeavor zsh i3 vim rxvt-unicode tmux ncmpcpp i3status weechat

Veja também