bd78fd9fbe
Modulos de restauracion: - bootstrap: instala yq, age y dependencias base (curl, wget, git, nano, gpg) - ssh: descifra e instala claves SSH desde secrets/sshKeys.tar.gz.age - registry: aplica paquetes apt/snap/flatpak, dotfiles, servicios y configs Docker - thunderbird: instala Thunderbird snap y restaura perfil desde ZIP - claudeCode: configura repositorio apt de Anthropic e instala claude-code - easyEffects: restaura configuracion y presets desde ZIP - wireplumber: restaura dispositivo Bluetooth por defecto y perfiles de audio - cups: restaura impresoras y drivers PPD desde ZIP Scripts de captura (correr antes de push): - scripts/encryptSsh.sh: cifra ~/.ssh con age - scripts/thunderbird/capture.sh: captura perfil de Thunderbird snap - scripts/easyEffects/capture.sh: captura config de EasyEffects flatpak - scripts/wireplumber/capture.sh: captura estado de WirePlumber - scripts/cups/capture.sh: captura impresoras CUPS y PPDs (requiere sudo) Registro de aplicaciones (config/registry.yaml): - 9 paquetes apt, 1 snap (dbeaver-ce), 22 flatpaks incluyendo VSCodium, Bitwarden, Inkscape, LibreOffice, OBS Studio, Nextcloud Desktop, entre otros Secretos incluidos: - secrets/sshKeys.tar.gz.age: claves SSH cifradas con age - secrets/thunderbirdProfile.zip: perfil de Thunderbird sin emails ni cache - secrets/easyEffectsConfig.zip: ajustes y presets de salida de audio - secrets/wireplumberState.zip: estado de audio incluyendo auriculares Bluetooth - secrets/cupsConfig.zip: 5 impresoras configuradas con sus drivers Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
112 lines
2.7 KiB
Bash
Executable File
112 lines
2.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
stpRoot="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
export stpRoot
|
|
|
|
source "$stpRoot/lib/log.sh"
|
|
source "$stpRoot/lib/utils.sh"
|
|
|
|
export verbose="${verbose:-false}"
|
|
|
|
selectedModule=""
|
|
skipModules=()
|
|
|
|
readModuleOrder() {
|
|
grep -v '^\s*#' "$stpRoot/config/modules" | grep -v '^\s*$'
|
|
}
|
|
|
|
usage() {
|
|
cat <<EOF
|
|
Uso: stp.sh [opciones]
|
|
|
|
Opciones:
|
|
-m, --module <nombre> Ejecutar solo este módulo (ej: packages)
|
|
-s, --skip <nombre> Saltear módulo, puede repetirse
|
|
-v, --verbose Salida detallada
|
|
-l, --list Listar módulos en orden de ejecución
|
|
-h, --help Mostrar esta ayuda
|
|
|
|
Ejemplos:
|
|
stp.sh # Ejecutar todos los módulos
|
|
stp.sh -m packages # Solo instalar paquetes
|
|
stp.sh -s video -s audio # Saltear video y audio
|
|
EOF
|
|
}
|
|
|
|
listModules() {
|
|
echo "Módulos (en orden de ejecución):"
|
|
while IFS= read -r name; do
|
|
local modulePath="$stpRoot/modules/${name}.sh"
|
|
if [[ -f "$modulePath" ]]; then
|
|
printf " %s\n" "$name"
|
|
else
|
|
printf " %s (⚠ no encontrado: modules/%s.sh)\n" "$name" "$name"
|
|
fi
|
|
done < <(readModuleOrder)
|
|
}
|
|
|
|
shouldSkip() {
|
|
local moduleName="$1"
|
|
for skip in "${skipModules[@]:-}"; do
|
|
[[ "$moduleName" == "$skip" ]] && return 0
|
|
done
|
|
return 1
|
|
}
|
|
|
|
runModule() {
|
|
local moduleName="$1"
|
|
local modulePath="$stpRoot/modules/${moduleName}.sh"
|
|
|
|
if [[ ! -f "$modulePath" ]]; then
|
|
log::error "Módulo no encontrado: modules/${moduleName}.sh"
|
|
return 1
|
|
fi
|
|
|
|
if shouldSkip "$moduleName"; then
|
|
log::warn "Salteando: $moduleName"
|
|
return 0
|
|
fi
|
|
|
|
log::step "$moduleName"
|
|
if ! bash "$modulePath"; then
|
|
log::error "Falló el módulo: $moduleName (ver $stpLogFile)"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
while [[ $# -gt 0 ]]; do
|
|
case "$1" in
|
|
-m|--module) selectedModule="$2"; shift 2 ;;
|
|
-s|--skip) skipModules+=("$2"); shift 2 ;;
|
|
-v|--verbose) verbose=true; shift ;;
|
|
-l|--list) listModules; exit 0 ;;
|
|
-h|--help) usage; exit 0 ;;
|
|
*) log::error "Opción desconocida: $1"; usage; exit 1 ;;
|
|
esac
|
|
done
|
|
|
|
printf '\n'
|
|
log::step "Sistema de Transferencia Personal"
|
|
log::info "Log: $stpLogFile"
|
|
printf '\n'
|
|
|
|
util::requireSudo
|
|
|
|
if [[ -n "$selectedModule" ]]; then
|
|
if [[ ! -f "$stpRoot/modules/${selectedModule}.sh" ]]; then
|
|
log::error "Módulo no encontrado: $selectedModule"
|
|
listModules
|
|
exit 1
|
|
fi
|
|
runModule "$selectedModule"
|
|
else
|
|
while IFS= read -r moduleName; do
|
|
runModule "$moduleName"
|
|
printf '\n'
|
|
done < <(readModuleOrder)
|
|
fi
|
|
|
|
printf '\n'
|
|
log::ok "STP completado. Log completo en: $stpLogFile"
|