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>
83 lines
2.2 KiB
Bash
Executable File
83 lines
2.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
source "$stpRoot/lib/log.sh"
|
|
source "$stpRoot/lib/utils.sh"
|
|
|
|
latestGithubReleaseTag() {
|
|
local repository="$1"
|
|
curl -fsSL "https://api.github.com/repos/${repository}/releases/latest" \
|
|
| grep '"tag_name"' \
|
|
| cut -d'"' -f4
|
|
}
|
|
|
|
ensureBasePackagesAreInstalled() {
|
|
local requiredPackages=(curl wget git nano gpg ca-certificates)
|
|
local missingPackages=()
|
|
|
|
for packageName in "${requiredPackages[@]}"; do
|
|
util::isAptInstalled "$packageName" || missingPackages+=("$packageName")
|
|
done
|
|
|
|
if [[ ${#missingPackages[@]} -gt 0 ]]; then
|
|
util::aptUpdateOnce
|
|
sudo apt-get install -y "${missingPackages[@]}"
|
|
fi
|
|
}
|
|
|
|
installYqFromGithub() {
|
|
local version
|
|
version="$(latestGithubReleaseTag "mikefarah/yq")"
|
|
sudo wget -qO /usr/local/bin/yq \
|
|
"https://github.com/mikefarah/yq/releases/download/${version}/yq_linux_amd64"
|
|
sudo chmod +x /usr/local/bin/yq
|
|
log::ok "yq ${version} instalado"
|
|
}
|
|
|
|
ensureYqIsInstalled() {
|
|
if util::cmdExists yq; then
|
|
log::info "yq ya disponible: $(yq --version 2>&1 | head -1)"
|
|
return
|
|
fi
|
|
log::info "Instalando yq..."
|
|
installYqFromGithub
|
|
}
|
|
|
|
ageIsAvailableInApt() {
|
|
apt-cache show age &>/dev/null 2>&1
|
|
}
|
|
|
|
installAgeFromApt() {
|
|
sudo apt-get install -y age
|
|
}
|
|
|
|
installAgeFromGithub() {
|
|
local version
|
|
version="$(latestGithubReleaseTag "FiloSottile/age")"
|
|
local temporaryDirectory
|
|
temporaryDirectory="$(mktemp -d)"
|
|
trap 'rm -rf "$temporaryDirectory"' RETURN
|
|
curl -fsSL \
|
|
"https://github.com/FiloSottile/age/releases/download/${version}/age-${version}-linux-amd64.tar.gz" \
|
|
| tar -xz -C "$temporaryDirectory"
|
|
sudo mv "$temporaryDirectory/age/age" "$temporaryDirectory/age/age-keygen" /usr/local/bin/
|
|
}
|
|
|
|
ensureAgeIsInstalled() {
|
|
if util::cmdExists age; then
|
|
log::info "age ya disponible: $(age --version 2>&1)"
|
|
return
|
|
fi
|
|
log::info "Instalando age..."
|
|
if ageIsAvailableInApt; then
|
|
installAgeFromApt
|
|
else
|
|
installAgeFromGithub
|
|
fi
|
|
log::ok "age instalado"
|
|
}
|
|
|
|
log::info "Verificando dependencias base"
|
|
ensureBasePackagesAreInstalled
|
|
ensureYqIsInstalled
|
|
ensureAgeIsInstalled
|