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>
This commit is contained in:
@@ -0,0 +1,111 @@
|
||||
#!/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"
|
||||
Reference in New Issue
Block a user