# 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=mirada` → `xdg-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-scheme` — `1` oscuro / `2` claro, - `accent-color` — `(ddd)` RGB, - `contrast` — `1` 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.