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 |
- PowerShell 7 o superior
- Git disponible en
PATH - Cuenta de GitHub con acceso por HTTPS (token/PAT) o SSH
setup.ps1— crea el repositorio bare, lo configura, agrega al índice las rutas depaths.txty ofrece configurar el remotedeploy.ps1— exporta listas del sistema a texto, hace commit de solo lo declarado enpaths.txty publica enoriginrestore.ps1— crea un backup de seguridad y restaura las configuraciones locales desde el repo privadoexport-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 porsetup.ps1)
- Clone este repositorio público y entre a la carpeta:
git clone <url-del-repo-publico> cd "backup dotfiles"
- Ejecute el setup (crea el bare, lee
paths.txty ofrece configurar el remote):.\setup.ps1
- Cree en GitHub un repositorio privado llamado
backup-pc-config. - Agregue el remote al bare (si lo omitió en el paso 2):
git --git-dir=".\dotfiles.git" remote add origin <url-del-repo-privado>
- Genere el primer backup y publíquelo:
.\deploy.ps1
- Clone este repositorio público.
- Ejecute
.\setup.ps1(puede dejar vacío el paso del remote). - Agregue el remote apuntando al repositorio privado:
git --git-dir=".\dotfiles.git" remote add origin <url-del-repo-privado>
- Restaure (sobrescribe las configuraciones locales con la versión remota):
.\restore.ps1
Nota:
restore.ps1crea automáticamente un commit de backup antes de sobrescribir. Si algo falla, puede recuperar versiones anteriores congit --git-dir=".\dotfiles.git" log.
deploy.ps1 no usa git add -A. Solo agrega:
- Archivos declarados en
paths.txt(rutas explícitas). - Los exports del sistema generados en
~/.config/system-lists/. - 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.
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.
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) |
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.
[SKIP] ruta - no existe: normal si esa configuración no está instalada en esta máquina; cree la ruta o ajustepaths.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-diry--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" logygit --git-dir=".\dotfiles.git" checkout <commit> -- <ruta>. - Restore creó un commit inesperado: es normal —
restore.ps1guarda los cambios locales pendientes antes de sobrescribir. Puede descartarlo congit --git-dir=".\dotfiles.git" reset HEAD~1. - Empezar de cero: elimine
dotfiles.git, ajustepaths.txty vuelva a correr.\setup.ps1.