Blog personal donde guardo mis notas sobre tecnología

Backup ficheros de configuración con dotdrop

Carlos M.

Escuchando el podcast de Lorenzo (El Atareao) descubrí de la existencia de ciertas herramientas para el backup de los ficheros de configuración, como pueden ser dotdrop, dotfiles o fresh

Hasta ahora, tenia un pequeño script de bash donde iba poniendo aquellos ficheros de los que quería tener una copia de seguridad, realmente lo que hacia era que cada cierto tiempo realizaaba una copia de esos ficheros a una carpeta y luego esa carpeta la subía a gitlab, y de esta forma tenia mis ficheros de configuración siempre disponibles desde cualquier ordenador.

Como digo, revisando los programas que recomendaba Lorenzo descubrí dotdrop, y me decidí por el básicamente porque permite el uso de perfiles, es decir, puedo hacer una copia de seguridad de todos los ficheros de configuración del ordenador de casa y luego mediante el uso de estos perfiles puedo seleccionar que en el ordenador del trabajo solo importe determinados ficheros de configuración, todo ello de forma automática.

Configuración #

Tras la instalación, creamos el fichero de configuración config.yaml, te recomiendo que te crees una carpeta y dentro de ella crees el fichero

config:
  backup: true
  create: true
  dotpath: dotfiles
dotfiles:
profiles:

/dotpath/ es la carpeta donde estarán las copias de nuestros ficheros de configuración de los que queremos tener una copia.

Añadiendo ficheros de configuración #

Ahora procedemos a importar los ficheros de configuración

dotdrop import ~/.config/dunst ~/.config/fontconfig ~/.config/i3 ~/.config/i3status ~/.config/liferea ~/.config/pcmanfm ~/.config/pragha ~/.config/termite ~/.config/transmission-remote-gtk ~/.emacs.d/config.org ~/.emacs.d/init.el ~/.gnupg ~/.ssh ~/.tmux.conf ~/.zshrc

      _       _      _
   __| | ___ | |_ __| |_ __ ___  _ __
  / _` |/ _ \| __/ _` | '__/ _ \| '_ |
  \__,_|\___/ \__\__,_|_|  \___/| .__/  v0.24.1
			      |_|

       -> "/home/carlos/.config/dunst" imported
       -> "/home/carlos/.config/fontconfig" imported
       -> "/home/carlos/.config/i3" imported
       -> "/home/carlos/.config/i3status" imported
       -> "/home/carlos/.config/liferea" imported
       -> "/home/carlos/.config/pcmanfm" imported
       -> "/home/carlos/.config/pragha" imported
       -> "/home/carlos/.config/termite" imported
       -> "/home/carlos/.config/transmission-remote-gtk" imported
       -> "/home/carlos/.emacs.d/config.org" imported
       -> "/home/carlos/.emacs.d/init.el" imported
       -> "/home/carlos/.gnupg" imported
       -> "/home/carlos/.ssh" imported
       -> "/home/carlos/.tmux.conf" imported
       -> "/home/carlos/.zshrc" imported

 15 file(s) imported.

Si vuelves a abrir el fichero de configuración, vemos que ha cambiado

config:
backup: true
banner: true
create: true
dotpath: dotfiles
ignoreempty: false
keepdot: false
link_by_default: false
longkey: false
showdiff: false
workdir: ~/.config/dotdrop
dotfiles:
d_dunst:
  dst: ~/.config/dunst
  src: config/dunst
d_fontconfig:
  dst: ~/.config/fontconfig
  src: config/fontconfig
d_gnupg:
  dst: ~/.gnupg
  src: gnupg
d_i3:
  dst: ~/.config/i3
  src: config/i3
d_i3status:
  dst: ~/.config/i3status
  src: config/i3status
d_liferea:
  dst: ~/.config/liferea
  src: config/liferea
d_pcmanfm:
  dst: ~/.config/pcmanfm
  src: config/pcmanfm
d_pragha:
  dst: ~/.config/pragha
  src: config/pragha
d_ssh:
  dst: ~/.ssh
  src: ssh
d_termite:
  dst: ~/.config/termite
  src: config/termite
d_transmission-remote-gtk:
  dst: ~/.config/transmission-remote-gtk
  src: config/transmission-remote-gtk
