bb21c28eb1
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>
74 lines
3.5 KiB
Markdown
74 lines
3.5 KiB
Markdown
# 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.
|