Files
sergio bb21c28eb1 feat(mirada): mirada-greeter — greeter de login del escritorio carmen
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>
2026-05-21 17:59:12 +00:00

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). Enter encadena los campos y dispara la autenticación.
  • Autentica con brahman-auth en 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 defecto carmen).
  • En éxito imprime un SessionTicket a 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=miradaxdg-desktop-portal enruta hacia el backend mirada-portal.
  • QT_QPA_PLATFORMTHEME=gtk3 → las apps Qt siguen el tema GTK, y por tanto el gtk.css que genera nahual-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-scheme1 oscuro / 2 claro,
  • accent-color(ddd) RGB,
  • contrast1 alto / 0 normal.

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 con notify; al cambiar, recomputa y emite SettingChanged — las apps voltean en vivo.
  • theme_facts.rs: tabla pura nombre-de-tema → hechos del portal (oscuro, acento HSL, contraste) + conversión HSL→RGB. Espeja nahual_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. mirada en /org/freedesktop/portal/desktop. Mismo patrón zbus 4 que los shims de compat/.
  • data/: mirada.portal + mirada-portals.conf + el .service de activación D-Bus. El frontend genérico xdg-desktop-portal enruta 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, Read y emisión de SettingChanged al cambiar el tema.