Dotfiles (Español)

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

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.

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.[1]

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.
Nombre Paquete Escrito en Agrupamiento de archivos Procesamiento
dot-templater dot-templater-gitAUR Rust basado en directorio sintaxis personalizada
dotter dotter-rsAUR Rust archivo de configuración Handlebars
dotdrop[enlace roto 2024-01-13] dotdropAUR Python archivo de configuración Jinja2
dotfiles dotfilesAUR Python No No
Dots dots-managerAUR Python basado en directorio puntos de adición personalizados
chezmoi chezmoi Go basado en directorio Go templates
GNU Stow stow Perl directory-based[2] No
Mackup mackupAUR Python automático por aplicación No
mir.qualia mir.qualiaAUR Python No blocks personalizados
rcm rcmAUR Perl basado 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).

Nombre Paquete Escrito en Agrupamiento de archivos Procesamiento
dotbare dotbareAUR Shell (fzf) conforme repositorio No
dotgit dotgitAUR Python basado en nombre de archivo No
homeshick homeshick-gitAUR Bash conforme repositorio No
homesick Ruby conforme repositorio No
Pearl pearl-gitAUR Python conforme repositorio No
vcsh vcsh Shell conforme repositorio No
yadm(1) yadm Python, Shell basado en nombre de archivo
(por clase, SO, hostname & usuario) [3]
Jinja2, Shell
(opcional) [4]
  1. Soporta la encriptación confidencial de datos con GPG (Español). [5]

User repositories

Autor Shell (Shell framework) WM / DE Editor Terminal Multiplexer Audio Monitor Mail (Correo) IRC Gestor de Archivos
alfunx zsh awesome vim kitty tmux ncmpcpp/mpd htop/lain thunderbird
altaway zsh bspwm neovim alacritty bspwm mpv ytop gnus+message rcirc broot
Ambrevar Eshell EXWM Emacs Emacs (Eshell) Emacs TRAMP + dtach EMMS conky/dzen mu4e Circe
ananthu zsh bspwm neovim alacritty mpv htop, polybar neomutt weechat ranger
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
benmezger zsh/bash/fish i3-gaps emacs rxvt-unicode tmux i3status-rs mu4e/neomutt weechat
brisbin33 zsh xmonad vim rxvt-unicode screen dzen mutt irssi
BVollmerhaus fish i3-gaps kakoune kitty polybar ranger
cinelli zsh dwm vim termite-git pianobar htop mutt-kz weechat
dikiaap zsh i3-gaps neovim alacritty tmux 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
filiparag fish bspwm vim alacritty tmux mpv, playerctl htop, polybar mail-notification pcmanfm[enlace roto 2022-09-17]
gardenapple fish Sway neovim termite htop aerc
graysky zsh xfce4 vim terminal ncmpcpp custom 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 custom mutt irssi
jdevlieghere zsh xmonad vim terminal tmux htop mutt weechat
jelly zsh i3 vim termite tmux ncmpcpp mutt-kz-git weechat
JonasDe[enlace roto 2022-09-17] zsh i3 vim rxvt-unicode tmux
Jorengarenar bash i3 vim xterm mpv i3blocks aerc weechat
LukeSmithxyz zsh dwm neovim st ncmpcpp dwmblocks mutt lf
MarkusZoppelt zsh gnome vim terminal tmux
maximbaz zsh sway kakoune kitty waybar neomutt nnn
mehalter zsh i3-gaps neovim termite tmux cmus gotop neomutt weechat ranger
meskarune bash herbstluftwm vim rxvt-unicode screen conky weechat
neersighted fish i3 neovim alacritty tmux ncmpcpp
oibind fish awesome neovim st tmux htop-vim weechat lf
OK100 bash dwm vim rxvt-unicode cmus conky, dzen mutt weechat
pablox-cl zsh (zplug) gnome3 neovim kitty
peterzuger zsh i3-gaps emacs rxvt-unicode screen moc htop
potamides bash awesome neovim termite tmux ncmpcpp conky,htop mutt weechat ranger
reisub0 fish qtile neovim kitty mpd conky
shubhamgupta2956 zsh i3-gaps-rounded vim terminator cmus htop, i3blocks, gotop ranger, nautilus
sistematico zsh/fish/bash i3-gaps vim/nano termite tmux ncmpcpp polybar mutt weechat
sitilge[enlace roto 2024-01-13] zsh sway neovim alacritty htop thunderbird
thiagowfx bash i3 vim/emacs tilix i3blocks
vodik zsh xmonad vim termite-git tmux ncmpcpp custom mutt weechat
w0ng zsh dwm vim rxvt-unicode tmux ncmpcpp custom mutt irssi
whitelynx fish i3 neovim kitty i3pystatus
wolfcore bash dwm vim rxvt-unicode tmux cmus custom weechat
zendeavor zsh i3 vim rxvt-unicode tmux ncmpcpp i3status weechat

Recursos adicionales