Backup ficheros de configuración con dotdrop

9 minutos de lectura

Introducción

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

1config:
2  backup: true
3  create: true
4  dotpath: dotfiles
5dotfiles:
6profiles:

/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

 1dotdrop 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
 2
 3     _       _      _
 4  __| | ___ | |_ __| |_ __ ___  _ __
 5 / _` |/ _ \| __/ _` | '__/ _ \| '_ |
 6 \__,_|\___/ \__\__,_|_|  \___/| .__/  v0.24.1
 7                               |_|
 8
 9      -> "/home/carlos/.config/dunst" imported
10      -> "/home/carlos/.config/fontconfig" imported
11      -> "/home/carlos/.config/i3" imported
12      -> "/home/carlos/.config/i3status" imported
13      -> "/home/carlos/.config/liferea" imported
14      -> "/home/carlos/.config/pcmanfm" imported
15      -> "/home/carlos/.config/pragha" imported
16      -> "/home/carlos/.config/termite" imported
17      -> "/home/carlos/.config/transmission-remote-gtk" imported
18      -> "/home/carlos/.emacs.d/config.org" imported
19      -> "/home/carlos/.emacs.d/init.el" imported
20      -> "/home/carlos/.gnupg" imported
21      -> "/home/carlos/.ssh" imported
22      -> "/home/carlos/.tmux.conf" imported
23      -> "/home/carlos/.zshrc" imported
24
2515 file(s) imported.

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

 1config:
 2  backup: true
 3  banner: true
 4  create: true
 5  dotpath: dotfiles
 6  ignoreempty: false
 7  keepdot: false
 8  link_by_default: false
 9  longkey: false
10  showdiff: false
11  workdir: ~/.config/dotdrop
12dotfiles:
13  d_dunst:
14    dst: ~/.config/dunst
15    src: config/dunst
16  d_fontconfig:
17    dst: ~/.config/fontconfig
18    src: config/fontconfig
19  d_gnupg:
20    dst: ~/.gnupg
21    src: gnupg
22  d_i3:
23    dst: ~/.config/i3
24    src: config/i3
25  d_i3status:
26    dst: ~/.config/i3status
27    src: config/i3status
28  d_liferea:
29    dst: ~/.config/liferea
30    src: config/liferea
31  d_pcmanfm:
32    dst: ~/.config/pcmanfm
33    src: config/pcmanfm
34  d_pragha:
35    dst: ~/.config/pragha
36    src: config/pragha
37  d_ssh:
38    dst: ~/.ssh
39    src: ssh
40  d_termite:
41    dst: ~/.config/termite
42    src: config/termite
43  d_transmission-remote-gtk:
44    dst: ~/.config/transmission-remote-gtk
45    src: config/transmission-remote-gtk
46  f_config.org:
47    dst: ~/.emacs.d/config.org
48    src: emacs.d/config.org
49  f_init.el:
50    dst: ~/.emacs.d/init.el
51    src: emacs.d/init.el
52  f_tmux.conf:
53    dst: ~/.tmux.conf
54    src: tmux.conf
55  f_zshrc:
56    dst: ~/.zshrc
57    src: zshrc
58profiles:
59  ACER-E574G:
60    dotfiles:
61    - d_dunst
62    - d_fontconfig
63    - d_i3
64    - d_i3status
65    - d_liferea
66    - d_pcmanfm
67    - d_pragha
68    - d_termite
69    - d_transmission-remote-gtk
70    - f_config.org
71    - f_init.el
72    - d_gnupg
73    - d_ssh
74    - f_tmux.conf
75    - 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

 1config:
 2  backup: true
 3  banner: true
 4  create: true
 5  dotpath: dotfiles
 6  ignoreempty: false
 7  keepdot: false
 8  link_by_default: false
 9  longkey: false
10  showdiff: false
11  workdir: ~/.config/dotdrop
12dotfiles:
13  d_dunst:
14    dst: ~/.config/dunst
15    src: config/dunst
16  d_fontconfig:
17    dst: ~/.config/fontconfig
18    src: config/fontconfig
19  d_gnupg:
20    dst: ~/.gnupg
21    src: gnupg
22  d_i3:
23    dst: ~/.config/i3
24    src: config/i3
25  d_i3status:
26    dst: ~/.config/i3status
27    src: config/i3status
28  d_liferea:
29    dst: ~/.config/liferea
30    src: config/liferea
31  d_pcmanfm:
32    dst: ~/.config/pcmanfm
33    src: config/pcmanfm
34  d_pragha:
35    dst: ~/.config/pragha
36    src: config/pragha
37  d_ssh:
38    dst: ~/.ssh
39    src: ssh
40  d_termite:
41    dst: ~/.config/termite
42    src: config/termite
43  d_transmission-remote-gtk:
44    dst: ~/.config/transmission-remote-gtk
45    src: config/transmission-remote-gtk
46  f_config.org:
47    dst: ~/.emacs.d/config.org
48    src: emacs.d/config.org
49  f_init.el:
50    dst: ~/.emacs.d/init.el
51    src: emacs.d/init.el
52  f_tmux.conf:
53    dst: ~/.tmux.conf
54    src: tmux.conf
55  f_zshrc:
56    dst: ~/.zshrc
57    src: zshrc
58profiles:
59  ACER-E574G:
60    dotfiles:
61    - d_dunst
62    - d_fontconfig
63    - d_i3
64    - d_i3status
65    - d_liferea
66    - d_pcmanfm
67    - d_pragha
68    - d_termite
69    - d_transmission-remote-gtk
70    - f_config.org
71    - f_init.el
72    - d_gnupg
73    - d_ssh
74    - f_tmux.conf
75    - f_zshrc
76  TRABAJO:
77    dotfiles:
78    - d_dunst
79    - d_fontconfig
80    - d_i3
81    - d_i3status
82    - d_liferea
83    - d_pcmanfm
84    - d_pragha
85    - d_termite
86    - d_transmission-remote-gtk
87    - f_config.org
88    - f_init.el
89    - d_gnupg
90    - f_tmux.conf
91    - f_zshrc

