Dotfiles (Español)

La configuración de aplicaciones específica del usuario es tradicionalmente almacenada en los llamados dotfiles (archivos en los que su nombre comienza con un punto). Es una práctica común seguir el rastro de los dotfiles con un version control system (Español) como podría ser Git (Español) para seguir el rastro de los cambios y sincronizar dotfiles a través de varios huéspedes (hosts). Hay varias maneras de gestionar sus dotfiles (por ejemplo rastrearlos del directorio home contra almacenarlos en un subdirectorio y hacer un enlace simbólico, copiar o generar archivos con un script de shell o una herramienta dedicada). Ademas de explicar como se gestionan los dotfiles, este artículo también contiene una lista de repositorios dotfile de los usuarios de Arch Linux.

Esta traducción de Dotfiles fue revisada el 2021-04-14. Si existen cambios puede actualizarla o avisar al equipo de traducción.

Rastrear dotfiles directamente con Git

El beneficio de seguir la pista de los dotfiles directamente con Git es que solamente requiere Git y no requiere enlaces simbólicos. La desventaja es que las configuraciones específicas del huésped generalmente requieren fusionar los cambios en múltiples ramas.

La manera más sencilla de conseguir este método es inicializar un repositorio Git directamente en tu directorio home e ignorar todos los archivos por defecto con un patrón gitignore(5) de *. Sin embargo este método tiene dos inconvenientes: se puede volver confuso cuando se tienen otros repositorios Git en el directorio home (por ejemplo si olvida inicializar un repositorio de repente opera en los dotfiles de su repositorio) y no se pueden ver fácilmente que archivos no están rastreados en el directorio actual (porque están siendo ignorados).

Un método alternativo que no tiene estos inconvenientes es el "bare repository and alias method" (Repositorio vacío y método de alias) popularizado por este comentario de Hacker News, que solo toma tres órdenes para configurar.

$ git init --bare ~/.dotfiles
$ alias config='/usr/bin/git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME'
$ config config status.showUntrackedFiles no

Después puede gestionar sus dotfiles con el alias creado. Si está usando Bash y quisiera bash completion (Terminación de Bash) para este alias, simplemente instale bash-complete-aliasAUR, después añada el alias y la siguiente línea a su ~/.bashrc.

$ complete -F _complete_alias config
Sugerencia: Para evitar accidentalmente hacer commit (consolidar) de información confidencial, véase Git#Filtering confidential information.

Configuraciones específicas del huésped

Un problema común con la sincronización de dotfiles a través de varias máquinas es la configuración específica del huésped.

Con Git se puede resolver manteniendo una rama maestra para todas las configuraciones compartidas, mientras cada máquina individual tenga una rama específica por máquina controlada. La configuración específica del huésped se puede hacer un commit a la rama específica de la máquina; cuando la configuración compartida es modificada en la rama maestra, las ramas de cada máquina necesitará establecer una nueva base (rebase) sobre la rama maestra actualizada.

En scripts de configuración como archivos de configuración de shell se pueden utilizar condicionales. Por ejemplo, un script de Bash (Español) (es decir .bashrc) puede aplicar distintas configuraciones dependiendo del nombre de la máquina (o tipo, variable personalizada, etc.):

if [[ "$(hostname)" == "archlaptop" ]]; then
    # mandatos específicos de laptop
else
    # mandatos para pc o servidor
fi

Algo similar se puede lograr con .Xresources.

Si encuentra que hacer rebase en las ramas Git es demasiado engorroso, probablemente quiera usar una herramienta que soporte file grouping (agrupamiento de archivos) o si desea todavía mayor flexibilidad, una herramienta que haga procesing (procesamiento).

Herramientas

Agrupamiento de archivos
Como los archivos de configuración se pueden agrupar en grupos de configuración (también llamados perfiles o paquetes)
Procesamiento
Algunas herramientas procesan archivos de configuración para permitir que se personalicen dependiendo del huésped.
NombrePaqueteEscrito enAgrupamiento de archivosProcesamiento
dot-templater Rustbasado en directoriosintaxis personalizada
dotter Rustarchivo de configuraciónHandlebars
dotdrop Pythonarchivo de configuraciónJinja2
dotfiles PythonNoNo
Dots Pythonbasado en directoriopuntos de adición personalizados
chezmoi Gobasado en directorioGo templates
GNU Stow stowPerldirectory-basedNo
Mackup Pythonautomático por aplicaciónNo
mir.qualia PythonNoblocks personalizados
rcm Perlbasado en directorio (por huésped o tag)No

Programas que envuelven a Git

Si está incómodo con Git (Español), ustede querrá usar una de estas herramientas, las cuales abstraen el sistema de control de versión (más o menos).

