Gestión de dotfiles con stow

Compartir esta publicación

Compartir en facebook
Compartir en linkedin
Compartir en twitter
Compartir en email

Como programador, gran parte de nuestro trabajo nos la pasamos desarrollando código (y en reuniones, por supuesto), tanto es así, que solemos dedicarle muchísimo tiempo a configurar nuestro set de herramientas que usamos diariamente para nuestro trabajo. Ya no solo hablamos de la evolución de la configuración, sino de cómo configurar tu nuevo portátil, tener varios ordenadores, o simplemente compartir cierta configuración de alguna herramienta con algún compañero.

La gran mayoría de aplicaciones (y más en sistemas unix) son configuradas a través de los conocidos “dotfiles”(guardados en la $HOME del usuario), que no son más que ficheros o carpetas que empiezan por un . para configurar las aplicaciones (ej: .bashrc, .git/). El propósito de que empiece por un punto es que por defecto los sistemas operativos los trata como archivos ocultos y no los muestra a no ser que se lo indiques.

Antes de comenzar, vamos a explicar los 3 términos que necesitamos saber para trabajar con STOW, que són: Package, Stow Directory y Target Directory.

  • Package: Es una colección de ficheros que deben ser “instalados” juntos en el mismo target directory.
  • Stow directory: Es el repositorio donde estarán todos nuestros packages.
  • Target directory: Es el directorio donde queremos instalar esas configuraciones que están en nuestros packages.

GoG27MPPxAcfGmQqhahbrweee GrZox358qFwPPKeXYCP od9DGBR4eGeJuqIUywwLNfTXPMgtUwRWpdv00hY6zK84uW eVF7IRpKPoiEbm9lW0dwPwN qgk0P1dPHUgoIP36MWmlGDYHM1AmA

La funcionalidad que buscamos Stow va a ser que nos genere un symbolik link de los ficheros que tenemos dentro de nuestros packages en el target directory. En el ejemplo, si ejecutaramos stow git, nos crearía un link de ~/.gitconfig to ~/.dotfiles/git/.gitconfig.

En este caso, la convención que ha decidido la comunidad es colocarlo todo dentro de un directorio llamado .dotfiles dentro de nuestra home, pero esto es algo que se aprecia leyendo foros y artículos sobre el manejo de dotfiles. Tiene cierta lógica ya que en stow, por defecto, el target directory es el parent del stow directory. Eso significa que si colocamos ~/.dotfiles es el stow directory, el target directory será ~/, que es donde vamos a querer colocar nuestros dotfiles.

El fin de este artículo será sacar nuestra configuración de git (.gitconfig) y de zsh (.zshrc) de nuestro home sin ningún tipo de control y moverlo dentro de nuestra carpeta .dotfiles, donde podremos subirla a un repositorio git (stow con git tiene muy buena sinergia), sincronizarla con dropbox, o lo que más nos guste.

Para comenzar, vamos a crearnos nuestro stow directory, que puede estar donde más nos guste, pero en el artículo usaremos ~/.dotfiles por los motivos que se han explicado previamente. Ahora vamos a empezar creando la configuración de git, para ello, crearemos nuestro package git dentro de nuestro stow directory, y dentro del mismo, los ficheros de configuración relacionados con git que queremos crear un simlink en el target directory. En este caso será únicamente nuestro .gitconfig:

$ cd ~ $ mkdir -p .dotfiles/git

$ touch .dotfiles/git/.gitconfig

VJwKpxUEwhYCeOTW8R5ht5qrLmamw MfinD 2QSHfOLfCyYdhLIV5hiBMxEjn85e5eIgNyPoy2n2wVqHoGCzx0IjvB6IsT pHqSLx 6bqkS7vlAZILPsUog6RlZA 804Du tL02FiOwCJy97EA

Ahora lo que buscamos es copiar el contenido del .gitconfig con la configuración actual que se encuentra en la $HOME del usuario (~/.gitconfig), y pegarla en el nuevo fichero generado dentro de nuestro stow directory. Para ello, lo que vamos a hacer es lanzar el comando stow con los parámetros –adopt, -n y -v, y como argumento le diremos que queremos hacer stow en la carpeta git: `stow –adopt -nv git`.

$ stow –adopt -nv git

N8Igy xzs5jU4lLp7iplO3K0CyvoJe92hEGCyyTUQDWX7aJpC70b8JqyVtTUkUEaSQC1 v2l7RO8BihRmWLuIawgPvm tfhuXq8wW Bcefw2cu3jX2w

Vamos a explicar lo que hace cada opción por separado:

  • -n: Con esta opción le estamos diciendo a stow que no ejecute ninguna acción, simplemente nos diga que pretende hacer si le quitamos la opción.
  • -v: Esta opción es la que nos permitirá leer que pretende hacer stow (Al final es incrementar el nivel de verbosidad)
  • -adopt: Esta opción es la única que modifica el stow directory, todas las demás se centran en el target directory. Con esta opción lo que hacemos es que previo a stowear, moverá el fichero actual en el target directory al stow directory, y luego creará el link. Muy útil cuando estamos empezando a crear nuestros .dotfiles.

Una vez vemos las acciones que va a hacer, bastaría con eliminar la opción -n del comando para ejecutarlo:

$ stow -adopt -v git

v1lgDng1is21DcxSS P3Ae5kpGNolNkCmgld0TYd7SeTmI6PLuLzMVJ9FSMXBREuq7 R3j97B5Ds5EO7m2QBBtAkwgKGdTFmjGD201zWBKhaGZEqYJgvl3uKy

Con esto ya vemos como guardarnos la configuración actual dentro de nuestro .dotfiles y como stow gestiona todo el tema de links de una manera fácil.

Para terminar el artículo, me gustaría comentar de manera resumida qué otras cosas he necesitado hacer con stow:

  • Para terminar el artículo, me gustaría comentar de manera resumida qué otras cosas he necesitado hacer con stow:
  • Que pasa si eliminamos un fichero de nuestro stow directory (~/.dotfiles) que ya estaba stoweado? El fichero no existe pero el link sigue ahí, para ello tenemos stow -R, que es básicamente un shortcut a stow -D && stow -S.
  • Si por algún motivo no quieres tener tu repositorio dotfiles en la home (pe: ~/projects/dotfiles), y dado que el target directory es el parent (en este caso será ~/projects), debemos hacer explícito donde queremos crear los links de configuración, para ello deberemos usarstow -t=~.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

Suscríbete a nuestro boletín de noticias

Recibe actualizaciones de los últimos descubrimientos tecnológicos

Acerca de Apiumhub

Apiumhub reúne a una comunidad de desarrolladores y arquitectos de software para ayudarte a transformar tu idea en un producto potente y escalable. Nuestro Tech Hub se especializa en Arquitectura de Software, Desarrollo Web & Desarrollo de Aplicaciones Móviles. Aquí compartimos con usted consejos de la industria & mejores prácticas, basadas en nuestra experiencia.

Posts populares
Obtén nuestro Libro: Software Architecture Metrics

Global Software Architecture Summit '22

Reserva tu plaza!

Reserva

¿Tienes un proyecto desafiante?

Podemos trabajar juntos

Secured By miniOrange