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.
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
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 | 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] |
- 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 | |
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 | 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 | 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
- gregswiki:DotFiles
- XMonad Config Archive
- dotshare.it
- dotfiles.github.io
- terminal.sexy - Terminal color scheme designer