Stow, un gestor de dotfiles

Una de las cosas que más me sorprendió, y gustó, de GNU/Linux es que los ficheros de configuración de una aplicación estaban almacenados en mi home de usuario y cada uno de estos usuarios podía tener una configuración nueva y distinta para cada programa y/o aplicación que ejecutáramos. De este modo una mala configuración de un usuario no podría entorpecer a otro.

Viniendo de otros sistemas operativos me sorprendió e hizo que cambiara mi forma de ver la dupla binarios y configuración.

Para entender mejor esto, se puede ver las siguientes rutas de todo ello para la aplicación SMPlayer, un muy buen reproductor multimedia.

PATH binario

$ whereis smplayer
smplayer: /usr/bin/smplayer

Como se puede ver el binario se encuentra en /usr/bin/smplayer.

PATH configuración

/home/daniel/.config/smplayer

$ tree -L 1
.
├── device_info.ini
├── favorites.m3u8
├── file_settings
├── hdpi.ini
├── player_info.ini
├── playlist.ini
├── radio.m3u8
├── smplayer.ini
├── styles.ass
└── tv.m3u8

Cada aplicación escribe dentro de la home del usuario su configuración. Normalmente se suele hacer dentro de .config, pero podemos ver que otras lo hacen en la raíz de nuestro directorio de usuario:

/home/daniel/.mozilla

NOTA: Recuerda que los ficheros que empiezan por un "." son ficheros ocultos y con un ls (list) no se verán si no le pasas la opción ls -a. A esos ficheros de configuración se les llama dotfiles. El nombre se debe a que, como hemos explicado, éstos empiezan por un punto (dot).

Ahora que conocemos donde se guarda la configuración, veamos la necesidad de usar un gestor de dotfiles.

Es muy usual tener más de un ordenador o simplemente querer reinstalar el sistema y no perder todas las configuraciones de cada una de las aplicaciones que usamos. Aquí es donde entra en juego dicho gestor.

Stow sirve para gestionar dichos ficheros. Éstos pueden ser del tipo .bashrc (fichero) o .config (directorio).

Podemos instalarlo (en mi caso en archlinux):

$ pacman -S stow

 community/stow 2.3.1-3 
     Manage installation of multiple softwares in the same directory tree

Una vez instalado, necesitamos la siguiente estructura de directorios allí donde queramos (/home/daniel/dotfiles):

$ tree -a -L 3
.
├── bash
│   └── .bashrc
├── clementine
│   └── .config
│       └── Clementine
├── emacs
│   ├── .emacs
│   └── .emacs.d
│       ├── auto-save-list
│       ├── .cask
│       └── elpa
├── grisbi
│   └── .config
│       └── grisbi
├── zeal
│   └── .config
│       └── Zeal
└── zim
    └── .config
        ├── zim
        └── zim_backup

Esta estructura la podemos guardar, posteriormente, en un repositorio git o bien en un recurso en la nube (por ejemplo nextcloud). El motivo para tenerlo en algún sitio "online" no es otro que poder acceder a él desde cualquier ordenador en el que queramos tener dicha configuración.

Dentro del directorio anterior, sólo nos quedaría ejecutar stow.

$ stow -t ~/ zim

$ ls -l ~/.config/zim

 .config/zim -> 
 ../clone/drguell/dotfiles/zim/.config/zim

Como podemos ver ahora, el dotfile de zim es un enlace al directorio donde tenemos nuestra configuración (clonada o bien bajo un directorio de nextcloud).