Skip to content

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Backup de dotfiles — modelo de 2 repositorios

Sistema de respaldo de configuraciones para Windows basado en Git y un repositorio bare: los archivos de configuración se versionan directamente en su ubicación original bajo $HOME mediante --git-dir y --work-tree, sin carpetas intermedias.

Repositorio Contenido Visibilidad
Público (este repo) Scripts PowerShell + plantilla paths.txt Pública
Privado (backup-pc-config) Archivos reales de configuración + exports del sistema Privada

Prerrequisitos

  • PowerShell 7 o superior
  • Git disponible en PATH
  • Cuenta de GitHub con acceso por HTTPS (token/PAT) o SSH

Estructura

  • setup.ps1 — crea el repositorio bare, lo configura, agrega al índice las rutas de paths.txt y ofrece configurar el remote
  • deploy.ps1 — exporta listas del sistema a texto, hace commit de solo lo declarado en paths.txt y publica en origin
  • restore.ps1 — crea un backup de seguridad y restaura las configuraciones locales desde el repo privado
  • export-system.ps1 — genera inventarios en formato .txt (apps, drivers, servicios, fuentes, entorno, etc.)
  • paths.txt — plantilla declarativa de rutas rastreadas (edítela a su medida)
  • dotfiles.git/ — repositorio bare local (creado por setup.ps1)

Primera instalación

  1. Clone este repositorio público y entre a la carpeta:
    git clone <url-del-repo-publico>
    cd "backup dotfiles"
  2. Ejecute el setup (crea el bare, lee paths.txt y ofrece configurar el remote):
    .\setup.ps1
  3. Cree en GitHub un repositorio privado llamado backup-pc-config.
  4. Agregue el remote al bare (si lo omitió en el paso 2):
    git --git-dir=".\dotfiles.git" remote add origin <url-del-repo-privado>
  5. Genere el primer backup y publíquelo:
    .\deploy.ps1

Restaurar en una PC nueva

  1. Clone este repositorio público.
  2. Ejecute .\setup.ps1 (puede dejar vacío el paso del remote).
  3. Agregue el remote apuntando al repositorio privado:
    git --git-dir=".\dotfiles.git" remote add origin <url-del-repo-privado>
  4. Restaure (sobrescribe las configuraciones locales con la versión remota):
    .\restore.ps1

Nota: restore.ps1 crea automáticamente un commit de backup antes de sobrescribir. Si algo falla, puede recuperar versiones anteriores con git --git-dir=".\dotfiles.git" log.

Seguridad del sistema

Deploy selectivo

deploy.ps1 no usa git add -A. Solo agrega:

  1. Archivos declarados en paths.txt (rutas explícitas).
  2. Los exports del sistema generados en ~/.config/system-lists/.
  3. Cambios en archivos ya rastreados (detecciones dinámicas como Windows Terminal).

Si el export del sistema falla, el deploy se detiene y muestra el error.

Backup antes de restore

restore.ps1 verifica si hay cambios locales pendientes antes del git reset --hard. Si los hay, crea un commit automático con mensaje restore-pre-backup: <fecha> para que no se pierda nada.

Exports del sistema (texto)

export-system.ps1 genera archivos .txt legibles en ~/.config/system-lists/:

Archivo Contenido
scoop.txt Paquetes instalados via Scoop
winget.txt Paquetes instalados via WinGet
powertoys.txt Configuración PowerToys (DSC export)
drivers.txt Drivers instalados (requiere admin)
servicios.txt Servicios de Windows (todos, deshabilitados, automáticos, en ejecución)
apps.txt Programas instalados + Microsoft Store
env.txt Variables de entorno (HKCU, HKLM, sesión actual, PATH)
fonts.txt Fuentes instaladas (registro + archivos)

paths.txt

Define qué se respalda. Formato declarativo:

  • Una ruta por línea, relativa a $HOME, sin barra inicial.
  • Comentarios con # y líneas vacías se ignoran.
  • Las rutas inexistentes se marcan [SKIP] sin cortar la ejecución.

Agregar rutas: edite paths.txt (descomente un ejemplo o escriba el suyo) y vuelva a ejecutar .\setup.ps1.

Quitar rutas: comente la línea con #. La ruta deja de actualizarse en los próximos deploys; para retirarla también del índice remoto ejecute git --git-dir=".\dotfiles.git" rm --cached <ruta> y luego haga deploy.

Windows Terminal (y OpenCode fuera de ~/.config/opencode) se resuelven dinámicamente en setup.ps1, así que no necesitan entrada en paths.txt.

Solución de problemas

  • [SKIP] ruta - no existe: normal si esa configuración no está instalada en esta máquina; cree la ruta o ajuste paths.txt.
  • export-system.ps1 falló: verifique el error específico. Si es drivers, necesita ejecutar como administrador. Si es Scoop/WinGet, verifique que estén instalados y en PATH.
  • El push falla por autenticación: verifique su token/PAT o llave SSH (git credential-manager, gh auth login).
  • fatal: this operation must be run in a work tree: opere siempre con --git-dir y --work-tree (los scripts ya lo hacen internamente).
  • Cambiar el remote: git --git-dir=".\dotfiles.git" remote set-url origin <url>.
  • Restore deshizo cambios locales: el historial sigue en Git; recupere versiones anteriores con git --git-dir=".\dotfiles.git" log y git --git-dir=".\dotfiles.git" checkout <commit> -- <ruta>.
  • Restore creó un commit inesperado: es normal — restore.ps1 guarda los cambios locales pendientes antes de sobrescribir. Puede descartarlo con git --git-dir=".\dotfiles.git" reset HEAD~1.
  • Empezar de cero: elimine dotfiles.git, ajuste paths.txt y vuelva a correr .\setup.ps1.

About

Sistema de respaldo de configuraciones para Windows basado en Git y un repositorio bare: los archivos de configuración se versionan directamente en su ubicación original bajo $HOME mediante GIT_DIR y GIT_WORK_TREE, sin carpetas intermedias.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages