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 ficheroas

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

    Espero que te haya gustado, pasa un buen día. 🐧