tawasuyu

sergio/takana

> Una distribución Linux construida con un laboratorio funcional y hermético en el > sótano, y una terminal mutable, clásica y anárquica en el piso de arriba — diseñada > desde el suelo para que una IA programadora entienda, modifique y co…

TOML 1572Shell 203Rust 109Markdown 993728 Definiciones

cosmic: recetas del compositor, del fondo y del tema de iconos (cola incoming-cosmic)

cosmic-comp es LA pieza y la receta salió casi gratis: mirada-compositor ya
probó que smithay construye en este lab, y las deps en C de smithay dependen de
las features del backend, no del compositor. La lista es la misma menos
linux-pam y más libdisplay-info.

libdisplay-info y hwdata entran COPIADAS byte a byte de la cola GNOME (idénticas
a las de KDE): las deps resuelven hermano→padre, así que desde incoming-cosmic
no se ven las de otra cola. Verificado que el hash NO se mueve (b3:260f0519 y
b3:bdc36cf9) ⇒ los artefactos ya sellados sirven y la copia no cuesta un build.

cosmic-bg va antes que el resto de los clientes porque separa dos preguntas:
habla Wayland por smithay-client-toolkit y NO toca libcosmic/iced, así que si el
fondo pinta y el panel no, el problema es de la capa de UI y no del transporte.

Toda la suite está tagueada epoch-1.5.0, confirmado repo por repo.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

bc6f664650b8dc233dd4b43ea48600d1f1b633aa · por sergio · (hace 2 meses) · padre e1564614e · ver el árbol en este commit

Delta semántico

Ninguna definición cambió: el cambio es de texto, documentación o datos.

5 archivos · +191 −0

