Saltar al contenido principal

Produciendo Productividad: Gestión de DotFiles

· 6 min de lectura
Oscar Adrian Ortiz Bustos

Introducción

No es un secreto que paso la mayor parte de mi tiempo frente a una computadora, ya sea en diferentes lugares, como la escuela, el trabajo o mi cueva. Pareciera que no, pero resulta un tanto tedioso y desgastante estar revisando que plugin de Neovim o que función de zsh tengo en cada entorno. Con esto en mente recordé que soy un vago y decidí tomar la decisión de automatizar dicho proceso de una mejor manera.

Y por supuesto, te muestro como hacerlo por si deseas implementarlo en tu flujo de trabajo.

welcomeBanner

¿Que es un DotFile?

Considero que es importante primero dejar claro que es un archivo dotfile.

A grandes rasgos y para no complicarnos la existencia, un archivo dotfile es un archivo de configuración de aplicación. Su función es decirle al programa como debe de comportarse.

La capacidad que tiene un DotFile para diferenciar una configuración de otra es casi comparable (quizá me vine un poco arriba) a la que ofrece la huella dactilar a los seres humanos.

Ejemplo

Un ejemplo básico es el archivo .zshrc (o .bashrc dependiendo de la Shell que uses)

Este archivo se encarga de gestionar todo lo necesario para que nuestra terminal funcione de manera adecuada.

Pero quizá puede que estés más familiarizado con el archivo de configuración de VSCode, al cuál puedes acceder desde

Este archivo es que se encarga de agregar las configuraciones al programa. Pongamoslo así: cuando tú personalizas la apariencia o comportamiento del IDE desde la interfaz gráfica en realidad lo que estás haciendo es modificando ese archivo en texto plano.

Desarrollo

Pues realmente no es nada del otro mundo. Actualmente manejo 3 workspaces entonces realizo 3 copias de un dotfile por cada workspace en el que me encuentro.

Intentaba tener solo un archivo por herramienta en los 3 entornos (cosa que eventualmente haré) pero de momento necesitaba una solución rápida. Y es que no tengo las mismas configuraciones en los tres, como ejemplo pondré Neovim.

En este editor tengo configurado un plugin para conectarme a base de datos, este plugin lo utilizo en el trabajo realmente y no me interesa que se cargue cuando estoy en la escuela o incluso en mi casa y en el hipotético caso de que quiera hacerlo, las credenciales son distintas. Dicha carga del plugin generaría un editor más pesado, y yo lo que quiero es volar con Neovim.

Alternativas actuales

Si, no les voy a mentir y les diré que en la actualidad existen gestores de dotfiles para aventar al cielo, pero ¿que clase de autonomía me da usar cosas hechas por alguien más?. Y con esto me refiero a que si hay cosas que yo pueda hacer (con el fin de que se ajuste perfectamente dentro de mi flujo) prefiero hacerlas a buscar alternativas. Aunque si prefieren algo ya más establecido existen varias herramientas que pueden utilizar, entre ellas están GNU Stow, chezmoi y yadm. No profundizaré en ellos por que ese no es el fin de este post.

¿Cómo funciona?

La idea principal detrás de gestionar tus propios dotfiles es mantenerlos bajo control de versiones (usualmente con Git) y automatizar su despliegue en los diferentes entornos donde trabajas. Así, puedes tener siempre tus configuraciones sincronizadas y listas para usar, sin importar si cambias de laptop, formateas tu PC, o trabajas en una máquina del trabajo, escuela o personal.

El flujo básico que sigo

  1. Repositorio centralizado: Tengo un repositorio privado (puedes hacerlo público si lo prefieres) en GitHub donde almaceno todos mis dotfiles. Cada archivo de configuración relevante está ahí, organizado por carpetas o con sufijos/prefijos que indican a qué máquina o entorno pertenece.

  2. Clonando en cada máquina: Cuando inicio en una máquina nueva, simplemente clono el repositorio de dotfiles en mi home.

  3. Symlinks (enlaces simbólicos): Uso scripts sencillos en bash para crear enlaces simbólicos desde los archivos en mi repositorio hacia sus ubicaciones reales. Por ejemplo, el .zshrc de mi repo lo enlazo a ~/.zshrc, y así con cada archivo.

  4. Configuración por entorno: Para los casos donde una configuración varía según la máquina (por ejemplo, el plugin de base de datos de Neovim que solo quiero en el trabajo), separo estos archivos o añado condiciones en los scripts para solo crear los symlinks que correspondan al entorno actual.

  5. Actualización y sincronización: Cuando hago cambios en algún archivo (por ejemplo, agrego un alias útil al .zshrc), simplemente hago commit y push en el repo. Luego, en las demás máquinas, hago pull y actualizo los symlinks si es necesario.

dotfile-example

Diagrama

Aquí tienens un diagrama simple que ilustra el flujo de trabajo:

dotfile-diagram

Ejemplo de script básico

Aquí tienes un ejemplo MUY básico de cómo podrías automatizar la creación de symlinks para tus dotfiles:

#!/bin/bash

# Ruta donde clonaste tu repo de dotfiles
DOTFILES_DIR=~/dotfiles

# Lista de archivos que quieres gestionar
FILES=(.zshrc .vimrc .gitconfig)

for file in "${FILES[@]}"; do
ln -sf "$DOTFILES_DIR/$file" ~/"$file"
done

Este script puedes adaptarlo para gestionar diferentes configuraciones por entorno (utilizando variables de entorno, hostname, etc.), o para que solo aplique ciertos archivos dependiendo del caso.

Ventajas de este enfoque

  • Consistencia: Tendrás tus configuraciones favoritas siempre disponibles, sin importar dónde trabajes.
  • Backup automático: Si pierdes una máquina, tus configuraciones no se pierden.
  • Personalización total: Puedes adaptar y versionar todo a tu gusto, sin depender de herramientas externas.

Consideraciones de seguridad

Recuerda: tus dotfiles pueden contener información sensible (tokens, contraseñas, nombres de usuario). SIEMPRE revisa qué subes a tu repo y considera usar .gitignore o archivos locales para variables sensibles.

Conclusión

Gestionar tus dotfiles puede parecer irrelevante al principio, pero cuando empiezas a moverte entre diferentes entornos o simplemente quieres tener control sobre tu flujo de trabajo, se vuelve esencial. No necesitas grandes herramientas para empezar, un simple repositorio de Git y algunos symlinks pueden cambiar por completo tu experiencia. Y si luego quieres ir más allá, puedes explorar herramientas dedicadas como las que mencioné antes.

¿Y tú, cómo gestionas tus dotfiles? ¿Tienes algún tip o truco que te gustaría compartir?

¡Gracias por leer! Si te gustó este artículo, no dudes en dejar tu comentario, siempre es bienvenido.

Referencias:

"Ser dueño de tu software es ser dueño de tu destino digital. Tus dotfiles son el primer paso hacia la libertad."

Richard Stallman