f_config.org:
  dst: ~/.emacs.d/config.org
  src: emacs.d/config.org
f_init.el:
  dst: ~/.emacs.d/init.el
  src: emacs.d/init.el
f_tmux.conf:
  dst: ~/.tmux.conf
  src: tmux.conf
f_zshrc:
  dst: ~/.zshrc
  src: zshrc
profiles:
ACER-E574G:
  dotfiles:
  - d_dunst
  - d_fontconfig
  - d_i3
  - d_i3status
  - d_liferea
  - d_pcmanfm
  - d_pragha
  - d_termite
  - d_transmission-remote-gtk
  - f_config.org
  - f_init.el
  - d_gnupg
  - d_ssh
  - f_tmux.conf
  - f_zshrc

Además, ahora tenemos un carpeta llamada dotfiles con una copia de los ficheros de configuración

Añadiendo un perfil #

Podemos editar el fichero de configuración y añadir un nuevo perfil, en el ejemplo llamado TRABAJO, y seleccionar que ficheros de configuración van a formar parte de ese perfil

     config:
backup: true
banner: true
create: true
dotpath: dotfiles
ignoreempty: false
keepdot: false
link_by_default: false
longkey: false
showdiff: false
workdir: ~/.config/dotdrop
dotfiles:
d_dunst:
  dst: ~/.config/dunst
  src: config/dunst
d_fontconfig:
  dst: ~/.config/fontconfig
  src: config/fontconfig
d_gnupg:
  dst: ~/.gnupg
  src: gnupg
d_i3:
  dst: ~/.config/i3
  src: config/i3
d_i3status:
  dst: ~/.config/i3status
  src: config/i3status
d_liferea:
  dst: ~/.config/liferea
  src: config/liferea
d_pcmanfm:
  dst: ~/.config/pcmanfm
  src: config/pcmanfm
d_pragha:
  dst: ~/.config/pragha
  src: config/pragha
d_ssh:
  dst: ~/.ssh
  src: ssh
d_termite:
  dst: ~/.config/termite
  src: config/termite
d_transmission-remote-gtk:
  dst: ~/.config/transmission-remote-gtk
  src: config/transmission-remote-gtk
f_config.org:
  dst: ~/.emacs.d/config.org
  src: emacs.d/config.org
f_init.el:
  dst: ~/.emacs.d/init.el
  src: emacs.d/init.el
f_tmux.conf:
  dst: ~/.tmux.conf
  src: tmux.conf
f_zshrc:
  dst: ~/.zshrc
  src: zshrc
profiles:
ACER-E574G:
  dotfiles:
  - d_dunst
  - d_fontconfig
  - d_i3
  - d_i3status
  - d_liferea
  - d_pcmanfm
  - d_pragha
  - d_termite
  - d_transmission-remote-gtk
  - f_config.org
  - f_init.el
  - d_gnupg
  - d_ssh
  - f_tmux.conf
  - f_zshrc
TRABAJO:
  dotfiles:
  - d_dunst
  - d_fontconfig
  - d_i3
  - d_i3status
  - d_liferea
  - d_pcmanfm
  - d_pragha
  - d_termite
  - d_transmission-remote-gtk
  - f_config.org
  - f_init.el
  - d_gnupg
  - f_tmux.conf
  - f_zshrc

Añadiendo nuevos ficheros #

Si queremos importar un nuevo fichero de configuración

dotdrop import ~/.config/tmuxinator/carlos.yml
     _       _      _
  __| | ___ | |_ __| |_ __ ___  _ __
 / _` |/ _ \| __/ _` | '__/ _ \| '_ |
 \__,_|\___/ \__\__,_|_|  \___/| .__/  v0.24.1
			       |_|

      -> "/home/carlos/.config/tmuxinator/carlos.yml" imported

1 file(s) imported.

Instalar ficheros #

Simplemente ejecutamos

dotdrop install

Instalar ficheros de un perfil #

dotdrop install --profile=TRABAJO

Comparar ficheros #

Podemos comparar si hay cambios entre los ficheros de configuración con los del backup de dotdrop

    dotdrop compare

    diffing "d_pragha" VS "~/.config/pragha"
    diff "pragha.db":
Los ficheros binarios /tmp/dotdrop-e6zywwzw/home/carlos/.config/pragha/pragha.db y /home/carlos/.config/pragha/pragha.db son distintos