Añadiendo nuevos ficheros

Si queremos importar un nuevo fichero de configuración

 1dotdrop import ~/.config/tmuxinator/carlos.yml
 2     _       _      _
 3  __| | ___ | |_ __| |_ __ ___  _ __
 4 / _` |/ _ \| __/ _` | '__/ _ \| '_ |
 5 \__,_|\___/ \__\__,_|_|  \___/| .__/  v0.24.1
 6                               |_|
 7
 8      -> "/home/carlos/.config/tmuxinator/carlos.yml" imported
 9
101 file(s) imported.

Instalar ficheros

Simplemente ejecutamos

1dotdrop install

Instalar ficheros de un perfil

1dotdrop install --profile=TRABAJO

Comparar ficheros

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

 1dotdrop compare
 2
 3diffing "d_pragha" VS "~/.config/pragha"
 4diff "pragha.db":
 5Los ficheros binarios /tmp/dotdrop-e6zywwzw/home/carlos/.config/pragha/pragha.db y /home/carlos/.config/pragha/pragha.db son distintos
 6
 7diffing "f_config.org" VS "~/.emacs.d/config.org"
 8< Esta configuración está basada en la configuración del
 9< [[https://github.com/rememberYou/.emacs.d][Terencio Agozzino]] (~remenberyou~)
10---
11> Esta configuración está basada en la configuración de [[https://github.com/rememberYou/.emacs.d][Terencio
12> Agozzino]] (~remenberyou~)
13996c996
14< ;;    (org-refile-targets '((org-agenda-files . (:maxlevel . 6))))
15---
16>     (org-refile-targets '((org-agenda-files . (:maxlevel . 6))))
171336c1336
18<     (op/site-sub-title "Blog personal donde guardo mis apuntes sobre tecnología.")
19---
20>     (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.

1
2dotdrop update ~/.config/pragha
3     _       _      _
4  __| | ___ | |_ __| |_ __ ___  _ __
5 / _` |/ _ \| __/ _` | '__/ _ \| '_ |
6 \__,_|\___/ \__\__,_|_|  \___/| .__/  v0.24.1
7                               |_|
8
9Overwrite "/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

 1dotdrop list
 2     _       _      _
 3  __| | ___ | |_ __| |_ __ ___  _ __
 4 / _` |/ _ \| __/ _` | '__/ _ \| '_ |
 5 \__,_|\___/ \__\__,_|_|  \___/| .__/  v0.24.1
 6                               |_|
 7
 8Available profile(s):
 9      -> ACER-E574G
10      -> TRABAJO

Listar ficheros de un perfil

 1dotdrop listfiles --profile=TRABAJO
 2
 3     _       _      _
 4  __| | ___ | |_ __| |_ __ ___  _ __
 5 / _` |/ _ \| __/ _` | '__/ _ \| '_ |
 6 \__,_|\___/ \__\__,_|_|  \___/| .__/  v0.24.1
 7                               |_|
 8
 9Dotfile(s) for profile "TRABAJO"
10d_dunst (src: "config/dunst", link: False)
11      -> ~/.config/dunst
12d_fontconfig (src: "config/fontconfig", link: False)
13      -> ~/.config/fontconfig
14d_i3 (src: "config/i3", link: False)
15      -> ~/.config/i3
16d_i3status (src: "config/i3status", link: False)
17      -> ~/.config/i3status
18d_liferea (src: "config/liferea", link: False)
19      -> ~/.config/liferea
20d_pcmanfm (src: "config/pcmanfm", link: False)
21      -> ~/.config/pcmanfm
22d_pragha (src: "config/pragha", link: False)
23      -> ~/.config/pragha
24d_termite (src: "config/termite", link: False)
25      -> ~/.config/termite
26f_authinfo.gpg (src: "gnupg/shared/authinfo.gpg", link: False)
27      -> ~/.gnupg/shared/authinfo.gpg
28f_carlos.yml (src: "config/tmuxinator/carlos.yml", link: False)
29      -> ~/.config/tmuxinator/carlos.yml
30f_init.el (src: "emacs.d/init.el", link: False)
31      -> ~/.emacs.d/init.el
32f_tmux.conf (src: "tmux.conf", link: False)
33      -> ~/.tmux.conf
34f_zshrc (src: "zshrc", link: False)
35      -> ~/.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