Compare commits
17
Commits
64bb53eadf
..
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5c353e7287 | ||
|
|
9ad957f4a0 | ||
|
|
2c288e1aec | ||
|
|
da076af6ad | ||
|
|
9a9f6d9931 | ||
|
|
923da6d375 | ||
|
|
f86e424491 | ||
|
|
a8b4e3f51d | ||
|
|
226b439684 | ||
|
|
68e30e9feb | ||
|
|
5b33bd26f9 | ||
|
|
7a8693de8a | ||
|
|
df9cf52acf | ||
|
|
4f2c3e937b | ||
|
|
56c924d0a6 | ||
|
|
1994f7b030 | ||
|
|
56742247ce |
Regular → Executable
+44
-22
@@ -74,27 +74,24 @@ 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..."
|
||||
enable_services() {
|
||||
systemctl enable sddm
|
||||
systemctl enable NetworkManager
|
||||
systemctl enable bluetooth
|
||||
@@ -102,26 +99,51 @@ 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"
|
||||
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."
|
||||
|
||||
@@ -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
@@ -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 \
|
||||
|
||||
Reference in New Issue
Block a user