El push de pkgsync del 2026-08-27 17:41 (8575c4f) commiteó el fichero
ya vacío en disco (algo lo truncó a 0 bytes fuera de pkgsync entre las
16:10 y las 17:41 de ese día -- causa exacta desconocida), porque
cmd_push() no validaba que el parcheo de arrays hubiera funcionado
antes de commitear. Restaurado desde f3cdc35 (último commit bueno,
mismo día 07:37). El siguiente push recapturará los 3 semanas de
drift real desde entonces.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
En el uso real nunca se ha instalado GNOME en ninguna de las dos máquinas.
Elimina gnome/ entero (archinstall-config.json + setup.sh) y limpia todas
las referencias en README.md, INSTALL.md, packages-common.sh y pkgsync.sh
(comentarios "<de>/setup.sh" genéricos, comparaciones GNOME/KDE, la variable
DE ya inútil en kde/setup.sh). Sigue disponible en el historial de git si
algún día hiciera falta.
El chmod/chown de /.snapshots no basta -- snapper tiene su propia lista de
permitidos (ALLOW_USERS/ALLOW_GROUPS) en la config, independiente de los
permisos de fichero. Sin esto 'snapper -c root list' da 'Sin permisos' para
cualquiera que no sea root. Detectado en real en Vampire-HM80.
Detectado en real en Vampire-HM80: los 3 paquetes de rollback btrfs estaban
declarados e instalados, pero grub-btrfsd moría con exit 1 porque pacman
--needed no arrastra dependencias opcionales. Sin inotify-tools el daemon
nunca regenera el grub.cfg con los snapshots -- toda la red de seguridad de
rollback quedaba muda en silencio.
Nuevo pkgsync/pkgsync.sh + servicios systemd --user (push al cerrar sesión,
pull+diff+notifica al iniciar sesión, sin aplicar cambios solo) usando
metapac como motor de diff/aplicación sobre los arrays de
packages-common.sh. Lista de paquetes críticos protegidos de borrado
automático, fichero de overrides local para divergencias entre máquinas, y
comandos de introspección (diff/log/incoming/audit).
De paso, grub/efibootmgr y los drivers gráficos pasan de estar hardcodeados
en cada <de>/setup.sh a vivir en PACMAN_COMMON, para que pkgsync pueda
declararlos y protegerlos.
- Añade linux-lts como kernel fallback en archinstall (GNOME/KDE).
- Implementa snapper + snap-pac + grub-btrfs para rollback de actualizaciones.
- Configura snapshots solo en operaciones de pacman (timeline deshabilitado).
- Sincroniza PACMAN_COMMON/AUR_COMMON con la máquina maestra.
- Añade FLATPAK_COMMON para Heroic, Karere y Buffer.
- Elimina paquetes no presentes: obsidian, davmail, karere, heroic-games-launcher-bin.
- Añade packagekit-qt6 y kwin-decoration-sierra-breeze-enhanced-git en KDE.
- Actualiza PROJECT_CONTEXT.md con la nueva arquitectura.
- vim, usbutils, gvfs-mtp, chezmoi (ya en repos oficiales, fuera de AUR),
kdegraphics-thumbnailers, breeze-enhanced, yin-yang, heroic-games-launcher-bin.
- Quita discover/packagekit-qt6 de kde/setup.sh: ya no se usan, pamac-all es
el único gestor gráfico.
- claude-code sale de AUR_COMMON (se desincroniza) y pasa a instalador nativo
oficial vía install_claude_code() en shared/packages-common.sh, llamado
desde ambos setup.sh.
- Karere se queda en AUR_COMMON tal cual pese a que en la práctica corre por
Flatpak en esta máquina (el build de AUR es inestable, ver comentario ya
existente en install_aur); Heroic pasa a AUR (tenía alternativa estable).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Se había dejado fuera por contradecir el "AUR-first, resto por paru" de los
comentarios, pero esta máquina es la fuente de verdad: si está instalado y
funcionando aquí, se replica tal cual.
capture-kde.sh no incluia ~/.local/share/plasma/plasmoids, asi que los
widgets de KDE Store/GitHub (no estan en AUR) nunca llegaban al repo de
dotfiles y el panel quedaba con huecos vacios. Anadido a la allowlist +
nota en setup.sh de que van por chezmoi, no por AUR.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
kde/setup.sh instala plasma6-themes-layan-git, tela-icon-theme y
layan-cursor-theme-git (a /usr/share, sin vendorizar binarios). El look
capturado (rc files, splash Animated-Abstract-Cube) ya va por chezmoi
en arch-configs, ver shared/capture-kde.sh. README actualizado: KDE ya
no es Catppuccin+Papirus, diverge de GNOME (Layan+Tela). También
arregla un bug de capture-kde.sh (hostname -> uname -n).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Añade a los scripts lo que llevaba usando semanas sin estar versionado
(kdeconnect, kinfocenter, sddm-kcm, guvcview, kvirc, hunspell es/en,
plasma6-applets-panel-colorizer, kwin-effects-better-blur-dx). Quita
input-remapper-git de AUR_COMMON: decidido no instalarlo por defecto.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
El Plasma curado no incluía la integración de Bluetooth, así que el
módulo en Preferencias del Sistema y el applet de bandeja no aparecían
pese a tener bluez + servicio activos. GNOME no se ve afectado: su UI
llega vía gnome-control-center.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- KDE: discover + packagekit-qt6 (tienda; backend flatpak ya vía flatpak)
- as_user exporta RUSTUP_HOME/CARGO_HOME: paquetes Rust (karere) no intentan
escribir /root/.rustup bajo el fakeroot de makepkg
- install_aur instala uno a uno: un PKGBUILD roto ya no tumba el lote ni chezmoi
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- bluez/bluez-utils + bluetooth.service en GNOME y KDE
- AUR: añade karere (cliente WhatsApp), quita neochat (Matrix) de KDE
- KDE sin personalización: fuera temas Catppuccin/Klassy, SDDM y firstboot-theme
- shared/capture-kde.sh: vuelca config portable + paquetes del portátil para
replicar la base (single-monitor; excluye kscreen hardware-specific)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
parted marca como misaligned las particiones cuyo final no cae en la rejilla
de 1 MiB. En la VM los discos miden GiB exactos y el final encaja; en hardware
real el tamano no es multiplo de MiB (p.ej. 250_059_350_016 B), asi que
terminar en total-1MiB dejaba la particion fuera de rejilla.
usable_end() redondea el final hacia abajo a MiB (se pierden <2 MiB). Aplica a
/ (btrfs) y a /home. Los starts ya estaban en rejilla. Cubre cualquier sector
size. Anade casos al --selftest.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
La regla de "2 discos" contaba el USB instalador (sdb) como segundo disco
y asumia que el sistema era nvme0n1. Un portatil con SSD PCIe enumera como
sda, asi que ni el nombre fijo ni el conteo de discos servian.
Ahora gen-disk-config.py filtra por RM=0 (no removible): el USB y el ISO
quedan fuera. Sistema = 1er disco fijo (nvme primero), /home = 2o si existe.
Override manual con args. Anade --selftest.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Si /dev/sda no existe (portátil de 1 disco), se omite y /home queda
dentro del btrfs raíz. Con dos discos, comportamiento de siempre.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
El .INSTALL que genera debtap tiene un error de sintaxis y no registra el
lanzador, que queda en /opt/HelpWire/Operator/desktop. Lo copiamos a
/usr/share/applications e icons/hicolor para que aparezca en el menú.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
archinstall 4.3 instala el paquete grub y detecta la ESP, pero no ejecuta
grub-install/grub-mkconfig con el esquema /boot ext4 separado + ESP, dejando
el sistema sin bootloader. Nuevo helper install_bootloader() en shared, que
ambos setup.sh llaman tras los paquetes pacman.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- disk_config: archinstall 4.3 cambió el schema (exige sector_size, sin
unidad Percent). Nuevo shared/gen-disk-config.py genera el layout con los
modelos de archinstall, dimensionado al disco real; ambos setup.sh lo
invocan y se quita el disk_config 3.0 muerto de los JSON.
- paru: compilar de fuente, no paru-bin (su binario enlaza contra una
libalpm.so concreta y rompe si la del sistema nuevo difiere).
- rustup default stable antes de compilar paru (si no, no hay cargo).
- helpwire: debtap nombra el paquete 'helpwire', no 'helpwire-operator';
convertir en dir limpio e instalar el único .zst.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>