#!/usr/bin/env bash # Captura la configuración de VSCodium (instalación nativa, ~/.config/VSCodium): # settings, keybindings, snippets, perfiles, la lista de extensiones y el # estado de los workspaces (mapeo carpeta↔workspace + estado de UI). # Excluye la caché regenerable de las extensiones (p. ej. redhat.java/jdt_ws). set -euo pipefail stpRoot="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" source "$stpRoot/lib/log.sh" source "$stpRoot/lib/utils.sh" readonly vscodiumConfigDirectory="$HOME/.config/VSCodium" readonly vscodiumUserDirectory="$vscodiumConfigDirectory/User" readonly outputFile="$stpRoot/secrets/vscodiumConfig.zip" vscodiumDataExists() { [[ -d "$vscodiumUserDirectory" ]] } listConfigFiles() { local configFile for configFile in settings.json keybindings.json tasks.json argv.json; do [[ -f "User/$configFile" ]] && echo "User/$configFile" done find "User/snippets" "User/profiles" -type f 2>/dev/null # De cada workspace solo interesa el mapeo a la carpeta y el estado de UI; # el resto son cachés de extensiones que se regeneran solas. find "User/workspaceStorage" -type f \ \( -name workspace.json -o -name 'state.vscdb' -o -name 'state.vscdb.backup' \) 2>/dev/null # Estado global: lista de workspaces recientes y asociaciones de perfil. find "User/globalStorage" -maxdepth 1 -type f \ \( -name 'state.vscdb' -o -name 'storage.json' \) 2>/dev/null } if ! vscodiumDataExists; then log::warn "Datos de VSCodium no encontrados en: $vscodiumUserDirectory" log::info "Asegurate de haber abierto VSCodium al menos una vez antes de capturar" exit 0 fi log::step "Capturando configuración de VSCodium" mkdir -p "$stpRoot/secrets" rm -f "$outputFile" ( cd "$vscodiumConfigDirectory" listConfigFiles | zip -q "$outputFile" -@ ) if util::cmdExists codium; then workingDirectory="$(mktemp -d)" trap 'rm -rf "$workingDirectory"' EXIT codium --list-extensions > "$workingDirectory/extensions.txt" # -j descarta la ruta: el archivo queda como extensions.txt en la raíz del zip. zip -qj "$outputFile" "$workingDirectory/extensions.txt" log::ok "Lista de extensiones incluida en el respaldo ($(wc -l < "$workingDirectory/extensions.txt") extensiones)" else log::warn "Comando 'codium' no disponible: no se guardó la lista de extensiones" fi log::ok "Guardado: secrets/vscodiumConfig.zip ($(du -sh "$outputFile" | cut -f1))" log::info "Commiteá secrets/vscodiumConfig.zip antes de hacer push"