gioser

tawasuyu/brahman

Rust 231TOML 70JSON 14HTML 12905 Definitions

⎇ 5369c307e411a8c8dd5e1f49bb37a53b98a83123 crates/apps/mirada-portal/README.md Markdown · 76 lines · 2.9 KB History raw

feat(mirada): mirada-portal — backend de tema org.freedesktop.appearance 5369c307e · sergio ·

1# mirada-portal
2
3Backend de `xdg-desktop-portal` para el escritorio **carmen**. Implementa
4`org.freedesktop.impl.portal.Settings` y publica un único namespace:
5`org.freedesktop.appearance`.
6
7## Qué resuelve
8
9GTK y Qt leen su configuración de sitios incompatibles entre sí. Pero
10**ambos** —además de Firefox y Chromium— consultan el portal de
11FreeDesktop para saber:
12
13- `color-scheme` — claro (`2`) u oscuro (`1`),
14- `accent-color` — el color de acento como `(ddd)` RGB,
15- `contrast` — contraste alto (`1`) o normal (`0`).
16
17`mirada-portal` responde esas tres claves a partir del tema activo de
18`nahual` y, cuando el tema cambia, emite `SettingChanged`: todo el
19ecosistema voltea en vivo, **sin tocar un solo archivo de config de las
20apps**.
21
22## Fuente del tema
23
24El daemon lee `$XDG_CONFIG_HOME/nahual/theme` (el archivo que persiste
25`nahual-theme`, con el nombre del preset activo) y lo vigila con
26`notify`. La traducción nombre → hechos del portal está en
27[`src/theme_facts.rs`], que espeja `nahual_theme::Theme::all()` sin
28enlazar GPUI.
29
30## Arquitectura
31
32Esto es el **backend** del portal. El frontend genérico
33`xdg-desktop-portal` (paquete agnóstico, liviano) enruta las llamadas de
34las apps hacia este backend según el archivo `mirada.portal`. No hay que
35implementar el frontend.
36
37## Instalación de los archivos de `data/`
38
39```sh
40install -Dm644 data/mirada.portal \
41    /usr/share/xdg-desktop-portal/portals/mirada.portal
42install -Dm644 data/mirada-portals.conf \
43    /usr/share/xdg-desktop-portal/mirada-portals.conf
44install -Dm644 data/org.freedesktop.impl.portal.desktop.mirada.service \
45    /usr/share/dbus-1/services/org.freedesktop.impl.portal.desktop.mirada.service
46install -Dm755 target/release/mirada-portal /usr/bin/mirada-portal
47```
48
49El frontend casa `UseIn=mirada` contra `XDG_CURRENT_DESKTOP`, así que
50carmen debe exportar `XDG_CURRENT_DESKTOP=mirada`. Alternativamente, el
51`mirada-portals.conf` lo fuerza con `default=mirada`.
52
53`mirada-portal` se puede arrancar desde `~/.config/mirada/autostart` o
54dejar que el frontend lo active por D-Bus (de ahí el `.service`).
55
56## Smoke test (sin frontend ni apps GTK)
57
58Con un bus de sesión vivo, el backend se puede interrogar directo:
59
60```sh
61busctl --user introspect org.freedesktop.impl.portal.desktop.mirada \
62    /org/freedesktop/portal/desktop
63busctl --user call org.freedesktop.impl.portal.desktop.mirada \
64    /org/freedesktop/portal/desktop \
65    org.freedesktop.impl.portal.Settings ReadAll as 0
66```
67
68Cambiar `~/.config/nahual/theme` debe disparar una señal `SettingChanged`
69(observable con `busctl --user monitor`).
70
71## Límite conocido (v1)
72
73El portal `org.freedesktop.appearance` sólo lleva claro/oscuro + acento +
74contraste. **No** lleva la paleta completa de `nahual`. Para recolorear
75GTK/Qt a los colores exactos del tema hace falta, además, inyección de
76entorno + CSS generado en el `spawn` de carmen — siguiente paso del plan.

README.md

mirada-portal

Backend de xdg-desktop-portal para el escritorio carmen. Implementa org.freedesktop.impl.portal.Settings y publica un único namespace: org.freedesktop.appearance.

Qué resuelve

GTK y Qt leen su configuración de sitios incompatibles entre sí. Pero ambos —además de Firefox y Chromium— consultan el portal de FreeDesktop para saber:

mirada-portal responde esas tres claves a partir del tema activo de nahual y, cuando el tema cambia, emite SettingChanged: todo el ecosistema voltea en vivo, sin tocar un solo archivo de config de las apps.

Fuente del tema

El daemon lee $XDG_CONFIG_HOME/nahual/theme (el archivo que persiste nahual-theme, con el nombre del preset activo) y lo vigila con notify. La traducción nombre → hechos del portal está en [src/theme_facts.rs], que espeja nahual_theme::Theme::all() sin enlazar GPUI.

Arquitectura

Esto es el backend del portal. El frontend genérico xdg-desktop-portal (paquete agnóstico, liviano) enruta las llamadas de las apps hacia este backend según el archivo mirada.portal. No hay que implementar el frontend.

Instalación de los archivos de data/

install -Dm644 data/mirada.portal \
    /usr/share/xdg-desktop-portal/portals/mirada.portal
install -Dm644 data/mirada-portals.conf \
    /usr/share/xdg-desktop-portal/mirada-portals.conf
install -Dm644 data/org.freedesktop.impl.portal.desktop.mirada.service \
    /usr/share/dbus-1/services/org.freedesktop.impl.portal.desktop.mirada.service
install -Dm755 target/release/mirada-portal /usr/bin/mirada-portal

El frontend casa UseIn=mirada contra XDG_CURRENT_DESKTOP, así que carmen debe exportar XDG_CURRENT_DESKTOP=mirada. Alternativamente, el mirada-portals.conf lo fuerza con default=mirada.

mirada-portal se puede arrancar desde ~/.config/mirada/autostart o dejar que el frontend lo active por D-Bus (de ahí el .service).

Smoke test (sin frontend ni apps GTK)

Con un bus de sesión vivo, el backend se puede interrogar directo:

busctl --user introspect org.freedesktop.impl.portal.desktop.mirada \
    /org/freedesktop/portal/desktop
busctl --user call org.freedesktop.impl.portal.desktop.mirada \
    /org/freedesktop/portal/desktop \
    org.freedesktop.impl.portal.Settings ReadAll as 0

Cambiar ~/.config/nahual/theme debe disparar una señal SettingChanged (observable con busctl --user monitor).

Límite conocido (v1)

El portal org.freedesktop.appearance sólo lleva claro/oscuro + acento + contraste. No lleva la paleta completa de nahual. Para recolorear GTK/Qt a los colores exactos del tema hace falta, además, inyección de entorno + CSS generado en el spawn de carmen — siguiente paso del plan.