App GPUI con app_id carmen.greeter: formulario usuario+contraseña que autentica con brahman-auth en un hilo de fondo y, en éxito, emite un SessionTicket por stdout para que el compositor haga el traspaso a modo sesión. Backend mock (MIRADA_GREETER_MOCK) o PAM. Incluye brahman-auth::SessionTicket (contrato de tiquet greeter→compositor, serializado a una línea con prefijo versionado) y el modo enmascarado de nahual-widget-text-input (TextInput::with_mask para contraseñas). 18 tests nuevos; greeter verificado por compilación + clippy. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
3.5 KiB
Changelog — mirada
Compositor Wayland del monorepo (nombre de proyecto: carmen). Arquitectura
Cerebro (GPUI) ↔ Cuerpo (smithay) en dos procesos. El historial previo
vive en git log (feat(mirada): …); este archivo arranca con el
trabajo de escritorio (tema, DM).
feat(mirada-greeter): greeter de carmen — login GPUI
App nueva crates/apps/mirada-greeter: la pantalla de login del
escritorio. Ventana GPUI con app_id = "carmen.greeter" para que el
compositor la reconozca y la componga a pantalla completa.
- Formulario usuario + contraseña (campo enmascarado).
Enterencadena los campos y dispara la autenticación. - Autentica con
brahman-authen un hilo de fondo (PAM demora ~2 s ante un fallo — la UI no se congela). Backend por entorno:MIRADA_GREETER_MOCK=usuario:secreto(dev) o PAM (MIRADA_GREETER_PAM, por defectocarmen). - En éxito imprime un
SessionTicketa stdout y termina; el compositor lo leerá para el traspaso a modo sesión (siguiente slice).
Para el contrato del tiquet (brahman-auth::SessionTicket) y el modo
enmascarado de nahual-widget-text-input, ver los changelogs de
protocol/ y nahual.
feat(mirada): inyección de entorno de tema a los hijos del compositor
spawn_command del compositor inyecta THEME_ENV a cada proceso hijo:
XDG_CURRENT_DESKTOP=mirada→xdg-desktop-portalenruta hacia el backendmirada-portal.QT_QPA_PLATFORMTHEME=gtk3→ las apps Qt siguen el tema GTK, y por tanto elgtk.cssque generanahual-theme.
Cierra la segunda mitad de la uniformización del tema: portal
(claro/oscuro + acento por protocolo) + gtk.css generado por
nahual-theme::toolkit + esta inyección → GTK y Qt alineados con el
tema de nahual.
feat(mirada-portal): backend de tema — org.freedesktop.appearance
App nueva crates/apps/mirada-portal: backend de xdg-desktop-portal
para carmen. Implementa org.freedesktop.impl.portal.Settings y publica
un único namespace, org.freedesktop.appearance, con tres claves:
color-scheme—1oscuro /2claro,accent-color—(ddd)RGB,contrast—1alto /0normal.
GTK4/libadwaita, Qt6, Firefox y Chromium leen ese namespace por protocolo: con el portal activo, todos respetan claro/oscuro + acento del escritorio sin tocar sus archivos de config. Es la primera mitad de la uniformización del tema (la segunda es inyección de entorno + CSS generado para la paleta completa).
- Fuente del tema: el archivo que persiste
nahual-theme($XDG_CONFIG_HOME/nahual/theme). El daemon lo vigila connotify; al cambiar, recomputa y emiteSettingChanged— las apps voltean en vivo. theme_facts.rs: tabla pura nombre-de-tema → hechos del portal (oscuro, acento HSL, contraste) + conversión HSL→RGB. Espejanahual_theme::Theme::all()sin enlazar GPUI, para que el daemon quede liviano. Nombre desconocido →FALLBACK(oscuro, acento gris).- D-Bus: bus de sesión,
org.freedesktop.impl.portal.desktop. miradaen/org/freedesktop/portal/desktop. Mismo patrónzbus 4que los shims decompat/. data/:mirada.portal+mirada-portals.conf+ el.servicede activación D-Bus. El frontend genéricoxdg-desktop-portalenruta hacia este backend; ver el README del crate.- 13 tests (
theme_facts+ helpers del protocolo). Smoke verificado sobre un bus de sesión efímero (dbus-run-session):ReadAll,ReadOne,Ready emisión deSettingChangedal cambiar el tema.