Sincronización de archivos .dot
¿Cansado de copiar manualmente la configuración en distintos ordenadores? Este artículo te mostrará cómo sincronizar tus dotfiles para que la configuración de tu entorno y de tus aplicaciones siga siendo la misma.

En este artículo, vamos a hablar de cómo utilizar dotfiles para mantener la configuración del sistema sin cambios entre dispositivos. Siguiendo unos sencillos pasos con Git, puedes gestionar fácilmente todo, desde los perfiles bash hasta la configuración de las aplicaciones. Este enfoque garantiza una experiencia fluida independientemente de la plataforma que estés utilizando.
Hazlo rápido
Si tienes prisa, ve directamente a guía paso a paso para configurar la sincronización dotfile. Y si quieres entender qué se hace ahí y para qué sirve, sigue leyendo.
Qué son los archivos .dot
Los archivos .dot (dotfiles) son archivos de configuración en sistemas tipo Unix como macOS, Linux y BSD. Almacenan configuraciones para aplicaciones, herramientas y servicios que se ejecutan en tu sistema, incluyendo cosas como git, ssh, .bashrc, .zshrc, .nanorc, .vimrc, y muchos otros.
El nombre de estos archivos comienza con un punto (.) para ocultarlos al usuario por defecto y simplificar las listas de archivos en los directorios. Y por qué se ocultan al usuario - lea la nota a pie de página más abajo (haga clic para abrirla).
Esta historia comienza hace muchos años, cuando se crearon los primeros sistemas de archivos en UNIX. Para facilitar la navegación, se añadió un archivo de punto (.) a cada directorio. Y se añadió otro archivo de doble punto (..) para navegar fácilmente hacia arriba por la estructura de directorios.
Dado que no había datos reales en estos archivos, se añadió un hack rápido al código del comando LS para ocultar dichos archivos de la salida por defecto. Hay una historia completa de este hack aquí sobre cómo la pereza permitió crear tales archivos ocultos 😉.
Muchos desarrolladores comparten sus archivos de configuración. Siempre puedes encontrar enlaces a repositorios populares con configuraciones de otras personas en Internet.
Por qué sincronizar
Sincronizar dotfiles es necesario para aquellos que usan múltiples ordenadores (y/o servidores) y quieren tener configuraciones familiares de entorno, servicios y aplicaciones en cada uno. Esto aumenta la productividad, reduce el tiempo de configuración de nuevos equipos y garantiza que las mismas herramientas y configuraciones de servicios y aplicaciones estén disponibles independientemente del equipo que se utilice.
Por ejemplo, hace poco tuve que configurar dos MacBooks nuevos seguidos. En el principal, todas las configuraciones se han hecho durante mucho tiempo y rara vez se cambian. Allí ya me he acostumbrado a ciertas utilidades, atajos de teclado y muchas acciones se realizan automáticamente. Pero en el nuevo, he tenido que configurarlo todo desde cero.
El primer problema fue recordar qué instalar y cómo configurarlo para que todo me resultara familiar. Luego surgió el segundo problema: cómo sincronizar la configuración de los programas, e incluso para que cuando se cambien en un ordenador, todo esto cambie automáticamente en otros ordenadores.
Qué sincronizar
En primer lugar, debes entender que la sincronización de absolutamente todo - aplicaciones y servicios instalados, sus configuraciones, variables de entorno, etc. aún no está 100% resuelta. Hay cosas que están vinculadas a un hardware específico, y simplemente copiándolas a otro equipo dará lugar a una aplicación no funcional.
Así que todo el mundo sigue agonizando, usando Ansible, Chef.io, OpenTofu y otras herramientas, o resolviendo el problema con aplicaciones al menos básicas. Además, hasta ahora sólo he configurado la sincronización para los siguientes archivos de configuración:
- .gitconfig - configuración para trabajar con Git.
- .gitignore - qué archivos ignorar. (👉 .gitignore configurador)
- .muttrc - correo en terminal.
- .p10k.zsh - tema para ZSH.
- .vimrc - configuración para Vim.
- .zimrc - módulos para Zim.
- .zshrc - configuración para ZSH.
Cualquier archivo puede ser añadido y eliminado de la sincronización en cualquier momento.
Cómo sincronizar
Hay montones de artículos sobre este tema en Internet. Encontrarás una lista de los más sensatos y útiles que he leído sobre este tema al final de este artículo. La mayoría de ellos describen el uso de varios sistemas de control de versiones.
El sistema más popular es, por supuesto, Git. En la imagen puedes ver las cuotas de mercado de los distintos sistemas y que Git es el claro líder entre todos ellos.

