diff --git a/docs/runbooks/cosmic-desktop.md b/docs/runbooks/cosmic-desktop.md index 7478d131..a64dd2e6 100644 --- a/docs/runbooks/cosmic-desktop.md +++ b/docs/runbooks/cosmic-desktop.md @@ -95,6 +95,12 @@ separa la capa de UI del transporte; sin él, las dos preguntas llegan juntas. 6. **Las features de smithay que asustan no cuestan deps de build**: `backend_vulkan` (crate `ash`), `backend_x11` (`x11rb` con `dl-libxcb`) y `xwayland` cargan todo por **dlopen**. Son deuda de RUNTIME —libxcb y vulkan-loader viven hoy sólo en la cola KDE—, no un muro de compilación. +7. **«Habla Wayland en Rust» ≠ «no toca C».** cosmic-bg se escribió sin `[deps]` con ese argumento y + reventó en el `build.rs` de `smithay-client-toolkit` pidiendo `xkbcommon.pc`: **sctk ENLAZA + libxkbcommon**; el que la dlopea es `winit`, que es otra capa. Hablar el protocolo en Rust dice + cómo viaja el byte, no con qué se interpreta un teclado. `libxkbcommon` + `pkgconf` en `[deps]`, y + el `link = "static"` sigue siendo verdad porque su artefacto trae `.a` además de `.so`. + **Corolario para el resto de la cola: todo cliente de la suite va a necesitar al menos esos dos.** ## Cómo se construye diff --git a/recipes/incoming-cosmic/cosmic-bg.toml b/recipes/incoming-cosmic/cosmic-bg.toml index 98fe7bb2..f5958b59 100644 --- a/recipes/incoming-cosmic/cosmic-bg.toml +++ b/recipes/incoming-cosmic/cosmic-bg.toml @@ -7,7 +7,13 @@ # imágenes con crates puros (image, jxl-oxide, fast_image_resize). **No toca libcosmic ni iced.** # Así que si el fondo pinta y el panel no, el problema es de la capa de UI, no del transporte. # -# De ahí que vaya `link = "static"`, a diferencia del compositor: acá no hay una sola dep en C. +# ── PERO NO ES RUST PURO, Y ESO SE MIDIÓ, NO SE SUPUSO ────────────────────────────────────────── +# El primer intento salió sin `[deps]` con el argumento «un cliente Wayland en Rust no toca C», y +# reventó en el `build.rs` de smithay-client-toolkit pidiendo `xkbcommon.pc`. **sctk ENLAZA +# libxkbcommon; no la dlopea** — el que la dlopea es winit, que es otra capa. La regla que sale: +# «habla el protocolo en Rust» dice cómo viaja el byte, no con qué se interpreta un teclado. +# Como el artefacto de libxkbcommon trae `.a` además de `.so`, el `link = "static"` sigue siendo +# verdad y no una etiqueta. # # El árbol es un workspace con `config/` como miembro (cosmic-bg-config), que es lo que leen los # demás componentes para saber qué fondo hay puesto. Los defaults van a `/usr/share/cosmic//` @@ -34,3 +40,6 @@ cp target/release/cosmic-bg /out/usr/bin/cosmic-bg chmod 755 /out/usr/bin/cosmic-bg cd data && find v1 -type f -exec install -Dm0644 {} /out/usr/share/cosmic/com.system76.CosmicBackground/{} \; ''' + +[deps] +build = ["libxkbcommon", "pkgconf"] diff --git a/recipes/incoming-cosmic/cosmic-idle.toml b/recipes/incoming-cosmic/cosmic-idle.toml new file mode 100644 index 00000000..a592db81 --- /dev/null +++ b/recipes/incoming-cosmic/cosmic-idle.toml @@ -0,0 +1,27 @@ +# cosmic-idle — el que apaga la pantalla y dispara el bloqueo por inactividad. Cliente Wayland puro: +# `wayland-client` + los protocolos `staging`/`wlr` de idle-notify, `calloop` para el bucle, y zbus +# contra UPower para saber si hay batería. +# +# Sin `[deps]` a propósito y no por descuido: a diferencia de cosmic-bg NO usa smithay-client-toolkit +# —que es quien enlaza libxkbcommon (ver el gotcha 7 del runbook)—, y no necesita interpretar teclas: +# le alcanza con que el compositor le avise que nadie tocó nada. Si el build pide un `.pc`, el que lo +# pide se ve en el `build.rs` que panickea, y eso es un dato, no una conjetura. +name = "cosmic-idle" +version = "1.5.0" + +[source] +tarball = "https://github.com/pop-os/cosmic-idle/archive/epoch-1.5.0/cosmic-idle-epoch-1.5.0.tar.gz" +sha256 = "f6eab0ed81bba6bd3a6dfb3ec78471a152852c59e6887a74206f4b59865df7c1" + +[build] +compiler = "zig-cc" +target = "x86_64-linux-musl" +link = "static" +flags = ["--bin", "cosmic-idle"] + +[build.phases] +install = ''' +mkdir -p /out/usr/bin +cp target/release/cosmic-idle /out/usr/bin/cosmic-idle +chmod 755 /out/usr/bin/cosmic-idle +''' diff --git a/recipes/incoming-cosmic/cosmic-osd.toml b/recipes/incoming-cosmic/cosmic-osd.toml new file mode 100644 index 00000000..ac09387c --- /dev/null +++ b/recipes/incoming-cosmic/cosmic-osd.toml @@ -0,0 +1,35 @@ +# cosmic-osd — los avisos flotantes de volumen, brillo y bloqueo de mayúsculas. **Es el primer cliente +# de iced/libcosmic de la cola, y por eso importa más de lo que su función sugiere.** +# +# Panel, launcher, app-library, workspaces y notifications comparten exactamente el mismo sustrato +# (`libcosmic` con `winit` + `wayland` + `multi-window`), así que lo que cueste acá lo cuestan todos y +# lo que salga gratis acá sale gratis cinco veces. Se elige el OSD como sonda por ser el más chico de +# los seis: mismo muro, menos superficie propia donde perderse si falla. +# +# `default-features = false` en su declaración de libcosmic no es un detalle: deja afuera el renderer +# `wgpu`, así que la pintura es por CPU (tiny-skia) y NO hace falta Vulkan en build. Es la misma +# postura que ya obligó QEMU en las campañas KDE y GNOME, pero acá viene elegida por upstream. +# +# `libxkbcommon` + `pkgconf` por el gotcha 7 del runbook: winit/sctk ENLAZAN xkbcommon. +name = "cosmic-osd" +version = "1.5.0" + +[source] +tarball = "https://github.com/pop-os/cosmic-osd/archive/epoch-1.5.0/cosmic-osd-epoch-1.5.0.tar.gz" +sha256 = "de1a409c95305059f0c79f1dff0089f7cf6aaf9b2b7201e982da9895d58ad4a3" + +[build] +compiler = "zig-cc" +target = "x86_64-linux-musl" +link = "static" +flags = ["--bin", "cosmic-osd"] + +[build.phases] +install = ''' +mkdir -p /out/usr/bin +cp target/release/cosmic-osd /out/usr/bin/cosmic-osd +chmod 755 /out/usr/bin/cosmic-osd +''' + +[deps] +build = ["libxkbcommon", "pkgconf"]