#!/usr/bin/env bash set -euo pipefail source "$stpRoot/lib/log.sh" source "$stpRoot/lib/utils.sh" readonly vscodiumKeyring="/etc/apt/keyrings/vscodium.asc" readonly vscodiumSources="/etc/apt/sources.list.d/vscodium.list" readonly vscodiumSourcesEntry="deb [signed-by=${vscodiumKeyring}] https://download.vscodium.com/debs vscodium main" readonly vscodiumConfigDirectory="$HOME/.config/VSCodium" readonly vscodiumUserDirectory="$vscodiumConfigDirectory/User" readonly vscodiumArchive="$stpRoot/secrets/vscodiumConfig.zip" vscodiumIsInstalled() { util::cmdExists codium } repoIsConfigured() { [[ -f "$vscodiumSources" ]] } addSigningKey() { sudo install -m 0755 -d /etc/apt/keyrings sudo install -m 644 "$stpRoot/config/keys/vscodium.asc" "$vscodiumKeyring" log::ok "Clave GPG instalada: $vscodiumKeyring" } addRepository() { echo "$vscodiumSourcesEntry" | sudo tee "$vscodiumSources" > /dev/null sudo apt-get update -qq log::ok "Repositorio configurado: $vscodiumSources" } vscodiumConfigExists() { [[ -f "$vscodiumUserDirectory/settings.json" ]] } restoreUserConfig() { local extractedDirectory="$1" mkdir -p "$vscodiumConfigDirectory" cp -r "$extractedDirectory/User" "$vscodiumConfigDirectory/" log::ok "Configuración restaurada en: $vscodiumUserDirectory" } installExtensions() { local extensionsFile="$1" if [[ ! -f "$extensionsFile" ]]; then log::info "Sin lista de extensiones en el respaldo, salteando" return 0 fi local extensionId installedCount=0 while IFS= read -r extensionId; do [[ -n "$extensionId" ]] || continue if codium --install-extension "$extensionId" &>/dev/null; then log::ok "Extensión instalada: $extensionId" ((++installedCount)) else log::warn "No se pudo instalar: $extensionId" fi done < "$extensionsFile" log::ok "$installedCount extensión(es) instaladas" } if vscodiumIsInstalled; then log::info "VSCodium ya instalado: $(codium --version | head -1)" else log::info "Instalando VSCodium (nativo)..." util::requireSudo if ! repoIsConfigured; then addSigningKey addRepository fi sudo apt-get install -y codium log::ok "Instalado: codium" fi if [[ ! -f "$vscodiumArchive" ]]; then log::info "Sin respaldo de configuración (secrets/vscodiumConfig.zip), salteando restauración" exit 0 fi if vscodiumConfigExists; then log::info "Configuración de VSCodium ya existe, salteando restauración" exit 0 fi log::step "Restaurando configuración de VSCodium" extractedDirectory="$(mktemp -d)" trap 'rm -rf "$extractedDirectory"' EXIT unzip -qo "$vscodiumArchive" -d "$extractedDirectory" restoreUserConfig "$extractedDirectory" installExtensions "$extractedDirectory/extensions.txt"