1# Changelog — mirada
2
3Compositor Wayland del monorepo (nombre de proyecto: carmen). Arquitectura
4Cerebro (GPUI) ↔ Cuerpo (smithay) en dos procesos. El historial previo
5vive en `git log` (`feat(mirada): …`); este archivo arranca con el
6trabajo de escritorio (tema, DM).
7
8### feat(mirada-greeter): greeter de carmen — login GPUI
9
10App nueva `crates/apps/mirada-greeter`: la pantalla de login del
11escritorio. Ventana GPUI con `app_id = "carmen.greeter"` para que el
12compositor la reconozca y la componga a pantalla completa.
13
14- Formulario usuario + contraseña (campo enmascarado). `Enter` encadena
15 los campos y dispara la autenticación.
16- Autentica con `brahman-auth` en un hilo de fondo (PAM demora ~2 s ante
17 un fallo — la UI no se congela). Backend por entorno:
18 `MIRADA_GREETER_MOCK=usuario:secreto` (dev) o PAM (`MIRADA_GREETER_PAM`,
19 por defecto `carmen`).
20- En éxito imprime un `SessionTicket` a stdout y termina; el compositor
21 lo leerá para el traspaso a modo sesión (siguiente slice).
22
23Para el contrato del tiquet (`brahman-auth::SessionTicket`) y el modo
24enmascarado de `nahual-widget-text-input`, ver los changelogs de
25`protocol/` y `nahual`.
26
27### feat(mirada): inyección de entorno de tema a los hijos del compositor
28
29`spawn_command` del compositor inyecta `THEME_ENV` a cada proceso hijo:
30
31- `XDG_CURRENT_DESKTOP=mirada` → `xdg-desktop-portal` enruta hacia el
32 backend `mirada-portal`.
33- `QT_QPA_PLATFORMTHEME=gtk3` → las apps Qt siguen el tema GTK, y por
34 tanto el `gtk.css` que genera `nahual-theme`.
35
36Cierra la segunda mitad de la uniformización del tema: portal
37(claro/oscuro + acento por protocolo) + `gtk.css` generado por
38`nahual-theme::toolkit` + esta inyección → GTK y Qt alineados con el
39tema de nahual.
40
41### feat(mirada-portal): backend de tema — org.freedesktop.appearance
42
43App nueva `crates/apps/mirada-portal`: backend de `xdg-desktop-portal`
44para carmen. Implementa `org.freedesktop.impl.portal.Settings` y publica
45un único namespace, `org.freedesktop.appearance`, con tres claves:
46
47- `color-scheme` — `1` oscuro / `2` claro,
48- `accent-color` — `(ddd)` RGB,
49- `contrast` — `1` alto / `0` normal.
50
51GTK4/libadwaita, Qt6, Firefox y Chromium leen ese namespace por
52protocolo: con el portal activo, todos respetan claro/oscuro + acento del
53escritorio **sin tocar sus archivos de config**. Es la primera mitad de
54la uniformización del tema (la segunda es inyección de entorno + CSS
55generado para la paleta completa).
56
57- **Fuente del tema**: el archivo que persiste `nahual-theme`
58 (`$XDG_CONFIG_HOME/nahual/theme`). El daemon lo vigila con `notify`;
59 al cambiar, recomputa y emite `SettingChanged` — las apps voltean en
60 vivo.
61- **`theme_facts.rs`**: tabla pura nombre-de-tema → hechos del portal
62 (oscuro, acento HSL, contraste) + conversión HSL→RGB. Espeja
63 `nahual_theme::Theme::all()` sin enlazar GPUI, para que el daemon
64 quede liviano. Nombre desconocido → `FALLBACK` (oscuro, acento gris).
65- **D-Bus**: bus de **sesión**, `org.freedesktop.impl.portal.desktop.
66 mirada` en `/org/freedesktop/portal/desktop`. Mismo patrón `zbus 4`
67 que los shims de `compat/`.
68- **`data/`**: `mirada.portal` + `mirada-portals.conf` + el `.service`
69 de activación D-Bus. El frontend genérico `xdg-desktop-portal` enruta
70 hacia este backend; ver el README del crate.
71- 13 tests (`theme_facts` + helpers del protocolo). Smoke verificado
72 sobre un bus de sesión efímero (`dbus-run-session`): `ReadAll`,
73 `ReadOne`, `Read` y emisión de `SettingChanged` al cambiar el tema.
mirada.md
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.