diff --git a/recipes/incoming-cosmic/cosmic-bg.toml b/recipes/incoming-cosmic/cosmic-bg.toml
new file mode 100644
index 00000000..98fe7bb2
--- /dev/null
+++ b/recipes/incoming-cosmic/cosmic-bg.toml
@@ -0,0 +1,36 @@
+# cosmic-bg — el que pinta el fondo de pantalla. Es un cliente Wayland normal, uno de los que
+# `cosmic-session` levanta después del compositor.
+#
+# ── POR QUÉ ES EL SEGUNDO CLIENTE QUE SE CONSTRUYE ──────────────────────────────────────────────
+# Porque separa dos preguntas que en el resto de la suite vienen pegadas. cosmic-bg habla Wayland con
+# `smithay-client-toolkit` —la implementación en Rust del protocolo, sin libwayland— y decodifica
+# 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.
+#
+# 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/<APPID>/`
+# con la misma convención de cosmic-config que en cosmic-comp: **el nombre del fichero ES la clave**.
+name    = "cosmic-bg"
+version = "1.5.0"
+
+[source]
+tarball = "https://github.com/pop-os/cosmic-bg/archive/epoch-1.5.0/cosmic-bg-epoch-1.5.0.tar.gz"
+sha256  = "12b30c60e15ac6c0f4b3eca8c37642145683e830833b429958222dfc395db177"
+
+[build]
+compiler = "zig-cc"
+target   = "x86_64-linux-musl"
+link     = "static"
+# Un único target para `cargo rustc --` (ver el comentario de cosmic-comp): el workspace trae también
+# la lib de config.
+flags    = ["--bin", "cosmic-bg"]
+
+[build.phases]
+install = '''
+mkdir -p /out/usr/bin /out/usr/share/cosmic/com.system76.CosmicBackground
+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/{} \;
+'''
diff --git a/recipes/incoming-cosmic/cosmic-comp.toml b/recipes/incoming-cosmic/cosmic-comp.toml
new file mode 100644
index 00000000..888d0cec
--- /dev/null
+++ b/recipes/incoming-cosmic/cosmic-comp.toml
@@ -0,0 +1,73 @@
+# cosmic-comp — el compositor Wayland de COSMIC (System76), sobre smithay. **Es LA pieza**: el resto
+# de la suite son clientes suyos, así que si esto no construye, COSMIC no existe en hammer.
+#
+# ── POR QUÉ ESTA RECETA ES CASI GRATIS DE ESCRIBIR ──────────────────────────────────────────────
+# `mirada-compositor` ya es un compositor smithay construido por este lab, y las deps en C de smithay
+# no dependen del compositor sino de las features del backend: drm-sys→libdrm, gbm-sys→mesa,
+# libseat-sys→seatd, input-sys→libinput, libudev-sys→libudev-zero, y wayland-server.pc→libffi/expat.
+# La lista de abajo es LA MISMA que la de mirada, menos linux-pam (cosmic-comp no autentica: eso es de
+# cosmic-greeter) y más `libdisplay-info`. Ese es el rédito de haber hecho mirada primero.
+#
+# ── LAS TRES FEATURES QUE ASUSTAN Y NO CUESTAN DEPS DE BUILD ────────────────────────────────────
+# smithay entra con `backend_vulkan`, `backend_x11` y `xwayland` prendidas (están fijas en su
+# Cargo.toml, no se eligen desde la CLI), y ninguna agrega una librería a enlazar:
+#   · `backend_vulkan` → el crate `ash`, que carga Vulkan por **dlopen**;
+#   · `backend_x11` → `x11rb` con `dl-libxcb`, que hace lo mismo con libxcb;
+#   · `xwayland` → `x11rb` puro; lo que hace falta es el BINARIO Xwayland, y eso es runtime.
+# O sea que libxcb/vulkan-loader son deuda de RUNTIME (y viven hoy sólo en la cola KDE), no un muro
+# de compilación. Si algo de esto se rompe, el error va a ser en runtime y va a decir cuál falta.
+#
+# `libdisplay-info` sí es real: el crate 0.3 es un binding -sys que resuelve por pkg-config. La receta
+# entra COPIADA byte a byte de la cola GNOME (y es idéntica a la de KDE), así que su hash no se mueve
+# —b3:260f0519— y el artefacto ya sellado sirve tal cual: la copia no cuesta un build.
+#
+# `default = ["systemd"]` queda: el crate `libsystemd` es una **reimplementación en Rust**, no un
+# binding a la C, así que no arrastra systemd; y `logind` habla `org.freedesktop.login1`, que en hammer
+# lo sirve arje-logind-compat. Igual criterio que cosmic-session.
+#
+# Enlace DINÁMICO como mirada-compositor: smithay enlaza libdrm/gbm/seat/input de verdad y hace dlopen
+# de EGL/wayland/xkbcommon; un estático acá no es una postura, es una mentira.
+name    = "cosmic-comp"
+version = "1.5.0"
+
+[source]
+tarball = "https://github.com/pop-os/cosmic-comp/archive/epoch-1.5.0/cosmic-comp-epoch-1.5.0.tar.gz"
+sha256  = "ebdc79bd667b6ee167fcf5c4a616f56db7c24adfabc11ab3c3e572c5b2a52421"
+
+[build]
+compiler = "zig-cc"
+target   = "x86_64-linux-musl"
+link     = "dynamic"
+# `--bin cosmic-comp` no es cosmético: la fase compile del lab usa `cargo rustc -- -C …`, y
+# `cargo rustc` EXIGE un único target cuando hay flags después del `--`. El paquete trae binario +
+# lib + ejemplos, así que sin el filtro corta con «extra arguments to `rustc` can only be passed to
+# one target». Mismo motivo por el que helix lleva `--bin hx`.
+flags    = ["--bin", "cosmic-comp"]
+
+[build.phases]
+# El `install` del Makefile de upstream, sin las unidades de systemd (acá el que supervisa es arje) y
+# sin `cosmic-service`, que sólo existe para ellas.
+#
+# ⚠ Las dos rutas largas NO son decorativas y no se pueden «ordenar»: cosmic-config guarda cada clave
+# en UN FICHERO cuyo NOMBRE ES LA CLAVE, bajo `<componente>/v1/`. O sea que
+# `.../CosmicSettings.Shortcuts/v1/defaults` significa la clave `defaults` del componente Shortcuts.
+# Renombrar el fichero o aplanar el árbol no rompe el build: deja el escritorio SIN ATAJOS DE TECLADO,
+# que en un compositor teselante es quedarse sin manejarlo.
+#
+# Y NO se instala el `data/cosmic.desktop` de este repo, aunque exista: es el de la «bare session»
+# —arrancar el compositor sin gestor de sesión—, su `Exec` apunta a `/usr/bin/cosmic-service` (que
+# vive en la rama de systemd que acá no va) y **colisiona en la misma ruta** con el que ya instala
+# cosmic-session. Dos artefactos escribiendo `/usr/share/wayland-sessions/cosmic.desktop` es una
+# carrera de orden de hidratación, y la que perdería es la entrada BUENA.
+install = '''
+mkdir -p /out/usr/bin \
+         /out/usr/share/cosmic/com.system76.CosmicSettings.Shortcuts/v1 \
+         /out/usr/share/cosmic/com.system76.CosmicSettings.WindowRules/v1
+cp target/release/cosmic-comp /out/usr/bin/cosmic-comp
+chmod 755 /out/usr/bin/cosmic-comp
+cp data/keybindings.ron        /out/usr/share/cosmic/com.system76.CosmicSettings.Shortcuts/v1/defaults
+cp data/tiling-exceptions.ron  /out/usr/share/cosmic/com.system76.CosmicSettings.WindowRules/v1/tiling_exception_defaults
+'''
+
+[deps]
+build = ["mesa", "wayland", "wayland-protocols", "libdrm", "seatd", "libinput", "libudev-zero", "libevdev", "mtdev", "libxkbcommon", "pixman", "expat", "zlib", "zstd", "libffi", "pkgconf", "libdisplay-info"]
diff --git a/recipes/incoming-cosmic/cosmic-icons.toml b/recipes/incoming-cosmic/cosmic-icons.toml
new file mode 100644
index 00000000..a93a81c8
--- /dev/null
+++ b/recipes/incoming-cosmic/cosmic-icons.toml
@@ -0,0 +1,34 @@
+# cosmic-icons — el tema de iconos «Cosmic» de COSMIC. Sin código: SVGs y un `index.theme`.
+#
+# Es dep de RUNTIME de casi toda la suite (panel, launcher, settings, app-library) y de ninguna en
+# build. Va primero igual porque cuesta segundos y porque la lección ya la pagó GNOME dos veces: un
+# escritorio sin tema de iconos no se ve «sin iconos», se ve ROTO — y con el cursor por software
+# (obligatorio en render por CPU) directamente no se ve el puntero.
+#
+# `just install` de upstream traducido: son tres `find -exec install` a `/usr/share/icons/Cosmic`.
+# `extra/` no es opcional pese al nombre: ahí viven los iconos propios de COSMIC (los de freedesktop
+# son los estándar). Falta `hicolor-icon-theme`, que es de quien hereda cualquier tema: ya está en el
+# corpus por la campaña GNOME y entra por la imagen, no por acá.
+name    = "cosmic-icons"
+version = "1.5.0"
+
+[source]
+tarball = "https://github.com/pop-os/cosmic-icons/archive/epoch-1.5.0/cosmic-icons-epoch-1.5.0.tar.gz"
+sha256  = "e6caffc4c93f5afdaae3fbda4f3cc14363d3539cda1b0c5f478d32a8bb141c4c"
+
+[build]
+compiler = "gcc"
+target   = "x86_64-linux-musl"
+link     = "dynamic"
+flags    = []
+
+[build.phases]
+configure = 'true'
+compile   = 'true'
+install   = '''
+ICONS=/out/usr/share/icons/Cosmic
+mkdir -p "$ICONS"
+install -Dm0644 index.theme "$ICONS/index.theme"
+cd freedesktop && find ./scalable -type f -exec install -Dm0644 {} "$ICONS"/{} \; && cd ..
+cd extra       && find ./scalable -type f -exec install -Dm0644 {} "$ICONS"/{} \; && cd ..
+'''
diff --git a/recipes/incoming-cosmic/hwdata.toml b/recipes/incoming-cosmic/hwdata.toml
new file mode 100644
index 00000000..e8cc8ced
--- /dev/null
+++ b/recipes/incoming-cosmic/hwdata.toml
@@ -0,0 +1,24 @@
+# hwdata 0.393 — bases de datos de IDs de hardware (pnp.ids, pci.ids, usb.ids) + hwdata.pc. Sin código:
+# sólo datos. Campaña KDE (ADR 0011): lo exige libdisplay-info en tiempo de build (dependency('hwdata')
+# native → pkgdatadir/pnp.ids) y kwin como RUNTIME (find_package(hwdata) TYPE RUNTIME, tabla PNP de EDID).
+# `configure` es un script shell propio (no autoconf); no compila nada.
+name    = "hwdata"
+version = "0.393"
+
+[source]
+tarball = "https://github.com/vcrhonek/hwdata/archive/refs/tags/v0.393.tar.gz"
+sha256  = "322add86944680e99d04468d49de180a7ce0c77fb406f7abde8ab14f2d161051"
+
+[build]
+compiler = "gcc"
+target   = "x86_64-linux-musl"
+link     = "dynamic"
+flags    = []
+
+[build.phases]
+configure = './configure --prefix=/usr --libdir=/usr/lib --datadir=/usr/share'
+compile   = 'true'
+install   = 'make install DESTDIR=/out'
+
+[deps]
+build = ["pkgconf"]
diff --git a/recipes/incoming-cosmic/libdisplay-info.toml b/recipes/incoming-cosmic/libdisplay-info.toml
new file mode 100644
index 00000000..4b39558a
--- /dev/null
+++ b/recipes/incoming-cosmic/libdisplay-info.toml
@@ -0,0 +1,24 @@
+# libdisplay-info 0.2.0 — parseo de EDID/DisplayID (libdisplay-info.so). Campaña KDE (ADR 0011): sustrato
+# de kwin (pkg_check_modules(libdisplay-info>=0.2.0) REQUIRED, lectura de EDID de los monitores). Meson.
+# En build necesita pnp.ids: usa dependency('hwdata') native → si no está, cae a /usr/share/hwdata/pnp.ids
+# y meson `files()` EXIGE que exista ⇒ hwdata es dep de build. Sin di-edid-decode (tool) para evitar más deps.
+name    = "libdisplay-info"
+version = "0.2.0"
+
+[source]
+tarball = "https://gitlab.freedesktop.org/emersion/libdisplay-info/-/archive/0.2.0/libdisplay-info-0.2.0.tar.gz"
+sha256  = "f7331fcaf5527251b84c8fb84238d06cd2f458422ce950c80e86c72927aa8c2b"
+
+[build]
+compiler    = "zig-cc"
+target      = "x86_64-linux-musl"
+link        = "dynamic"
+zig_version = "0.13.0"
+
+[build.phases]
+configure = "PKG_CONFIG_PATH=/usr/lib/pkgconfig:/usr/share/pkgconfig meson setup output --prefix=/usr --buildtype=release"
+compile   = "ninja -C output"
+install   = "DESTDIR=/out ninja -C output install"
+
+[deps]
+build = ["meson", "samurai", "python3", "pkgconf", "hwdata"]