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:
2026-06-20 18:16:40 -03:00
parent ff401597be
commit bd78fd9fbe
34 changed files with 2348 additions and 2 deletions
+82
View File
@@ -0,0 +1,82 @@
#!/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