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.

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.

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.

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.
NomePacoteEscrito emAgrupamento de arquivosProcessamento
dot-templater dot-templater-gitAURRustbaseado em diretóriossintaxe personalizada
dotdrop dotdropAURPythonarquivo de configuraçãoJinja2
dotfiles dotfilesAURPython
Dots Pythonbaseado em diretóriospontos de acréscimos personalizados
chezmoi chezmoiGobaseado em diretóriosmodelos em Go
GNU Stow Perlbaseado em diretórios
Mackup Pythonautomático por aplicativo
mir.qualia Pythonblocos personalizados
rcm Perlbaseado em diretórios (por host ou tag)

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).

NomePacoteEscrito emAgrupamento de arquivosProcessamento
dotgit Bashbaseado em nome de arquivo
homeshick Bashdirecionado a repositório
homesick Rubydirecionado a repositório
Pearl pearl-gitAURBashdirecionado a repositório
vcsh Shelldirecionado a repositório
yadm(1) Shellbaseado em nome de arquivo
(por classe, SO, hostname & usuário)
Jinja2
(opcional)
  1. Possui suporte a criptografia de arquivos confidenciais com GPG.

Repositórios de usuários

AutorShell
(Estrutura
de shell)
WM / DEEditorTerminalMultiplexadorÁudioMonitorE-mailIRC
alfunx zshawesomevimkittytmuxncmpcpp/mpdhtop/lainthunderbird
peterzuger zshi3-gapsemacsrxvt-unicodescreenmochtop
Ambrevar EshellEXWMEmacsEmacs (Eshell)Emacs TRAMP + dtachEMMSconky/dzenmu4eCirce
awal fishi3vimsttmuxi3statusThe Lounge
ayekat zshkaruiwmvimrxvt-unicodetmuxncmpcpp/mpdkaruibarmuttirssi
bamos zshi3/xmonadvim/emacsrxvt-unicodetmuxmpv/cmusconky/xmobarmuttERC
brisbin33 zshxmonadvimrxvt-unicodescreendzenmuttirssi
BVollmerhaus fishi3-gapskakounerxvt-unicodepolybarthunderbird
cinelli zshdwmvimtermite-gitpianobarhtopmutt-kzweechat
dikiaap zshi3-gapsneovimkittyi3blocks
Earnestly zshi3/orbmentvim/emacstermitetmuxmpdconkymuttweechat
ErikBjare zshxmonad/xfce4vimterminatortmuxxfce4-panelweechat
falconindy bashi3vimrxvt-unicodencmpcppconkymutt
graysky zshxfce4vimterminalncmpcpppersonalizadothunderbird
hugdru zshawesomeneovimrxvt-unicodetmuxthunderbirdweechat
insanum bashherbstluftwmvimevilvtetmuxdzenmutt-kz
jasonwryan bash/zshdwmvimrxvt-unicodetmuxncmpcpppersonalizadomuttirssi
jdevlieghere zshxmonadvimterminaltmuxhtopmuttweechat
jelly zshi3vimtermitetmuxncmpcppmutt-kz-gitweechat
Jorengarenar bashi3vimxtermmpvi3blocksaercweechat
maximbaz zshi3-gapsneovimalacrittytmuxpy3statusthunderbird
mehalter zshi3-gapsneovimtermitetmuxgpymusici3blocks, gotopneomuttweechat
meskarune bashherbstluftwmvimrxvt-unicodescreenconkyweechat
neersighted fishi3neovimalacrittytmuxncmpcpp
oibind fishawesomeneovimtermitehtop-vimweechat
OK100 bashdwmvimrxvt-unicodecmusconky, dzenmuttweechat
pablox-cl zsh (zplug)gnome3neovimkitty
reisub0 fishqtileneovimkittympdconky
sistematico zsh/fish/bashi3-gapsvim/nanotermitetmuxncmpcpppolybarmuttweechat
sitilge zshawesomeneovimtermitethunderbird
thiagowfx bashi3vim/emacstilixi3blocks
unexist zshsubtlevimrxvt-unicodencmpcppmuttirssi
vodik zshxmonadvimtermite-gittmuxncmpcpppersonalizadomuttweechat
w0ng zshdwmvimrxvt-unicodetmuxncmpcpppersonalizadomuttirssi
whitelynx fishi3neovimkittyi3pystatus
wolfcore bashdwmvimrxvt-unicodetmuxcmuspersonalizadoweechat
zendeavor zshi3vimrxvt-unicodetmuxncmpcppi3statusweechat

Veja também

gollark: Yes.
gollark: If only I could somehow *combine* potatOS and the staff of travelling.
gollark: Honestly, the staff of travelling, as well as the dimensional transceivers, spawners, travel anchors, capacitors and weather control devices, is basically the only thing in EIO I like.
gollark: So convenient; you don't have to bother with nonsense like "walking".
gollark: They're probably EIO's best feature.
This article is issued from Archlinux. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.