Files
msaldain bd78fd9fbe Configuracion inicial completa del entorno personal
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>
2026-06-20 18:16:40 -03:00

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"