Los dotfiles están repartidos en distintas carpetas del sistema. Para poder tener un repo con el que hacerles seguimiento y mantenerlo actualizado hace falta usar symlinks, para vincularlos todos a una misma carpeta. Una opción para gestionar estos symlinks es Stow (en los repos), que es “a symlink farm manager which takes distinct packages of software and/or data located in separate directories on the filesystem, and makes them appear to be installed in the same place”.
Stow maneja los siguientes conceptos:
Package. Una colección de archivos y/o directorios que te gustaría manejar como una unidad pero que se tienen que instalar en directorios específicos del sistema.
Target Directory — Donde los dotfiles deberian aparentar estar instalados (en
home,.config, etc).Stow Directory — Donde los “packages” (en este caso los diferentes dotfiles) serán instalados. Este será el directorio
~/.dotfiles(por ejemplo).Package Directory — Un directorio que contiene los archivos de instalación (o en este caso los ficheros de configuración) de un sólo programa, por ejemplo el directorio zsh que contiene el archivo .zshrc. Estos “package directories” estarán dentro del “stow directory”.
Los symlinks son entradas del sistema de archivos cuya ruta se llama symlink source que apunta a otra localización del sistema de archivos llamada symlink destination, la cual no tiene por que existir. Si se cambia cualquiera de ellos, ambos cambian.
El proceso sería el siguiente:
Se crea el directorio donde estarán los dotfiles (stow directory), por ejemplo
~/.dotfiles. El target directory es por defecto el directorio superior al stow directorio, por lo tanto$HOMESe mueven los dotfiles desde sus directorios de orgen a éste. Se pueden clasificar en distintos directorios (package directories). Si el directorio de origen no es el raiz, si no que está anidadao, hay que crear la misma estructura de directorios dentro del stow directory (o del package directory correspondiente). Por ejemplo, si el dotfile está en
~/.config/rstudio/rstudio.conf, en el stow directory podríamos tener~/.dotfiles/rstudio/.config/rstudio/rstudio.conf.Desde
.dotfilesse lanzastow .(si están sueltos) ostow nombre_package_directorypara cada paquete.
Más cosas
Ignorar archivos. Stow ignora por defecto (no se le hacen symliks) la carpeta
.gitentre otros archivos y directorios: Default ignore list. Podemos cambiar los archivos que se ignorarán creando un fichero.stow-local-ignoreen cada package directory o en el home. En este caso, nuestro archivo sustituye a los valores por defecto, por lo que si también se quiere ignorar el directorio.git(por ejemplo), habrá que añadirlo.No es imprescindible que el target directory sea el directorio padre del stow directory. Se puede especificar otro con la opción
--target=dir.