Enlace a la información actualizada: Las 5 principales tecnologías de control de versiones.
Git - es un sistema de control de versiones distribuido, gratuito y de código abierto para el seguimiento de los cambios en los archivos, diseñado para trabajar de forma rápida y eficaz con cualquier proyecto, desde los más pequeños a los más grandes.
GitHub - es una empresa comercial que ofrece alojamiento en la nube para repositorios Git. Permite a los entusiastas individuales y a equipos enteros almacenar, rastrear y controlar los cambios en el código del proyecto (archivos).
En pocas palabras, puedes usar Git sin Github, pero no puedes usar GitHub sin Git.
Git es un sistema popular, conveniente y familiar, así que decidí usarlo. Cuando se utiliza Git, hay dos formas más comunes de sincronizar los archivos de configuración - a través del directorio usual y a través del directorio bare.
El primer método
¿Cómo sincronizar la configuración del entorno a través de un directorio normal? Para hacer esto, necesitas crear un directorio especial (carpeta) en tu directorio home, donde se guardarán todos los ajustes y archivos de configuración que necesites. Entonces se crean enlaces simbólicos para ellos en tu directorio personal.
Estos son los pasos específicos para configurar la sincronización de esta manera. Todos los comandos se ejecutan en la consola.
# Vaya a su directorio personal
cd ~
# Crea un directorio para almacenar los archivos de configuración
# El nombre puede ser cualquier cosa, yo usé dotfiles
mkdir dotfiles
# Mueve los ficheros de configuración existentes al directorio creado
mv .vimrc .zimrc .zshrc dotfiles/
# Crear enlaces simbólicos en el directorio raíz
# -s: esta opción establece un enlace simbólico
# -f: sobrescribe el fichero de enlace sin notificación
ln -sf ~/dotfiles/.vimrc ~/.vimrc
ln -sf ~/dotfiles/.zimrc ~/.zimrc
ln -sf ~/dotfiles/.zshrc ~/.zshrcEn palabras sencillas: los comandos anteriores mueven archivos de configuración a un directorio especial (dotfiles) y los sustituyen en tu directorio personal por enlaces a ellos. Cuando un programa, como vim, intenta leer su fichero de configuración, que está por defecto en tu directorio personal, abre un enlace que le lleva al propio fichero en el directorio dotfiles.
El siguiente paso es usar tu navegador para ir a tu GitHub (si no tienes una, registra una cuenta, es gratis) y crear un repositorio allí donde guardarás tus archivos de configuración. Luego vuelve a la consola en tu ordenador y navega hasta el directorio dotfiles que hemos creado
cd dotfilesInícialo como un directorio Git:
git init
git add .
git commit -m ‘First commit’
# En el comando siguiente, sustituye el enlace a la dirección de tu repositorio en GitHub
git remote add origin https://github.com/YOURNAME/dotfiles
git push origin mainEs fácil trabajar con este directorio utilizando los comandos habituales de Git: status, push, pull, etc. Cuando necesite añadir un nuevo archivo de configuración para la sincronización, por ejemplo .nanorc, haga lo siguiente:
mv .nanorc dotfiles/
ln -sf ~/dotfiles/.nanorc ~/.nanorc
cd dotfiles
git add .nanorc
git commit -m ‘Añadir nanorc config’
git push¡IMPORTANTE! Ten en cuenta que los comandos Git se ejecutan dentro del directorio del proyecto que fue inicializado, en la carpeta .git. La lógica estándar de Git asume que el árbol de trabajo del proyecto está en el mismo directorio. Por tanto, para realizar acciones de sincronización de archivos (añadir, modificar, descargar, etc.), necesitarás entrar cada vez en el directorio dotfiles.
Sin embargo, opcionalmente puedes crear un alias especial que te permitirá ejecutar comandos Git en el directorio dotfiles desde cualquier lugar sin tener que entrar en el directorio dotfiles cada vez. Puedes llamar a este alias como quieras, yo lo llamé cfg. Esto es lo que tienes que hacer.
# Crea un alias con un nombre que te sea fácil de recordar
alias cfg='/usr/bin/git --git-dir=$HOME/.cfg/ --work-tree=$HOME'
# Guárdalo en la configuración del entorno, para no tener que crearlo cada vez.
echo "alias cfg='/usr/bin/git --git-dir=$HOME/.cfg/ --work-tree=$HOME'" >> $HOME/.zshrc
# Y desactivar los archivos no rastreables para que podamos ver los que queremos ver
cfg config --local status.showUntrackedFiles noSi utiliza este alias, el proceso de añadir nuevos archivos o versiones tendrá el siguiente aspecto:
cd ~
mv .nanorc dotfiles/
ln -sf ~/dotfiles/.nanorc ~/.nanorc
cfg add .nanorc
cfg commit -m ‘Añadir nanorc config’
cfg pushTenga en cuenta que no es necesario entrar en el directorio dotfiles - no ejecutamos el comando cd dotfiles. Así que puedes ejecutar estos comandos desde cualquier lugar. Una vez más, permíteme recordarte que este paso es completamente opcional, es sólo por conveniencia. Si no eres demasiado perezoso para ir al directorio dotfiles cada vez para añadir o actualizar los archivos de configuración, no necesitas crear un alias.
¿Cómo sincronizar la configuración en otro ordenador?
Ahora. En el otro ordenador, para sincronizar la configuración con el ordenador de origen, inicia la consola y ejecuta los siguientes comandos:
# Vaya a su directorio personal
cd ~
# Para evitar la recursión, añade el directorio .cfg a global ignore de antemano
echo ".cfg" >> .gitignore
# Clona tu repositorio desde GitHub
git clone https://github.com/YOURNAME/dotfiles $HOME/.cfg
# Si estás usando un alias, guárdalo en la configuración de tu entorno
echo "alias cfg='/usr/bin/git --git-dir=$HOME/.cfg/ --work-tree=$HOME'" >> $HOME/.zshrc
# Desactivar la visualización de archivos no rastreados
cfg config --local status.showUntrackedFiles no
# Y mover el contenido del repositorio a un nuevo ordenador
cfg checkoutEs posible que aparezca una advertencia de que algunos de los archivos locales existentes, como .bashrc o .gitignore pueden ser sobrescritos. Guárdalos si los necesitas o bórralos, luego repite el comando - cfg checkout. Listo.
Algunos usuarios señalan que este método no afecta negativamente al rendimiento de otros programas.
El inconveniente es que debe recordar siempre los enlaces simbólicos, y que los propios ficheros de configuración se encuentran ahora en un directorio especial. Si cambias algo, hay que actualizar o editar los enlaces. Y si no hay necesidad de sincronización, tendrás que borrar los enlaces y devolver los propios ficheros a su lugar.
Y también debes tener en cuenta que algunas aplicaciones simplemente no funcionan con enlaces simbólicos. Sólo necesitan los archivos de configuración originales.
El segundo método
Otro grupo de soluciones utiliza la opción --bare al crear un directorio Git. Yo utilicé este método porque realmente no quería complicarme con un directorio separado y enlaces simbólicos. Aunque todo está automatizado, encontré este método más elegante y conveniente.
👉 No voy a entrar en detalles aquí, pero puedes leer la diferencia entre catálogos normales y bare en esta pregunta informativa ¿Cuál es la diferencia práctica entre un repositorio Bare y no Bare? en StackOverflow.
Entonces, ¿qué tengo que hacer para configurar la sincronización dotfile utilizando el método de directorio desnudo? Para ello, realice los siguientes pasos.
# Vaya a su directorio personal
cd ~
# Crea un repositorio Git en tu directorio personal
git init --bare $HOME/.cfg
alias cfg='/usr/bin/git --git-dir=$HOME/.cfg/ --work-tree=$HOME'
cfg config --local status.showUntrackedFiles no
echo "alias cfg='/usr/bin/git --git-dir=$HOME/.cfg/ --work-tree=$HOME'" >> $HOME/.zshrcSeguridad
A la hora de configurar la sincronización de archivos dot, es importante tener en cuenta la seguridad. A veces, los archivos de configuración pueden incluir datos confidenciales, como claves de acceso y contraseñas. Estos son algunos consejos sencillos que te ayudarán a proteger tus archivos dot:
Repositorios privados: Si utilizas GitHub u otra plataforma para almacenar tus dotfiles, asegúrate de que el repositorio sea privado. Esto ayudará a evitar el acceso no autorizado a sus archivos de configuración.
Encriptación de datos: No añadas archivos que contengan contraseñas, claves API, claves SSH privadas y otra información sensible a tu repositorio. Para tales datos, es mejor usar gestores de secretos especiales, como git-crypt o SOPS o GPG.
Comprobaciones periódicas: Comprueba periódicamente quién tiene acceso a tu repositorio y actualiza contraseñas y claves. Esto ayudará a proteger tus datos de accesos no autorizados.
Utiliza claves SSH: Conéctese a servidores y repositorios remotos utilizando claves SSH en lugar de contraseñas. Esto aumentará la seguridad de tus conexiones.
Restricciones de acceso: Asegúrate de que sólo tienen acceso a tus archivos dot aquellos que realmente lo necesitan. Habilita la autenticación de dos factores para mayor protección.
Conclusión
Para concluir, me gustaría compartir algunos puntos.
En primer lugar, sólo deberías molestarte con la sincronización si tienes más de dos servidores/ordenadores para los que es importante tener las mismas herramientas y configuraciones. De lo contrario, será más problemático de lo que vale la pena. En segundo lugar, trata de entender qué es exactamente lo que necesitas sincronizar. Si sólo son una o dos utilidades, puede que no merezca la pena. Y no te olvides de la seguridad.
Cuando empecé a configurar dotfile sync, parecía muy complicado. Una vez que tuve todo configurado y aprendí los comandos de servicio, entonces fue rápido y fácil. Funciona muy bien, así que en mi caso el esfuerzo mereció la pena.
Sin embargo, después de algún tiempo, me di cuenta de que era mucho más probable que tuviera que poner en marcha un nuevo servidor o configurar un nuevo ordenador que cambiar la configuración. Y esa es una historia completamente diferente que requiere un enfoque y un conjunto de herramientas ligeramente distintos. Ya estoy investigando otra serie de información sobre este tema, y hay algunas conclusiones muy interesantes. Como de costumbre, pienso resumir y simplificar las experiencias de gente inteligente y compartirlo todo en mi blog, así que pásate de nuevo por aquí.
Útil
He aquí una lista de materiales que tuve que consultar para entender el tema.
Aplicaciones y utilidades
- List of all popular dot file managers
- The most popular synchronization application
- MacSync - easy sync app for macOS
- Sync dotfiles with rsync (bastante viejo)
Artículos y repositorios
- Setting up a personalised working environment
- Manage your dotfiles across multiple machines
- How to Store Dotfiles - A Bare Git Repository
- Manage your dotfiles on Github
- The best way to store your dotfiles
- Holman does dotfiles
- Mathias’s dotfiles
- Paul’s dotfiles
- Dotfiles - ArchWiki
- Yet Another Dotfile Repo
Buena suerte y si tienes alguna pregunta, ponte en contacto conmigo a través de cualquiera de los canales.
😎
Un correo cuando publique algo nuevo.



