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
+53
-31
@@ -74,54 +74,76 @@ install_pacman "${PACMAN_COMMON[@]}" \
|
|||||||
echo ">> Bootloader (GRUB)..."
|
echo ">> Bootloader (GRUB)..."
|
||||||
install_bootloader
|
install_bootloader
|
||||||
|
|
||||||
echo ">> Configurando rollback de actualizaciones (snapper)..."
|
|
||||||
configure_btrfs_rollback
|
|
||||||
|
|
||||||
echo ">> Bootstrapeando paru y paquetes AUR..."
|
echo ">> Bootstrapeando paru y paquetes AUR..."
|
||||||
bootstrap_paru
|
bootstrap_paru
|
||||||
# Solo plasmoides que EXISTEN en AUR. Los de KDE Store/GitHub (gnome-pager, kMenu,
|
# Solo plasmoides que EXISTEN en AUR. Los de KDE Store/GitHub (gnome-pager, kMenu,
|
||||||
# kvitals, windowtitlereborn, claudeusageswitcher, tt.launchpadPlasma) NO están en
|
# kvitals, windowtitlereborn, commandoutput, codexbar) NO están en AUR: viajan
|
||||||
# AUR: viajan como dotfiles vía chezmoi (~/.local/share/plasma/plasmoids), capturados
|
# como dotfiles vía chezmoi (~/.local/share/plasma/plasmoids), capturados con
|
||||||
# con shared/capture-kde.sh. No los añadas aquí.
|
# 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[@]}" \
|
install_aur "${AUR_COMMON[@]}" \
|
||||||
plasma6-applets-panel-colorizer kwin-effects-better-blur-dx kwin-effects-glass-git breeze-enhanced \
|
kwin-effects-glass-git tela-icon-theme \
|
||||||
plasma6-themes-layan-git tela-icon-theme layan-cursor-theme-git \
|
|
||||||
plasma6-applets-appgrid plasma6-wallpapers-smart-video-wallpaper-reborn pamac-tray-plasma-git \
|
plasma6-applets-appgrid plasma6-wallpapers-smart-video-wallpaper-reborn pamac-tray-plasma-git \
|
||||||
yin-yang kwin-decoration-sierra-breeze-enhanced-git
|
yin-yang kwin-decoration-sierra-breeze-enhanced-git
|
||||||
install_helpwire
|
run_optional "install_helpwire" install_helpwire
|
||||||
install_claude_code
|
run_optional "install_claude_code" install_claude_code
|
||||||
|
|
||||||
echo ">> Instalando Flatpaks comunes..."
|
run_optional "install_flatpaks" install_flatpaks "${FLATPAK_COMMON[@]}"
|
||||||
install_flatpaks "${FLATPAK_COMMON[@]}"
|
|
||||||
|
|
||||||
echo ">> Servicios..."
|
enable_services() {
|
||||||
systemctl enable sddm
|
systemctl enable sddm
|
||||||
systemctl enable NetworkManager
|
systemctl enable NetworkManager
|
||||||
systemctl enable bluetooth
|
systemctl enable bluetooth
|
||||||
systemctl enable "syncthing@$INSTALL_USER.service"
|
systemctl enable "syncthing@$INSTALL_USER.service"
|
||||||
systemctl enable tailscaled
|
systemctl enable tailscaled
|
||||||
systemctl enable power-profiles-daemon
|
systemctl enable power-profiles-daemon
|
||||||
systemctl enable cpupower
|
systemctl enable cpupower
|
||||||
|
}
|
||||||
|
run_optional "enable_services" enable_services
|
||||||
|
|
||||||
# Tema: Layan (global theme) + iconos Tela + cursores Bibata-Modern-Classic
|
# Tema: look-and-feel propios Vampire-Light/Vampire-dark (ver PROJECT_CONTEXT.md)
|
||||||
# (bibata-cursor-theme-bin en AUR_COMMON), vía AUR (plasma6-themes-layan-git/
|
# + iconos Tela (tela-icon-theme de arriba) + cursores Bibata-Modern-Classic
|
||||||
# tela-icon-theme/layan-cursor-theme-git de arriba, instalan en /usr/share, sin
|
# (bibata-cursor-theme-bin en AUR_COMMON), vía AUR, instalan en /usr/share, sin
|
||||||
# copiar binarios en dotfiles; layan-cursor-theme-git se deja instalado como
|
# copiar binarios en dotfiles. El resto de la personalización (rc files,
|
||||||
# alternativa aunque el cursor activo sea Bibata). El resto de la
|
# layout de paneles, splash Animated-Abstract-Cube, los propios paquetes
|
||||||
# personalización (rc files, layout de paneles, splash Animated-Abstract-Cube)
|
# look-and-feel Vampire-*) se captura del portátil con shared/capture-kde.sh
|
||||||
# se captura del portátil con shared/capture-kde.sh y se replica vía chezmoi.
|
# y se replica vía chezmoi. Single-monitor como base.
|
||||||
# Single-monitor como base.
|
|
||||||
|
|
||||||
# --- chezmoi: dotfiles personales (repo arch-configs) --------------------------
|
# --- chezmoi: dotfiles personales (repo arch-configs) --------------------------
|
||||||
# chezmoi ya se instaló arriba (PACMAN_COMMON, repos oficiales desde 2.x).
|
# chezmoi ya se instaló arriba (PACMAN_COMMON, repos oficiales desde 2.x).
|
||||||
echo ">> chezmoi init --apply (repo arch-configs)..."
|
echo ">> chezmoi init --apply (repo arch-configs)..."
|
||||||
REMOTE="$GITEA/arch-configs.git"
|
REMOTE="$GITEA/arch-configs.git"
|
||||||
[[ -n "${GITEA_TOKEN:-}" ]] && REMOTE="https://$INSTALL_USER:$GITEA_TOKEN@gitea.josevi.ovh/josevi/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() {
|
||||||
chezmoi init --apply '$REMOTE'"
|
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) -----------------
|
# --- 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
|
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."
|
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.
|
# borra en el primer push que vuelve a tener éxito.
|
||||||
FAIL_MARKER="$HOME/.local/share/pkgsync.failed"
|
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
|
# 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
|
# install_flatpaks() en packages-common.sh. Si tu máquina usa --user, cambia
|
||||||
# esto (o verifica con: flatpak list --columns=installation,application).
|
# esto (o verifica con: flatpak list --columns=installation,application).
|
||||||
@@ -235,6 +241,22 @@ notify_fail() {
|
|||||||
echo "!! $1: $2" >&2
|
echo "!! $1: $2" >&2
|
||||||
printf '%s -- %s: %s\n' "$(date -Iseconds)" "$1" "$2" >"$FAIL_MARKER"
|
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"
|
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 --------------------------------------------------------------
|
# --- subcomandos --------------------------------------------------------------
|
||||||
@@ -284,6 +306,19 @@ EOF
|
|||||||
echo ">> scaffold de $OVERRIDES_FILE creado (vacío, edítalo a mano)"
|
echo ">> scaffold de $OVERRIDES_FILE creado (vacío, edítalo a mano)"
|
||||||
fi
|
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
|
if [[ ! -d "$REPO_DIR/.git" ]]; then
|
||||||
echo ">> clonando arch-setup en $REPO_DIR..."
|
echo ">> clonando arch-setup en $REPO_DIR..."
|
||||||
git clone "$REPO_URL" "$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
|
# sync de dotfiles (repo arch-configs) -- en repos oficiales desde 2.x
|
||||||
chezmoi
|
chezmoi
|
||||||
# apps de escritorio que SÍ están en extra
|
# 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)
|
# diccionarios (corrector ortográfico en apps GTK/Qt)
|
||||||
hunspell-en_us hunspell-es_es
|
hunspell-en_us hunspell-es_es
|
||||||
# fuentes / iconos compartidos
|
# fuentes / iconos compartidos
|
||||||
ttf-jetbrains-mono-nerd ttf-firacode-nerd noto-fonts noto-fonts-emoji
|
ttf-jetbrains-mono-nerd ttf-firacode-nerd noto-fonts noto-fonts-emoji
|
||||||
papirus-icon-theme
|
|
||||||
# red / utilidades base
|
# red / utilidades base
|
||||||
networkmanager flatpak openssh networkmanager-openvpn openvpn tailscale wpa_supplicant
|
networkmanager flatpak openssh networkmanager-openvpn openvpn tailscale wpa_supplicant
|
||||||
# audio (PipeWire reemplaza a PulseAudio)
|
# audio (PipeWire reemplaza a PulseAudio)
|
||||||
@@ -57,6 +56,10 @@ PACMAN_COMMON=(
|
|||||||
android-tools
|
android-tools
|
||||||
lzip
|
lzip
|
||||||
waydroid
|
waydroid
|
||||||
|
glab
|
||||||
|
opencode
|
||||||
|
sshfs
|
||||||
|
isoimagewriter
|
||||||
)
|
)
|
||||||
|
|
||||||
# --- Flatpak ---------------------------------------------------------------
|
# --- Flatpak ---------------------------------------------------------------
|
||||||
@@ -76,28 +79,38 @@ FLATPAK_COMMON=(
|
|||||||
# con el instalador nativo oficial, función install_claude_code() más abajo.
|
# con el instalador nativo oficial, función install_claude_code() más abajo.
|
||||||
AUR_COMMON=(
|
AUR_COMMON=(
|
||||||
zen-browser-bin
|
zen-browser-bin
|
||||||
visual-studio-code-bin
|
|
||||||
vscodium-bin
|
vscodium-bin
|
||||||
betterbird-bin
|
betterbird-bin
|
||||||
onlyoffice-bin
|
onlyoffice-bin
|
||||||
spotify
|
|
||||||
ungoogled-chromium-bin
|
ungoogled-chromium-bin
|
||||||
ventoy-bin
|
ventoy-bin
|
||||||
woeusb-ng
|
woeusb-ng
|
||||||
bibata-cursor-theme-bin
|
bibata-cursor-theme-bin
|
||||||
googledot-cursor-theme
|
|
||||||
pamac-all
|
pamac-all
|
||||||
yay
|
yay
|
||||||
# herramientas adicionales presentes en la máquina maestra
|
# 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
|
codexbar-cli
|
||||||
metapac
|
metapac
|
||||||
paru
|
paru
|
||||||
tauri-cli
|
spotifast-bin
|
||||||
android-sdk-platform-tools
|
|
||||||
)
|
)
|
||||||
|
|
||||||
# --- helpers usados por los setup.sh --------------------------------------
|
# --- 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 "$@"; }
|
install_pacman() { pacman -S --needed --noconfirm "$@"; }
|
||||||
|
|
||||||
# paru se construye como usuario normal (makepkg no corre como root).
|
# 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.
|
# Crear configuración de snapper para / si no existe.
|
||||||
if [[ ! -f /etc/snapper/configs/root ]]; then
|
if [[ ! -f /etc/snapper/configs/root ]]; then
|
||||||
snapper -c root create-config /
|
snapper --no-dbus -c root create-config /
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Solo queremos snapshots automáticos de pacman (snap-pac), no por tiempo.
|
# 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
|
# los permisos de fichero de /.snapshots -- sin esto, "snapper -c root
|
||||||
# list" da "Sin permisos" para cualquiera que no sea root, aunque el chmod
|
# list" da "Sin permisos" para cualquiera que no sea root, aunque el chmod
|
||||||
# de abajo esté bien (visto en real en Vampire-HM80).
|
# 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_CREATE=no \
|
||||||
TIMELINE_LIMIT_HOURLY=0 \
|
TIMELINE_LIMIT_HOURLY=0 \
|
||||||
TIMELINE_LIMIT_DAILY=0 \
|
TIMELINE_LIMIT_DAILY=0 \
|
||||||
|
|||||||
Reference in New Issue
Block a user