NombrePaqueteEscrito enAgrupamiento de archivosProcesamiento
dotbare Shell ()conforme repositorioNo
dotgit Pythonbasado en nombre de archivoNo
homeshick homeshick-gitAURBashconforme repositorioNo
homesick Rubyconforme repositorioNo
Pearl Pythonconforme repositorioNo
vcsh Shellconforme repositorioNo
yadm(1) Python, Shellbasado en nombre de archivo
(por clase, SO, hostname & usuario)
Jinja2, Shell
(opcional)
  1. Soporta la encriptación confidencial de datos con GPG (Español).

User repositories

AutorShell (Shell framework)WM / DEEditorTerminalMultiplexerAudioMonitorMail (Correo)IRCGestor de Archivos
alfunx zshawesomevimkittytmuxncmpcpp/mpdhtop/lainthunderbird
altaway zshbspwmneovimalacrittybspwmmpvytopgnus+messagercircbroot
Ambrevar EshellEXWMEmacsEmacs (Eshell)Emacs TRAMP + dtachEMMSconky/dzenmu4eCirce
ananthu zshbspwmneovimalacrittympvhtop, polybarneomuttweechatranger
awal fishi3vimsttmuxi3statusThe Lounge
ayekat zshkaruiwmvimrxvt-unicodetmuxncmpcpp/mpdkaruibarmuttirssi
bamos zshi3/xmonadvim/emacsrxvt-unicodetmuxmpv/cmusconky/xmobarmuttERC
benmezger zsh/bash/fishi3-gapsemacsrxvt-unicodetmuxi3status-rsmu4e/neomuttweechat
brisbin33 zshxmonadvimrxvt-unicodescreendzenmuttirssi
BVollmerhaus fishi3-gapskakounekittypolybarranger
cinelli zshdwmvimtermite-gitpianobarhtopmutt-kzweechat
dikiaap zshi3-gapsneovimalacrittytmuxi3blocks
Earnestly zshi3/orbmentvim/emacstermitetmuxmpdconkymuttweechat
ErikBjare zshxmonad/xfce4vimterminatortmuxxfce4-panelweechat
falconindy bashi3vimrxvt-unicodencmpcppconkymutt
filiparag fishbspwmvimalacrittytmuxmpv, playerctlhtop, polybarmail-notificationpcmanfm[enlace roto 2022-09-17]
gardenapple fishSwayneovimtermitehtopaerc
graysky zshxfce4vimterminalncmpcppcustomthunderbird
hugdru zshawesomeneovimrxvt-unicodetmuxthunderbirdweechat
insanum bashherbstluftwmvimevilvtetmuxdzenmutt-kz
jasonwryan bash/zshdwmvimrxvt-unicodetmuxncmpcppcustommuttirssi
jdevlieghere zshxmonadvimterminaltmuxhtopmuttweechat
jelly zshi3vimtermitetmuxncmpcppmutt-kz-gitweechat
JonasDe[enlace roto 2022-09-17] zshi3vimrxvt-unicodetmux
Jorengarenar bashi3vimxtermmpvi3blocksaercweechat
LukeSmithxyz zshdwmneovimstncmpcppdwmblocksmuttlf
MarkusZoppelt zshgnomevimterminaltmux
maximbaz zshswaykakounekittywaybarneomuttnnn
mehalter zshi3-gapsneovimtermitetmuxcmusgotopneomuttweechatranger
meskarune bashherbstluftwmvimrxvt-unicodescreenconkyweechat
neersighted fishi3neovimalacrittytmuxncmpcpp
oibind fishawesomeneovimsttmuxhtop-vimweechatlf
OK100 bashdwmvimrxvt-unicodecmusconky, dzenmuttweechat
pablox-cl zsh (zplug)gnome3neovimkitty
peterzuger zshi3-gapsemacsrxvt-unicodescreenmochtop
potamides bashawesomeneovimtermitetmuxncmpcppconky,htopmuttweechatranger
reisub0 fishqtileneovimkittympdconky
shubhamgupta2956 zshi3-gaps-roundedvimterminatorcmushtop, i3blocks, gotopranger, nautilus
sistematico zsh/fish/bashi3-gapsvim/nanotermitetmuxncmpcpppolybarmuttweechat
sitilge zshswayneovimalacrittyhtopthunderbird
thiagowfx bashi3vim/emacstilixi3blocks
vodik zshxmonadvimtermite-gittmuxncmpcppcustommuttweechat
w0ng zshdwmvimrxvt-unicodetmuxncmpcppcustommuttirssi
whitelynx fishi3neovimkittyi3pystatus
wolfcore bashdwmvimrxvt-unicodetmuxcmuscustomweechat
zendeavor zshi3vimrxvt-unicodetmuxncmpcppi3statusweechat

Recursos adicionales

gollark: The memetics work well, then.
gollark: No, we just implement it fast.
gollark: It would just … generate them via enumeration?
gollark: Why would it have a lookup table for that?
gollark: What lookup table?
This article is issued from Archlinux. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.