cosmic: cosmic-panel selló y no pintó — le faltaban los HIJOS, no una librería
cosmic-panel (b3:ac5e48c5) arranca perfecto: lee su config, crea su wl_output, dice 'Spawning applets' y 'Done spawning applets'. Y la pantalla no cambió ni un color. La respuesta estaba en esa misma línea: spawnea TRECE clientes por AppID y ninguno existía. Un panel sin applets no es un panel vacío, es un panel que no tiene nada que medir y no se dibuja. Es la misma forma del muro de los typelibs en GNOME: un componente puede arrancar sin errores y no pintar porque lo que le falta es un HIJO. El log del padre se lee sano. La receta cubre el panel entero de una: upstream compila UN binario multiplexor y cada applet es un symlink con el nombre que el panel invoca; despacha por argv[0]. Veinte symlinks, dos binarios. Fase compile custom porque hay que construir DOS targets (los default-members) y 'cargo rustc --' sólo admite uno. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
# cosmic-applets — los applets del panel: reloj, audio, red, batería, workspaces, botón de apps…
|
||||
#
|
||||
# ── POR QUÉ APARECE RECIÉN AHORA, Y CÓMO SE SUPO ────────────────────────────────────────────────
|
||||
# `cosmic-panel` selló y arrancó **perfecto** —lee su config, crea su `wl_output`, dice «Spawning
|
||||
# applets», «Done spawning applets»— y la pantalla no cambió ni un color. La respuesta estaba en esa
|
||||
# misma línea: el panel spawnea TRECE clientes por AppID (`CosmicAppletTime`, `CosmicAppletAudio`,
|
||||
# `CosmicPanelAppButton`…) y **ninguno existía**. Un panel sin applets no es un panel vacío: es un
|
||||
# panel que no tiene nada que medir, así que no se dibuja.
|
||||
#
|
||||
# La lección, que ya apareció en GNOME con los typelibs: **un componente puede arrancar sin errores y
|
||||
# no pintar porque lo que le falta es un HIJO, no una librería.** El log del padre se lee sano.
|
||||
#
|
||||
# ── UN BINARIO, VEINTE NOMBRES ──────────────────────────────────────────────────────────────────
|
||||
# El diseño de upstream es un multiplexor: se compila UN `cosmic-applets` y cada applet es un
|
||||
# **symlink** con el nombre que el panel invoca (`just _link_applet` = `ln -sf`); el binario despacha
|
||||
# por `argv[0]`. Por eso el install de abajo son veinte symlinks y no veinte copias — y por eso una
|
||||
# sola receta cubre todo el panel.
|
||||
#
|
||||
# `cosmic-panel-button` es el segundo miembro por defecto del workspace: es el que provee los tres
|
||||
# botones (apps, launcher, workspaces), que no son applets sino otra cosa con el mismo mecanismo.
|
||||
name = "cosmic-applets"
|
||||
version = "1.5.0"
|
||||
|
||||
[source]
|
||||
tarball = "https://github.com/pop-os/cosmic-applets/archive/epoch-1.5.0/cosmic-applets-epoch-1.5.0.tar.gz"
|
||||
sha256 = "ac9328e58f5e9cb9c7561a2ce4af212d4916d97c820741f0959366c7e1a0e3ba"
|
||||
|
||||
[build]
|
||||
compiler = "zig-cc"
|
||||
target = "x86_64-linux-musl"
|
||||
link = "dynamic"
|
||||
|
||||
[build.phases]
|
||||
# Fase compile CUSTOM, y por un motivo concreto: hay que construir DOS binarios (`cosmic-applets` y
|
||||
# `cosmic-panel-button`, los `default-members` del workspace) y `cargo rustc --` sólo admite uno. Se
|
||||
# usa `cargo build`, replicando a mano el setup del lab —el wrapper zig-cc que sanea el triple de
|
||||
# Alpine y el `-crt-static`— porque `resolve_phases` no autogenera la fase si la receta la trae.
|
||||
#
|
||||
# `-C target-feature=-crt-static` va en RUSTFLAGS y no tras `--`: acá es SEGURO al revés que en
|
||||
# helix, porque lo que rompe los proc-macros es forzar `+crt-static` (un proc-macro es un dylib PIC);
|
||||
# desactivarlo es justo lo que ya necesitan.
|
||||
compile = '''
|
||||
printf '%s\n' '#!/bin/sh' 'for a do' 'case "$a" in --target=*) a=--target=x86_64-linux-musl ;; esac' 'set -- "$@" "$a"' 'shift' 'done' 'exec zig cc -mcpu=baseline "$@"' > "$PWD/.hammer-zig-cc"
|
||||
chmod +x "$PWD/.hammer-zig-cc"
|
||||
RF="-C linker=$PWD/.hammer-zig-cc -C target-feature=-crt-static"
|
||||
rustc -vV | grep -q 'host: .*-alpine-' || RF="$RF -C link-self-contained=no"
|
||||
CC="$PWD/.hammer-zig-cc" RUSTFLAGS="$RF" cargo build --release --locked --offline
|
||||
'''
|
||||
# El `just install` traducido. Los `.desktop` los genera el build en `target/xdgen/`; se copian si
|
||||
# están (`|| true`) en vez de exigirlos, porque su ausencia no impide que el panel spawnee al applet
|
||||
# —lo invoca por nombre de binario— y sí haría fallar el sellado por un fichero decorativo.
|
||||
install = '''
|
||||
mkdir -p /out/usr/bin /out/usr/share/applications /out/usr/share/icons \
|
||||
/out/usr/share/dbus-1/services /out/usr/share/dbus-1/system.d
|
||||
cp target/release/cosmic-applets /out/usr/bin/cosmic-applets
|
||||
cp target/release/cosmic-panel-button /out/usr/bin/cosmic-panel-button
|
||||
chmod 755 /out/usr/bin/cosmic-applets /out/usr/bin/cosmic-panel-button
|
||||
for a in cosmic-app-list cosmic-applet-a11y cosmic-applet-audio cosmic-applet-input-sources \
|
||||
cosmic-applet-battery cosmic-applet-bluetooth cosmic-applet-minimize \
|
||||
cosmic-applet-network cosmic-applet-notifications cosmic-applet-power \
|
||||
cosmic-applet-status-area cosmic-applet-tiling cosmic-applet-time \
|
||||
cosmic-applet-workspaces cosmic-panel-button; do
|
||||
ln -sf cosmic-applets /out/usr/bin/$a
|
||||
done
|
||||
# El panel invoca los tres botones por su propio nombre, no por el del multiplexor.
|
||||
for b in cosmic-panel-app-button cosmic-panel-launcher-button cosmic-panel-workspaces-button; do
|
||||
ln -sf cosmic-panel-button /out/usr/bin/$b
|
||||
done
|
||||
[ -d target/xdgen ] && cp target/xdgen/*.desktop /out/usr/share/applications/ 2>/dev/null || true
|
||||
for d in */data/icons; do [ -d "$d" ] && cp -r "$d"/. /out/usr/share/icons/ 2>/dev/null || true; done
|
||||
[ -d cosmic-app-list/data/default_schema ] && mkdir -p /out/usr/share/cosmic && cp -r cosmic-app-list/data/default_schema/. /out/usr/share/cosmic/ 2>/dev/null || true
|
||||
cp cosmic-applet-network/data/dbus-1/system.d/*.conf /out/usr/share/dbus-1/system.d/ 2>/dev/null || true
|
||||
'''
|
||||
|
||||
[deps]
|
||||
build = ["libxkbcommon", "pkgconf", "libudev-zero", "libinput"]
|
||||
@@ -35,6 +35,7 @@ else
|
||||
# Componentes que `cosmic-session/src/main.rs` levanta, en el orden en que los levanta.
|
||||
recipes/incoming-cosmic/cosmic-bg.toml
|
||||
recipes/incoming-cosmic/cosmic-idle.toml
|
||||
recipes/incoming-cosmic/cosmic-panel.toml
|
||||
# Ni binario ni librería: DATOS. El tema de iconos de COSMIC — sin él el escritorio no se ve
|
||||
# «sin iconos», se ve roto, y con el cursor por software ni siquiera hay puntero.
|
||||
recipes/incoming-cosmic/cosmic-icons.toml
|
||||
|
||||
Reference in New Issue
Block a user