Compare commits

..
17 Commits
Author SHA1 Message Date
Josevi 5c353e7287 pkgsync: actualiza inventario de paquetes 2026-09-21 09:14 2026-09-21 09:14:36 +02:00
Josevi 9ad957f4a0 pkgsync: actualiza inventario de paquetes 2026-09-20 23:28 2026-09-21 09:10:42 +02:00
JoseviandClaude Sonnet 5 2c288e1aec kde/setup.sh: actualiza comentario de plasmoides vía chezmoi
claudeusageswitcher y tt.launchpadPlasma ya no están en ningún panel
real (auditoría de plasmoides instalados vs. usados) y se quitaron del
tracking de chezmoi en arch-configs. commandoutput y codexbar sí están
en uso pero no viajaban -- añadidos al tracking. Refleja ambos cambios
aquí para que el comentario no mienta sobre qué plasmoides trae chezmoi.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-20 23:16:04 +02:00
JoseviandClaude Sonnet 5 da076af6ad kde/setup.sh, packages-common.sh: quita temas/efectos gráficos sin usar
Auditado contra los look-and-feel Vampire-Light/Vampire-dark (fuente de
verdad real: ~/.local/share/plasma/look-and-feel/*/contents/defaults)
y el kwinrc en vivo. Desinstalado de la máquina real y quitado de los
arrays: plasma6-themes-layan-git, layan-cursor-theme-git,
googledot-cursor-theme, breeze-enhanced, papirus-icon-theme,
kwin-effect-rounded-corners-git, plasma6-applets-panel-colorizer,
kwin-effects-better-blur-dx, klassy. Ninguno aparecía en los defaults
de los temas Vampire-* ni en kwinrc (icono real es Tela/Tela-dark,
cursor Bibata-Modern-Classic, decoración sierrabreezeenhanced).
kwin-effects-glass-git SÍ se queda (glassEnabled=true en kwinrc).

De paso, corregido kdeglobals[KDE]DefaultDarkLookAndFeel de la
referencia colgante a Layan (ya desinstalado) a Vampire-dark.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-20 23:13:02 +02:00
JoseviandClaude Sonnet 5 9a9f6d9931 packages-common.sh: migra fastpotify-bin a spotifast-bin (renombrado upstream)
fastpotify-bin avisaba en su propia descripción "Renamed to
spotifast-bin"; desinstalado y sustituido por el paquete AUR con el
nombre nuevo en la máquina real.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-20 23:06:32 +02:00
JoseviandClaude Sonnet 5 923da6d375 packages-common.sh: quita tauri-cli (sin ningún proyecto Tauri en la máquina)
Desinstalado del sistema real junto con ~30 dependencias huérfanas
acumuladas (pacman -Qdtq); tauri-cli quedó de una prueba puntual del
31-ago-2026 y nada lo usaba.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-20 23:05:18 +02:00
JoseviandClaude Sonnet 5 f86e424491 kde/setup.sh: pasos no críticos no abortan la instalación completa
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-20 23:01:17 +02:00
JoseviandClaude Sonnet 5 a8b4e3f51d kde/setup.sh: añade bit ejecutable
git ls-files lo tenía como 100644; ./kde/setup.sh (tal como indica el
README) fallaba con "permission denied" en un clon fresco. Detectado
durante una prueba end-to-end en VM.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-20 21:06:35 +02:00
JoseviandClaude Sonnet 5 226b439684 kde/setup.sh: mueve configure_btrfs_rollback() al final
snap-pac crea un snapshot pre+post por cada transacción de pacman/paru en
cuanto existe /etc/snapper/configs/root, y dentro de arch-chroot no hay
systemd para que el timer de cleanup aplique NUMBER_LIMIT. Con snapper
configurado antes de las ~30 instalaciones AUR, se acumulan decenas de
snapshots sin poda posible durante toda la instalación (visto en real:
llenó el disco de una VM de prueba). Configurarlo al final evita
snapshotear la propia instalación inicial.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-20 21:06:35 +02:00
JoseviandClaude Sonnet 5 68e30e9feb snapper: fuerza --no-dbus (falla en arch-chroot sin dbus-daemon)
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-20 19:23:41 +02:00
Josevi 5b33bd26f9 pkgsync: actualiza inventario de paquetes 2026-09-20 11:03 2026-09-20 11:03:24 +02:00
Josevi 7a8693de8a pkgsync: actualiza inventario de paquetes 2026-09-19 21:55 2026-09-19 21:55:48 +02:00
Josevi df9cf52acf pkgsync: actualiza inventario de paquetes 2026-09-19 21:26 2026-09-19 21:26:29 +02:00
Josevi 4f2c3e937b pkgsync: actualiza inventario de paquetes 2026-09-19 17:15 2026-09-19 17:15:52 +02:00
Josevi 56c924d0a6 pkgsync: actualiza inventario de paquetes 2026-09-17 18:58 2026-09-17 18:58:48 +02:00
JoseviandClaude Sonnet 5 1994f7b030 pkgsync: añade aviso por Gotify a los fallos, además de notify-send
notify-send depende de la sesión gráfica -- poco fiable justo cuando
push falla en ExecStop durante el apagado (sesión/D-Bus cayéndose).
notify_fail() ahora también hace POST a push.josevi.ovh (mismo Gotify
que ya usa WUD para avisos de actualizaciones), best-effort con
timeout corto, leyendo el token de ~/.config/pkgsync/gotify.env --
fichero local-only, nunca tracked (mismo criterio que
overrides.local.toml), con scaffold comentado en bootstrap.

De paso: durante la verificación se descubrió que notify-send llevaba
tiempo fallando en silencio en esta máquina (applet de Notifications
ausente de shownItems/extraItems en el systray) -- arreglado aparte,
no es parte de este commit.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-17 18:58:37 +02:00
Josevi 56742247ce pkgsync: actualiza inventario de paquetes 2026-09-17 18:49 2026-09-17 18:49:34 +02:00
3 changed files with 111 additions and 41 deletions
Regular → Executable
+53 -31
View File
@@ -74,54 +74,76 @@ install_pacman "${PACMAN_COMMON[@]}" \
echo ">> Bootloader (GRUB)..."
install_bootloader
echo ">> Configurando rollback de actualizaciones (snapper)..."
configure_btrfs_rollback
echo ">> Bootstrapeando paru y paquetes AUR..."
bootstrap_paru
# Solo plasmoides que EXISTEN en AUR. Los de KDE Store/GitHub (gnome-pager, kMenu,
# kvitals, windowtitlereborn, claudeusageswitcher, tt.launchpadPlasma) NO están en
# AUR: viajan como dotfiles vía chezmoi (~/.local/share/plasma/plasmoids), capturados
# con shared/capture-kde.sh. No los añadas aquí.
# kvitals, windowtitlereborn, commandoutput, codexbar) NO están en AUR: viajan
# como dotfiles vía chezmoi (~/.local/share/plasma/plasmoids), capturados con
# shared/capture-kde.sh. No los añadas aquí. (claudeusageswitcher y
# tt.launchpadPlasma viajaron así hasta que se quitaron por no usarse en
# ningún panel real -- auditoría 2026-09-20.)
install_aur "${AUR_COMMON[@]}" \
plasma6-applets-panel-colorizer kwin-effects-better-blur-dx kwin-effects-glass-git breeze-enhanced \
plasma6-themes-layan-git tela-icon-theme layan-cursor-theme-git \
kwin-effects-glass-git tela-icon-theme \
plasma6-applets-appgrid plasma6-wallpapers-smart-video-wallpaper-reborn pamac-tray-plasma-git \
yin-yang kwin-decoration-sierra-breeze-enhanced-git
install_helpwire
install_claude_code
run_optional "install_helpwire" install_helpwire
run_optional "install_claude_code" install_claude_code
echo ">> Instalando Flatpaks comunes..."
install_flatpaks "${FLATPAK_COMMON[@]}"
run_optional "install_flatpaks" install_flatpaks "${FLATPAK_COMMON[@]}"
echo ">> Servicios..."
systemctl enable sddm
systemctl enable NetworkManager
systemctl enable bluetooth
systemctl enable "syncthing@$INSTALL_USER.service"
systemctl enable tailscaled
systemctl enable power-profiles-daemon
systemctl enable cpupower
enable_services() {
systemctl enable sddm
systemctl enable NetworkManager
systemctl enable bluetooth
systemctl enable "syncthing@$INSTALL_USER.service"
systemctl enable tailscaled
systemctl enable power-profiles-daemon
systemctl enable cpupower
}
run_optional "enable_services" enable_services
# Tema: Layan (global theme) + iconos Tela + cursores Bibata-Modern-Classic
# (bibata-cursor-theme-bin en AUR_COMMON), vía AUR (plasma6-themes-layan-git/
# tela-icon-theme/layan-cursor-theme-git de arriba, instalan en /usr/share, sin
# copiar binarios en dotfiles; layan-cursor-theme-git se deja instalado como
# alternativa aunque el cursor activo sea Bibata). El resto de la
# personalización (rc files, layout de paneles, splash Animated-Abstract-Cube)
# se captura del portátil con shared/capture-kde.sh y se replica vía chezmoi.
# Single-monitor como base.
# Tema: look-and-feel propios Vampire-Light/Vampire-dark (ver PROJECT_CONTEXT.md)
# + iconos Tela (tela-icon-theme de arriba) + cursores Bibata-Modern-Classic
# (bibata-cursor-theme-bin en AUR_COMMON), vía AUR, instalan en /usr/share, sin
# copiar binarios en dotfiles. El resto de la personalización (rc files,
# layout de paneles, splash Animated-Abstract-Cube, los propios paquetes
# look-and-feel Vampire-*) se captura del portátil con shared/capture-kde.sh
# y se replica vía chezmoi. Single-monitor como base.
# --- chezmoi: dotfiles personales (repo arch-configs) --------------------------
# chezmoi ya se instaló arriba (PACMAN_COMMON, repos oficiales desde 2.x).
echo ">> chezmoi init --apply (repo arch-configs)..."
REMOTE="$GITEA/arch-configs.git"
[[ -n "${GITEA_TOKEN:-}" ]] && REMOTE="https://$INSTALL_USER:$GITEA_TOKEN@gitea.josevi.ovh/josevi/arch-configs.git"
as_user "export GIT_NAME='$GIT_NAME' GIT_EMAIL='$GIT_EMAIL'; \
chezmoi init --apply '$REMOTE'"
chezmoi_init_apply() {
as_user "export GIT_NAME='$GIT_NAME' GIT_EMAIL='$GIT_EMAIL'; \
chezmoi init --apply '$REMOTE'"
}
run_optional "chezmoi init --apply" chezmoi_init_apply
# --- pkgsync: sincronización de paquetes (repo arch-setup) -----------------
install_pkgsync
run_optional "install_pkgsync" install_pkgsync
# Snapper AL FINAL, no tras install_bootloader: snap-pac crea un snapshot
# pre+post por cada transacción de pacman/paru en cuanto existe el config de
# snapper, y dentro del chroot no hay systemd corriendo para que el timer de
# cleanup limite NUMBER_LIMIT -- ninguna limpieza puede correr hasta el primer
# arranque real. Con snapper configurado antes de las ~30 instalaciones AUR
# (cada una su propia transacción), se acumulan decenas de snapshots sin poda
# posible; en una VM de prueba con disco pequeño esto llenó el disco entero
# (visto en real). Configurándolo al final, ya con el sistema instalado, no se
# snapshotea la propia instalación -- el primer snapshot legítimo será el de
# un 'pacman -Syu' real ya con el sistema arrancado, que es para lo que existe
# el rollback.
echo ">> Configurando rollback de actualizaciones (snapper)..."
run_optional "configure_btrfs_rollback" configure_btrfs_rollback
rm -f /etc/sudoers.d/99-setup-nopasswd
if ((${#FAILED_STEPS[@]})); then
echo
echo "⚠️ Instalación completada con avisos. Pasos que fallaron y necesitan revisión manual:"
printf ' - %s\n' "${FAILED_STEPS[@]}"
fi
echo ">> Configuración de KDE completada."
+35
View File
@@ -29,6 +29,12 @@ OVERRIDES_FILE="$METAPAC_CONFIG_DIR/groups/overrides.local.toml"
# borra en el primer push que vuelve a tener éxito.
FAIL_MARKER="$HOME/.local/share/pkgsync.failed"
# Token de Gotify (push.josevi.ovh, mismo servidor que usa WUD) para avisos
# de fallo -- llega también sin sesión gráfica, a diferencia de notify-send.
# Fichero local-only, nunca tracked (ni chezmoi ni el repo arch-setup):
# mismo criterio que OVERRIDES_FILE. Si no existe, se omite sin más.
GOTIFY_ENV="$HOME/.config/pkgsync/gotify.env"
# flatpak sin --user/--system instala en "system" con la config actual de
# install_flatpaks() en packages-common.sh. Si tu máquina usa --user, cambia
# esto (o verifica con: flatpak list --columns=installation,application).
@@ -235,6 +241,22 @@ notify_fail() {
echo "!! $1: $2" >&2
printf '%s -- %s: %s\n' "$(date -Iseconds)" "$1" "$2" >"$FAIL_MARKER"
command -v notify-send &>/dev/null && timeout 5 notify-send --app-name=pkgsync --urgency=critical "$1" "$2"
notify_gotify "$1" "$2"
}
# Best-effort, nunca bloquea ni hace fallar el caller: mismo espíritu que el
# timeout de notify-send de arriba, pero via HTTPS -- llega aunque D-Bus/la
# sesión gráfica ya esté cayéndose (caso ExecStop en apagado) o no haya
# sesión gráfica en absoluto.
notify_gotify() {
[[ -f "$GOTIFY_ENV" ]] || return 0
local GOTIFY_URL GOTIFY_TOKEN
# shellcheck disable=SC1090
source "$GOTIFY_ENV"
[[ -n "${GOTIFY_URL:-}" && -n "${GOTIFY_TOKEN:-}" ]] || return 0
timeout 10 curl -fsS --max-time 8 \
-F "title=$1" -F "message=$2" -F "priority=8" \
"${GOTIFY_URL%/}/message?token=${GOTIFY_TOKEN}" >/dev/null 2>&1
}
# --- subcomandos --------------------------------------------------------------
@@ -284,6 +306,19 @@ EOF
echo ">> scaffold de $OVERRIDES_FILE creado (vacío, edítalo a mano)"
fi
if [[ ! -f "$GOTIFY_ENV" ]]; then
mkdir -p "$(dirname "$GOTIFY_ENV")"
cat >"$GOTIFY_ENV" <<'EOF'
# Token de aplicación Gotify para los avisos de fallo de pkgsync (push.josevi.ovh).
# Crea una Application nueva en la UI de Gotify y pega su token aquí.
# Fichero local-only: pkgsync nunca lo lee/escribe salvo aquí, no viaja al repo.
#GOTIFY_URL="https://push.josevi.ovh"
#GOTIFY_TOKEN="pon-aqui-el-token"
EOF
chmod 600 "$GOTIFY_ENV"
echo ">> scaffold de $GOTIFY_ENV creado (comentado, edítalo a mano para activar avisos por Gotify)"
fi
if [[ ! -d "$REPO_DIR/.git" ]]; then
echo ">> clonando arch-setup en $REPO_DIR..."
git clone "$REPO_URL" "$REPO_DIR"
+23 -10
View File
@@ -15,12 +15,11 @@ PACMAN_COMMON=(
# sync de dotfiles (repo arch-configs) -- en repos oficiales desde 2.x
chezmoi
# apps de escritorio que SÍ están en extra
bitwarden dbeaver gimp syncthing remmina freerdp apostrophe guvcview kvirc vlc vlc-plugin-ffmpeg
bitwarden dbeaver gimp syncthing remmina freerdp apostrophe guvcview vlc vlc-plugin-ffmpeg
# diccionarios (corrector ortográfico en apps GTK/Qt)
hunspell-en_us hunspell-es_es
# fuentes / iconos compartidos
ttf-jetbrains-mono-nerd ttf-firacode-nerd noto-fonts noto-fonts-emoji
papirus-icon-theme
# red / utilidades base
networkmanager flatpak openssh networkmanager-openvpn openvpn tailscale wpa_supplicant
# audio (PipeWire reemplaza a PulseAudio)
@@ -57,6 +56,10 @@ PACMAN_COMMON=(
android-tools
lzip
waydroid
glab
opencode
sshfs
isoimagewriter
)
# --- Flatpak ---------------------------------------------------------------
@@ -76,28 +79,38 @@ FLATPAK_COMMON=(
# con el instalador nativo oficial, función install_claude_code() más abajo.
AUR_COMMON=(
zen-browser-bin
visual-studio-code-bin
vscodium-bin
betterbird-bin
onlyoffice-bin
spotify
ungoogled-chromium-bin
ventoy-bin
woeusb-ng
bibata-cursor-theme-bin
googledot-cursor-theme
pamac-all
yay
# herramientas adicionales presentes en la máquina maestra
autofirma debtap gotify-desktop openlogi stably-orca-bin
autofirma debtap gotify-desktop stably-orca-bin
codexbar-cli
metapac
paru
tauri-cli
android-sdk-platform-tools
spotifast-bin
)
# --- helpers usados por los setup.sh --------------------------------------
# Ejecuta un paso NO crítico: si falla, lo registra en FAILED_STEPS y
# CONTINÚA en vez de abortar todo el script (set -e no debe tirar una
# instalación de 1h por un mirror caído o un D-Bus que falta en el chroot).
FAILED_STEPS=()
run_optional() {
local desc="$1"; shift
echo ">> $desc"
if ! "$@"; then
FAILED_STEPS+=("$desc")
echo "!! Falló (no crítico, revisa a mano luego): $desc" >&2
fi
}
install_pacman() { pacman -S --needed --noconfirm "$@"; }
# paru se construye como usuario normal (makepkg no corre como root).
@@ -220,7 +233,7 @@ configure_btrfs_rollback() {
# Crear configuración de snapper para / si no existe.
if [[ ! -f /etc/snapper/configs/root ]]; then
snapper -c root create-config /
snapper --no-dbus -c root create-config /
fi
# Solo queremos snapshots automáticos de pacman (snap-pac), no por tiempo.
@@ -229,7 +242,7 @@ configure_btrfs_rollback() {
# los permisos de fichero de /.snapshots -- sin esto, "snapper -c root
# list" da "Sin permisos" para cualquiera que no sea root, aunque el chmod
# de abajo esté bien (visto en real en Vampire-HM80).
snapper -c root set-config \
snapper --no-dbus -c root set-config \
TIMELINE_CREATE=no \
TIMELINE_LIMIT_HOURLY=0 \
TIMELINE_LIMIT_DAILY=0 \