diffing "f_config.org" VS "~/.emacs.d/config.org"
< Esta configuración está basada en la configuración del
< [[https://github.com/rememberYou/.emacs.d][Terencio Agozzino]] (~remenberyou~)
---
> Esta configuración está basada en la configuración de [[https://github.com/rememberYou/.emacs.d][Terencio
> Agozzino]] (~remenberyou~)
996c996
< ;;    (org-refile-targets '((org-agenda-files . (:maxlevel . 6))))
---
>     (org-refile-targets '((org-agenda-files . (:maxlevel . 6))))
1336c1336
<     (op/site-sub-title "Blog personal donde guardo mis apuntes sobre tecnología.")
---
>     (op/site-sub-title "Blog personal donde guardo mis notas de tecnología.")

Actualizar ficheros #

Para actualizar los ficheros de configuración de dotdrop que tienen diferencias con la versión almacenada.


dotdrop update ~/.config/pragha
					_       _      _
				     __| | ___ | |_ __| |_ __ ___  _ __
				    / _` |/ _ \| __/ _` | '__/ _ \| '_ |
				    \__,_|\___/ \__\__,_|_|  \___/| .__/  v0.24.1
								  |_|

				   Overwrite "/home/carlos/Documentos/proyectos/dotfiles/dotfiles/config/pragha/pragha.db" with "/home/carlos/.config/pragha/pragha.db"? [y/N] ? y

Se solicita una confirmación del usuario antes de sobrescribir o actualizar cualquier fichero a menos que se use el parámetro -f –force.

Ver perfiles #

dotdrop list
      _       _      _
   __| | ___ | |_ __| |_ __ ___  _ __
  / _` |/ _ \| __/ _` | '__/ _ \| '_ |
  \__,_|\___/ \__\__,_|_|  \___/| .__/  v0.24.1
			      |_|

 Available profile(s):
       -> ACER-E574G
       -> TRABAJO

Listar ficheros de un perfil #

dotdrop listfiles --profile=TRABAJO

      _       _      _
   __| | ___ | |_ __| |_ __ ___  _ __
  / _` |/ _ \| __/ _` | '__/ _ \| '_ |
  \__,_|\___/ \__\__,_|_|  \___/| .__/  v0.24.1
			      |_|

 Dotfile(s) for profile "TRABAJO"
 d_dunst (src: "config/dunst", link: False)
       -> ~/.config/dunst
 d_fontconfig (src: "config/fontconfig", link: False)
       -> ~/.config/fontconfig
 d_i3 (src: "config/i3", link: False)
       -> ~/.config/i3
 d_i3status (src: "config/i3status", link: False)
       -> ~/.config/i3status
 d_liferea (src: "config/liferea", link: False)
       -> ~/.config/liferea
 d_pcmanfm (src: "config/pcmanfm", link: False)
       -> ~/.config/pcmanfm
 d_pragha (src: "config/pragha", link: False)
       -> ~/.config/pragha
 d_termite (src: "config/termite", link: False)
       -> ~/.config/termite
 f_authinfo.gpg (src: "gnupg/shared/authinfo.gpg", link: False)
       -> ~/.gnupg/shared/authinfo.gpg
 f_carlos.yml (src: "config/tmuxinator/carlos.yml", link: False)
       -> ~/.config/tmuxinator/carlos.yml
 f_init.el (src: "emacs.d/init.el", link: False)
       -> ~/.emacs.d/init.el
 f_tmux.conf (src: "tmux.conf", link: False)
       -> ~/.tmux.conf
 f_zshrc (src: "zshrc", link: False)
       -> ~/.zshrc

Consideraciones #

  • Dotdrop no permite manejar los permisos de archivo, todas las operaciones ( mkdir , cp , mv , ln , creación de archivos) se ejecutan con los derechos del usuario que llama a dotdrop.

  • Funciona bien para archivos de configuración locales o de usuario, pero no permite administrar archivos de configuración globales o del sistema ( /etc o /var por ejemplo) directamente.

  • Si esta carpeta la subes a un repositorio de gitlab podrás tener siempre a mano tus ficheros de configuración listos para instalar en cualquier equipo

  • Hay muchas, pero muchas más opciones para configurar dotdrop, pasate pos su sitio para verlas todas, aqui solo he mostrado un manera