diff --git a/docs/state/targets.toml b/docs/state/targets.toml index 49fd0653..49eafb19 100644 --- a/docs/state/targets.toml +++ b/docs/state/targets.toml @@ -120,6 +120,10 @@ paquetes = [ # `cosmic-files` como crate, igual que la terminal). Su binario enlaza SÓLO `libxkbcommon` y # `libc.so`: dos NEEDED, el mínimo de todos los clientes de la suite. "cosmic-edit", + # La quinta: la tienda. Con el backend `pkgar` —el único de los cuatro que no pide ni una torre de + # C (flatpak) ni un demonio ausente (packagekit)— NAVEGA el catálogo instalado leyendo el AppStream + # del sistema, pero NO instala: nada está cableado al `.swm` de hammer. + "cosmic-store", # Datos, no binarios: el tema de iconos (y el hicolor del que hereda), las tablas de xkb y una # tipografía. Ninguno es dep de build de nadie y sin ellos el escritorio arranca roto — sin puntero, # sin teclado o con tofu. diff --git a/recipes/incoming-cosmic/cosmic-store.toml b/recipes/incoming-cosmic/cosmic-store.toml new file mode 100644 index 00000000..a637de82 --- /dev/null +++ b/recipes/incoming-cosmic/cosmic-store.toml @@ -0,0 +1,81 @@ +# cosmic-store — la tienda de aplicaciones. Quinta aplicación con ventana, y **la primera de la +# suite que choca de frente con que hammer es OTRA distro**: una tienda es una CARA de un gestor de +# paquetes, y el de abajo no es el suyo. +# +# ── LOS CUATRO BACKENDS, Y POR QUÉ SÓLO UNO SIRVE ACÁ ─────────────────────────────────────────── +# `src/backend/` tiene cuatro, todos detrás de features (`mod.rs` los registra con `#[cfg(feature)]`): +# +# · `flatpak` — el de upstream. Pide `libflatpak` (GObject), o sea la cadena glib COMPARTIDA +# más ostree/libsoup/gpgme: la torre de C que esta campaña justamente no tiene. +# Se apaga, y con ella se van `gettext-sys` y los tres `*-sys` de glib del lock. +# · `packagekit` — es Rust puro (`packagekit-zbus`), pero necesita el DEMONIO PackageKit sirviendo +# `org.freedesktop.PackageKit` en el bus, que la imagen no tiene. Queda anotado +# como el camino natural el día que se quiera enchufar `.swm` de verdad: es el +# mismo patrón que `arje-logind-compat` —un shim de D-Bus— y no cuesta un solo +# `.so` de C. +# · `rpm-ostree` — irrelevante. +# · `pkgar` — **el único que arranca acá**, y no por casualidad: no habla con ningún demonio +# ni enlaza nada. `Pkgar::new()` construye un `AppstreamCache::system(…)` y lee +# el AppStream del sistema, o sea los `.metainfo.xml` que las propias recetas +# instalan en `/usr/share/metainfo`. +# +# ⚠ **ALCANCE HONESTO: esto NAVEGA, no INSTALA.** Con `pkgar` la tienda lista y describe lo que la +# imagen ya tiene —las entradas salen de los `.metainfo.xml` de cosmic-term/files/settings/edit— pero +# ninguna de sus operaciones está cableada al `.swm` de hammer (Etapa F). Es una vitrina del catálogo +# instalado, no un instalador. Enchufarlo de verdad es un frente propio, y el atajo es `packagekit`. +# +# ── `wgpu` APAGADA, como en todos los clientes ────────────────────────────────────────────────── +# Viene en `default`. Fuera: el árbol wgpu+naga+ash+glow+spirv a `codegen-units=1` desbordó el +# filesystem dos veces, y la imagen pinta con llvmpipe por software igual. +name = "cosmic-store" +version = "1.5.0" + +[source] +tarball = "https://github.com/pop-os/cosmic-store/archive/epoch-1.5.0/cosmic-store-epoch-1.5.0.tar.gz" +sha256 = "5a1ed7f9e241b498592437f1d4bc125d39a6c743de15629148a2d27f4402610c" + +[build] +compiler = "zig-cc" +target = "x86_64-linux-musl" +# Dinámico como todo cliente de la suite: `wayland-client` entra con la feature `dlopen` y un musl +# estático no la honra. +link = "dynamic" + +[build.phases] +# `-p cosmic-store` y no `--workspace`: el otro miembro es `flathub-stats`, una herramienta de +# upstream para regenerar estadísticas de Flathub que no tiene sentido en esta imagen. +# +# La lista es la `default` MENOS `flatpak` y `wgpu`, MÁS `pkgar`. `xdg-portal` se deja aunque +# `flatpak` la encendía: es `libcosmic/xdg-portal`, zbus puro, y es lo que da el diálogo de ficheros. +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" +export INSTALL_DIR=/usr/share APPID=com.system76.CosmicStore +CC="$PWD/.hammer-zig-cc" RUSTFLAGS="$RF" cargo build --release --locked --offline \ + -p cosmic-store --no-default-features \ + --features dbus-config,desktop-systemd-scope,logind,notify,pkgar,single-instance,wayland,xdg-portal +''' +install = ''' +mkdir -p /out/usr/bin /out/usr/share/applications /out/usr/share/metainfo +cp target/release/cosmic-store /out/usr/bin/cosmic-store +chmod 755 /out/usr/bin/cosmic-store +cp target/xdgen/com.system76.CosmicStore.desktop /out/usr/share/applications/ 2>/dev/null || true +cp target/xdgen/com.system76.CosmicStore.metainfo.xml /out/usr/share/metainfo/ 2>/dev/null || true +for size in res/icons/hicolor/*; do + [ -d "$size" ] || continue + s=$(basename "$size") + if [ -f "$size/apps/com.system76.CosmicStore.svg" ]; then + mkdir -p "/out/usr/share/icons/hicolor/$s/apps" + cp "$size/apps/com.system76.CosmicStore.svg" "/out/usr/share/icons/hicolor/$s/apps/" + fi +done +''' + +[deps] +# El juego fijo de todo cliente. `reqwest` entra con rustls; si el proveedor de cripto resuelve a +# `aws-lc-rs` habrá que sumar `cmake` y `perl` —`aws-lc-sys` es BoringSSL, C y ensamblador— pero eso +# es justamente lo que el lock NO permite decidir a priori: lista `aws-lc-sys` como POSIBLE. Se +# arranca sin declararlos y que el build diga. +build = ["libxkbcommon", "pkgconf", "libudev-zero", "libinput"] diff --git a/scripts/cosmic/hydrate-cosmic.sh b/scripts/cosmic/hydrate-cosmic.sh index bd6f9b64..488f45d8 100755 --- a/scripts/cosmic/hydrate-cosmic.sh +++ b/scripts/cosmic/hydrate-cosmic.sh @@ -67,6 +67,9 @@ else # …y el editor de texto, la cuarta. Su `.desktop` declara `MimeType=text/plain`, así que además # de aparecer en la biblioteca es a quien el gestor de ficheros abre un `.txt`. recipes/incoming-cosmic/cosmic-edit.toml + # …y la tienda, la quinta. Con el backend `pkgar` NAVEGA pero no INSTALA: lee el AppStream del + # sistema, o sea los `.metainfo.xml` que instalan las recetas de acá arriba. + recipes/incoming-cosmic/cosmic-store.toml recipes/incoming-cosmic/cosmic-app-library.toml recipes/incoming-cosmic/cosmic-workspaces-epoch.toml # Ni binario ni librería: DATOS. El tema de iconos de COSMIC — sin él el escritorio no se ve