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:
+28
@@ -0,0 +1,28 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
readonly clrRed='\033[0;31m'
|
||||
readonly clrGreen='\033[0;32m'
|
||||
readonly clrYellow='\033[1;33m'
|
||||
readonly clrBlue='\033[0;34m'
|
||||
readonly clrCyan='\033[0;36m'
|
||||
readonly clrBold='\033[1m'
|
||||
readonly clrReset='\033[0m'
|
||||
|
||||
stpLogFile="${stpLogFile:-/tmp/stp-$(date +%Y%m%d-%H%M%S).log}"
|
||||
export stpLogFile
|
||||
|
||||
log::emit() {
|
||||
local level="$1" color="$2" symbol="$3"
|
||||
shift 3
|
||||
local message="$*"
|
||||
local timestamp
|
||||
timestamp="$(date '+%H:%M:%S')"
|
||||
printf "${color}${symbol}${clrReset} %s\n" "$message"
|
||||
printf "[%s] [%-5s] %s\n" "$timestamp" "$level" "$message" >> "$stpLogFile"
|
||||
}
|
||||
|
||||
log::step() { log::emit "STEP" "${clrBold}${clrBlue}" "==>" "$@"; }
|
||||
log::info() { log::emit "INFO" "${clrCyan}" " -> " "$@"; }
|
||||
log::ok() { log::emit "OK" "${clrGreen}" " ✓ " "$@"; }
|
||||
log::warn() { log::emit "WARN" "${clrYellow}" " ! " "$@"; }
|
||||
log::error() { log::emit "ERROR" "${clrRed}" " ✗ " "$@"; }
|
||||
@@ -0,0 +1,40 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
util::cmdExists() { command -v "$1" &>/dev/null; }
|
||||
util::isAptInstalled() { dpkg -l "$1" 2>/dev/null | grep -q "^ii"; }
|
||||
util::isSnapInstalled() { snap list "$1" &>/dev/null 2>&1; }
|
||||
util::isFlatpakInstalled() { flatpak list --app --columns=application 2>/dev/null | grep -q "^$1$"; }
|
||||
util::isYamlNull() { [[ -z "$1" || "$1" == "null" ]]; }
|
||||
|
||||
util::confirm() {
|
||||
local question="${1:-¿Continuar?} [s/N] "
|
||||
local answer
|
||||
read -rp "$question" answer
|
||||
[[ "${answer,,}" == "s" || "${answer,,}" == "si" || "${answer,,}" == "sí" ]]
|
||||
}
|
||||
|
||||
util::keepSudoAlive() {
|
||||
while true; do
|
||||
sudo -n true
|
||||
sleep 50
|
||||
kill -0 "$$" || exit
|
||||
done 2>/dev/null &
|
||||
}
|
||||
|
||||
util::requireSudo() {
|
||||
[[ "$EUID" -eq 0 ]] && return
|
||||
if ! sudo -n true 2>/dev/null; then
|
||||
log::info "Se requieren permisos de administrador"
|
||||
sudo -v
|
||||
fi
|
||||
util::keepSudoAlive
|
||||
}
|
||||
|
||||
util::aptUpdateOnce() {
|
||||
if [[ "${aptUpdated:-false}" != "true" ]]; then
|
||||
log::info "Actualizando índices de apt..."
|
||||
sudo apt-get update -qq
|
||||
aptUpdated=true
|
||||
export aptUpdated
|
||||
fi
|
||||
}
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
yaml::get() {
|
||||
local file="$1" query="$2"
|
||||
yq "$query" "$file"
|
||||
}
|
||||
|
||||
yaml::getArray() {
|
||||
local file="$1" query="$2"
|
||||
yq -r "${query} | .[]" "$file" 2>/dev/null || true
|
||||
}
|
||||
|
||||
yaml::has() {
|
||||
local file="$1" query="$2"
|
||||
local value
|
||||
value="$(yq "$query" "$file" 2>/dev/null)"
|
||||
[[ -n "$value" && "$value" != "null" ]]
|
||||
}
|
||||
Reference in New Issue
Block a user