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>
This commit is contained in:
@@ -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/{} \;
|
||||
'''
|
||||
@@ -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"]
|
||||
@@ -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 ..
|
||||
'''
|
||||
@@ -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"]
|
||||
@@ -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"]
|
||||
Reference in New Issue
Block a user