Antes de nada, conviene aclarar lo que entendemos por dotfiles. Se trata de los ficheros y directorios que encontramos en los sistemas Linux, los cuales mantienen la configuración a nivel de usuario de las aplicaciones. Estos ficheros suelen estar ocultos (con un .
al inicio de su nombre), de ahí el hombre de “dot"files.
Es habitual subir estos ficheros a un repositorio de manera que si cambiamos de sistema, sea muy sencillo poder recuperar estos ficheros, y por consiguiente nuestra configuración de las aplicaciones.
Una manera muy cómoda de gestionar estos “backups”, es clonar nuestro repo en la máquina, y crear enlaces simbólicos directamente a los ficheros de los que queramos realizar la copia.
Vamos a ver como realizar este proceso desde cero, aprovechando la herramienta stow
, la cual nos facilitará la gestion de nuestros enlaces simbólicos.
Crear repositorio para nuestros dotfiles
Lo primero es crear un repositorio (público o privado) donde alojaremos nuestros dotfiles. Personalmente, recomiendo Gitlab por encima de Github u otros servicios similares, por características y funcionalidades ofrecidas de manera gratuita.
Creamos el repo y lo inicializamos con un Readme.md para hacer todo más sencillo.
Una vez creado nuestro repo, vamos a nuestra máquina y nos lo clonamos, Pero antes vamos a establecer algunas configuracones de git que nos ahorrarán tiempo. Tan solo tenemos que sustituir los campos por nuestros datos reales:
|
|
Ahroa sí, ya podemos clonar el repo indicando nuestro usuario y/o ruta del repositorio creado
|
|
Instalar GNU Stow
GNU Stow es una herramienta muy sencilla, basada en Perl, que nos va a facilitar la vida muchísimo a la hora de gestionar los enlaces simbólicos. Se encuentra directamente en los repositorios de la práctica totalidad de distribuciones, así que su instalación es tan sencilla como:
Ubuntu y basadas en Debian:
|
|
Fedora y basadas en RedHat
|
|
Basadas en Arch
|
|
Ejemplo práctico
Pongamos por ejemplo que queremos resguardar nuestras personalizaciones de Terminator, y la configuración que hemos aplicado para esta app a nivel de GTK.
Para ello entramos dentro de nuestra carpeta de dotfiles, y creamos aquí la estructura de ficheros que deseamos salvaguardar. Lo más habitual es crear una carpeta por aplicación, y dentro de ella replicamos la estructura a guardar tomando nuestro home como referencia. En este caso, vamos a guardar tambien todos los plugins y configuraciones que hemos añadido a nuestro terminator
|
|
Con esto, hemos generado una estructura dentro de nuestra carpeta de dotfiles, tal que así:
|
|
Ahora vamos a indicar a stow cuales son los ficheros y directorios que vamos a utilizar
|
|
el parámetro -nv
le indica que muestre los cambios en modo verbose, pero sin aplicar ningún tipo de cambio. Si vemos que es correcto, podemos omitir el -n
|
|
con esto, podemos verificar que ha copiado los ficheros originales dentro de nuestra carpeta de dotfiles, y los ha sustituido por enlaces simbólicos a nuestro repositorio.
Con esto, cualquier cambio de configuración que realicemos, realmente se está haciendo sobre los ficheros de nuestro repositorio. Tan solo debemos realizar un commit
y un push
desde nuestro repositorio para que los ficheros estén a salvo en Git
Recuperar dotfiles
En caso de que hayamos instalado un nuevo sistema, y lo que queramos sea recuperar nuestro ficheros de configuración, el proceso sería muy similar.
- Instalamos
stow
- Clonamos nuestro repositorio dentro de nuestro
home
- Indicamos a
stow
que cree los enlaces simbólicos necesarios. Lo lanzamos dentro del root de nuestra carpeta dotfiles
|
|
Espero que esto os sea de ayuda. Personalmente, es algo que tengo siempre presente en cualquier sistema Linux que utilizo.
Algunas ideas para aplicar en nuestros “dotfiles”, son por ejemplo:
- Terminator -> Emulador de terminal con soporte de tiling y plugins
- .bashrc - Configuración de shell Bash
- .zshrc - Configuración de shell Zsh
- Oh-my-zsh
- Configuraciones de Powerlevel10k
- Ficheros de alias utilizados en bash o zsh
- Configuraciones personalizadas de gtk
- Fuentes o temas de gnome instalados para nuestro usuario.
- Y un largo etc.