Sellada b3:25caa359 al primer intento. `--help` corre y los NEEDED traen `libpipewire-0.3.so.0`: graba CON audio, que era exactamente lo que anoche no se podía. Es la app que estaba bloqueada por el defecto del triaje —preguntaba «¿existe la receta?» en vez de «¿la alcanza quien la usa?»—: sus dos backends de captura de sonido vivían sólo en colas y una receta del corpus no alcanza una cola hermana. Con pipewire en el corpus, cae sola. `-Ddefault_audio_backend=pipewire` explícito y no `auto`: su meson resuelve `auto` mirando qué encontró en el sandbox (meson.build:95-101), o sea que el artefacto dependería de lo que quedó montado en el lab. Misma disciplina que en mpv y ffmpeg. ⚠ SE LISTA SÓLO EN `escritorio-sway`, y la razón es de PROTOCOLO: captura por `wlr-screencopy`, que implementan los compositores wlroots. KWin y mutter NO lo implementan —usan el portal/ScreenCast—, así que meterlo en esas dos imágenes sería enviar una herramienta que no puede funcionar ahí: deuda fantasma con forma de app. En COSMIC hay que verificar si cosmic-comp expone el protocolo antes de listarlo; no se listó a ciegas. Cubre el caso de uso principal por el que uno instala OBS, con UNA receta en vez de las 20 + Qt6 + X11 que OBS pedía. escritorio-sway 146/146.
311 lines
22 KiB
TOML
311 lines
22 KiB
TOML
# targets.toml — el MANIFIESTO DE OBJETIVO: qué paquetes debe tener la distro.
|
||
#
|
||
# POR QUÉ EXISTE. `build-state.json` es el grafo de lo que EXISTE (768 recetas, cierra sin huérfanas).
|
||
# Lo que la distro DEBE tener no estaba en ningún lado: vivía en dos strings de shell de
|
||
# `product-userland-from-repo.sh`, otro de `mirada-usb.sh`, 55 listas planas en `tandas/` y una cola
|
||
# de 206 recetas KDE. Por eso "¿cuánto falta?" no tenía respuesta: el mapa cerraba perfecto, pero
|
||
# sólo cubría el territorio ya conquistado. Este fichero es el destino. (Plan: docs/plan-catalogo-objetivo.md)
|
||
#
|
||
# LA INVERSIÓN. `paquetes` lista sólo las RAÍCES — lo que un usuario pide POR NOMBRE. La clausura
|
||
# (las libs de las que cuelgan) la calcula el grafo siguiendo las aristas de deps, no la escribe un
|
||
# humano. Al revés de `tandas/base-system-3-libs.txt`, que enumera a mano miembros de la clausura.
|
||
#
|
||
# Un `perfil` = una imagen enviable. `hereda` compone (transitivo, sin ciclos). `cola` dice en qué
|
||
# árbol de recetas viven sus raíces: `corpus` = `recipes/`; otra cosa = `recipes/incoming-<x>/`, que
|
||
# `build-state.py` sólo carga con su flag (`--kde`) ⇒ los perfiles de una cola no cargada se saltan
|
||
# en vez de reportar raíces fantasma.
|
||
#
|
||
# Consumidores: `scripts/targets.py <perfil>` (expande a lista de nombres) y `scripts/build-state.py`
|
||
# (marca los nodos `wanted` y calcula la membresía de perfil de cada receta).
|
||
schema = "hammer-targets/1"
|
||
|
||
[perfil.base]
|
||
descripcion = "userland foundational C: la distro arranca y se usa (shell, VCS, privilegios, red, disco, TLS, proceso, editor, docs)"
|
||
# Lift verbatim de BASE_SYSTEM_PKGS (scripts/product-userland-from-repo.sh). De-Alpinizado y firmado,
|
||
# tandas base-system-1..3.
|
||
paquetes = [
|
||
"bash", "git", "sudo", "doas", "util-linux", "shadow", "kbd", "procps-ng",
|
||
"iproute2", "iputils", "dhcpcd", "e2fsprogs", "dosfstools", "parted", "rsync",
|
||
"sed", "tzdata", "vim", "dbus", "ca-certificates", "gnupg", "lsof", "strace",
|
||
"pciutils", "usbutils", "mandoc",
|
||
]
|
||
|
||
[perfil.cli]
|
||
descripcion = "la capa CLI moderna (Rust) encima de base — el userland real del producto"
|
||
hereda = ["base"]
|
||
# Lift verbatim de CLI_RUST_PKGS (scripts/product-userland-from-repo.sh).
|
||
paquetes = [
|
||
"bat", "fd", "ripgrep", "jq", "zoxide", "dust", "procs", "htop", "less", "tree",
|
||
"hyperfine", "delta", "eza", "sd", "tokei", "fzf", "skim", "git-cliff", "gitui",
|
||
"starship",
|
||
]
|
||
|
||
[perfil.escritorio-mirada]
|
||
descripcion = "rootfs slim del USB mirada: compositor Wayland propio sobre mesa software"
|
||
# Lift verbatim de PKGS (scripts/mirada-usb.sh). NO hereda base: es una imagen slim a propósito.
|
||
# El ORDEN importa (libs primero, binarios mirada al final) y se preserva.
|
||
paquetes = [
|
||
"mesa-swrast", "wayland", "libdrm", "seatd", "libinput", "libudev-zero",
|
||
"libxkbcommon", "pixman", "linux-pam", "mtdev", "libevdev",
|
||
"mirada-compositor", "mirada-greeter", "mirada-ctl",
|
||
]
|
||
|
||
[perfil.escritorio-kde]
|
||
descripcion = "escritorio KDE Plasma 6 desde fuente"
|
||
cola = "incoming-kde"
|
||
# Raíces del rootfs de metal (docs/HANDOFF-noche-kde-2026-07-14.md:135). El resto del escritorio
|
||
# —137 artefactos hidratados— es CLAUSURA de estas 7, no lista a mano.
|
||
paquetes = [
|
||
"plasma-workspace", "kwin", "kscreenlocker", "breeze", "frameworkintegration",
|
||
"qqc2-desktop-style", "plasma-integration",
|
||
# Huecos de RUNTIME confirmados por el triaje de la frontera (2026-07-22). Ninguno bloquea un
|
||
# build —todas las recetas que los piden ya están selladas— pero sin ellos el escritorio arranca
|
||
# roto: sin tipos de fichero, sin apps X11, sin diálogos de autorización y con los controles QML
|
||
# en un estilo genérico. Ver docs/state/frontera-triaje.toml para el porqué de cada uno.
|
||
"shared-mime-info", "xwayland", "polkit-qt-1", "qqc2-breeze-style",
|
||
# ⚠ `xwayland` sigue acá como RAÍZ pero su receta NO se va a escribir: lo provee una imagen ajena
|
||
# enjaulada, declarado en ../state/qorpa-ajenos.toml (ADR 0015 D5 capa 3, qorpa). El Xwayland vive
|
||
# DENTRO de la imagen —Arch y Fedora ya lo traen y se cuelga de kwin por el socket— así que el
|
||
# hueco se disuelve sin receta y sin tocar la postura Wayland-only. Queda como raíz A PROPÓSITO:
|
||
# la imagen lo NECESITA, y sacarlo de acá lo volvería invisible en vez de contado aparte. El grafo
|
||
# ya lo reporta con clase `ajeno` («+ 1 ajenas»), nunca sumado a las nativas. Los otros tres ya
|
||
# están sellados (2026-09-02/03).
|
||
# ── LA PRIMERA APP DE USUARIO FINAL QUE COMPARTEN LOS CUATRO ESCRITORIOS ──────────────────────
|
||
# `mpv` vive en el CORPUS, no en esta cola, justamente para poder listarse en las cuatro: una
|
||
# receta resuelve sibling-first y después el catálogo padre, así que desde acá se alcanza.
|
||
# Va de raíz por la lección que este mismo fichero ya aprendió con `foot` en el perfil de sway:
|
||
# una receta sellada que ningún perfil declara NO ESTÁ EN NINGUNA IMAGEN, y la métrica de
|
||
# clausura no lo puede ver porque mide lo declarado. Sellado ≠ instalado.
|
||
# ⚠ Hoy entra con tres huecos escritos en `recipes/mpv.toml`: audio por ALSA con
|
||
# `-Dpipewire-alsa=disabled` en las pipewire (⇒ no suena con PipeWire vivo), sin Lua (⇒ sin OSC)
|
||
# y sin vaapi (⇒ sin decodificación por hardware).
|
||
"mpv",
|
||
# ── LAS `.so` QUE mesa Y wayland PIDEN EN RUNTIME Y NINGÚN ARTEFACTO DEL CIERRE PROVEE ────────
|
||
# Medido el 2026-09-03 recorriendo los NEEDED de todo el cierre de esta imagen contra los SONAME
|
||
# que ese mismo cierre publica: `libEGL.so.1` pide `libexpat.so.1` y `libwayland-client.so.0` pide
|
||
# `libffi.so.8`, y las recetas canónicas de expat y libffi son `--disable-shared`. O sea que el
|
||
# rootfs hidratado los resolvía contra el **sysroot Alpine DEL LAB**.
|
||
# Es peor que una dep faltante: el lab NO entra en `hash_inputs`, así que la fuga es invisible para
|
||
# el store — el artefacto se da por bueno y sólo arranca en una máquina con Alpine debajo.
|
||
# No es un descubrimiento nuevo: es EXACTAMENTE lo que el perfil `escritorio-sway` ya documentó
|
||
# para `sway`, sólo que ahí se encontró a mano al armar la imagen y estas tres nunca se revisaron.
|
||
# Van de raíces (y no de `[deps]`) por lo mismo que las fuentes y el XKB: son data de RUNTIME y
|
||
# nadie las declara como dep de BUILD, así que la clausura no puede alcanzarlas por ninguna arista.
|
||
"expat-shared", "libffi-shared",
|
||
]
|
||
|
||
[perfil.escritorio-gnome]
|
||
descripcion = "escritorio GNOME (Wayland-nativo) desde fuente — 3er escritorio, X11 al tacho"
|
||
cola = "incoming-gnome"
|
||
# Raíces de una sesión GNOME que bootea a un shell usable. El resto es CLAUSURA. Hoy son HUECOS
|
||
# (cero recetas en incoming-gnome): build-state SALTA este perfil hasta que su cola se cargue
|
||
# (--gnome), así que declararlo NO reporta raíces fantasma — sólo lo hace un objetivo de primera
|
||
# clase que el sistema conoce. La frontera de autoría se descubre con `seed-gnome.py` (bootstrap por
|
||
# metadata mientras no haya recetas); OJO: ese cierre SOBREESTIMA ~5-10× (ver docs/state/seed-gnome.json
|
||
# y la memoria frente-gnome). El palo largo / keystone es spidermonkey(mozjs) → gjs → gnome-shell.
|
||
#
|
||
# ── SIN gnome-session / gnome-settings-daemon / gdm: APARCADAS POR DISEÑO (2026-08-07) ───────────
|
||
# Estaban acá y hacían que el perfil reportara 124/127 con 3 en `never` PARA SIEMPRE, que se lee
|
||
# como trabajo pendiente. No lo es: las tres mueren en GTK3, y GTK3 es una de las tres deudas que
|
||
# el frente GNOME aparcó a propósito (GTK3 / X11 / PAM). El diagnóstico completo, verificado contra
|
||
# el `meson.build` de cada tag, está en el encabezado de cada receta — que sigue en el repo, con su
|
||
# análisis intacto, por si algún día se autora el stack GTK3.
|
||
#
|
||
# NO son tres problemas, es UNO. Y no bloquean el escritorio: gnome-shell NO depende de
|
||
# gnome-session ni de g-s-d, ni en build ni para arrancar. El camino vivo es mutter → gnome-shell,
|
||
# lanzado por arje. El único que pedía gnome-session era gdm.
|
||
#
|
||
# ⚠ La contradicción costó: `targets.toml` las reclamaba como raíces mientras las recetas decían
|
||
# «aparcadas», así que el grafo reportaba deuda fantasma y el worker las reintentaba en cada ciclo.
|
||
# Dos documentos del repo diciendo cosas opuestas, y el que se mira primero es el grafo.
|
||
# Si algún día se autora GTK3, se vuelven a añadir acá y el objetivo reaparece solo.
|
||
paquetes = [
|
||
"mutter", "gnome-shell", "gjs",
|
||
"gsettings-desktop-schemas", "gnome-desktop", "xdg-desktop-portal-gnome",
|
||
# ── LA PRIMERA APP DE USUARIO FINAL QUE COMPARTEN LOS CUATRO ESCRITORIOS ──────────────────────
|
||
# `mpv` vive en el CORPUS, no en esta cola, justamente para poder listarse en las cuatro: una
|
||
# receta resuelve sibling-first y después el catálogo padre, así que desde acá se alcanza.
|
||
# Va de raíz por la lección que este mismo fichero ya aprendió con `foot` en el perfil de sway:
|
||
# una receta sellada que ningún perfil declara NO ESTÁ EN NINGUNA IMAGEN, y la métrica de
|
||
# clausura no lo puede ver porque mide lo declarado. Sellado ≠ instalado.
|
||
# ⚠ Hoy entra con tres huecos escritos en `recipes/mpv.toml`: audio por ALSA con
|
||
# `-Dpipewire-alsa=disabled` en las pipewire (⇒ no suena con PipeWire vivo), sin Lua (⇒ sin OSC)
|
||
# y sin vaapi (⇒ sin decodificación por hardware).
|
||
"mpv",
|
||
# ── LAS `.so` QUE mesa Y wayland PIDEN EN RUNTIME Y NINGÚN ARTEFACTO DEL CIERRE PROVEE ────────
|
||
# Medido el 2026-09-03 recorriendo los NEEDED de todo el cierre de esta imagen contra los SONAME
|
||
# que ese mismo cierre publica: `libEGL.so.1` pide `libexpat.so.1` y `libwayland-client.so.0` pide
|
||
# `libffi.so.8`, y las recetas canónicas de expat y libffi son `--disable-shared`. O sea que el
|
||
# rootfs hidratado los resolvía contra el **sysroot Alpine DEL LAB**.
|
||
# Es peor que una dep faltante: el lab NO entra en `hash_inputs`, así que la fuga es invisible para
|
||
# el store — el artefacto se da por bueno y sólo arranca en una máquina con Alpine debajo.
|
||
# No es un descubrimiento nuevo: es EXACTAMENTE lo que el perfil `escritorio-sway` ya documentó
|
||
# para `sway`, sólo que ahí se encontró a mano al armar la imagen y estas tres nunca se revisaron.
|
||
# Van de raíces (y no de `[deps]`) por lo mismo que las fuentes y el XKB: son data de RUNTIME y
|
||
# nadie las declara como dep de BUILD, así que la clausura no puede alcanzarlas por ninguna arista.
|
||
"expat-shared", "libffi-shared",
|
||
]
|
||
|
||
[perfil.escritorio-cosmic]
|
||
descripcion = "escritorio COSMIC (System76, Rust sobre smithay/iced) desde fuente — 4º escritorio"
|
||
cola = "incoming-cosmic"
|
||
# Las raíces son EXACTAMENTE lo que `cosmic-session/src/main.rs` levanta, más el gestor mismo y los
|
||
# datos que ningún `[deps]` alcanza. El resto es CLAUSURA.
|
||
#
|
||
# ── POR QUÉ ESTE PERFIL NO ES BUROCRACIA ────────────────────────────────────────────────────────
|
||
# Sin él, `yupana radio` sobre cualquier receta COMPARTIDA —libinput, libxkbcommon, libudev-zero,
|
||
# mesa, wayland— devuelve «IMÁGENES afectadas: (ninguna declarada)» para COSMIC, y el próximo que las
|
||
# toque MIDE DE MENOS. La campaña existe en el store y en el runbook, pero el ábaco no la ve: el radio
|
||
# de un re-hash es justo lo que el perfil convierte en dato.
|
||
#
|
||
# Nota de nombres, que acá no coinciden y ya costó una vez: el repo `cosmic-workspaces-epoch` produce
|
||
# el binario `cosmic-workspaces`, y el AppID tampoco lleva el sufijo. Se lista por el nombre de la
|
||
# RECETA, que es el del repo.
|
||
paquetes = [
|
||
"cosmic-comp", "cosmic-session", "cosmic-settings-daemon",
|
||
"cosmic-panel", "cosmic-launcher", "cosmic-app-library", "cosmic-workspaces-epoch",
|
||
"cosmic-notifications", "cosmic-osd", "cosmic-bg", "cosmic-idle",
|
||
# Los applets del panel. No es un componente que la sesión lance: lo spawnea el PANEL, por AppID,
|
||
# y sin ellos arranca y no se dibuja. Un binario multiplexor con veinte symlinks.
|
||
"cosmic-applets",
|
||
# El MOTOR del lanzador, de otro repo y fuera del pin `epoch-N`: `cosmic-launcher` sólo dibuja y
|
||
# lanza a `pop-launcher` como proceso hijo por PATH. Sin él, `Super` no abre nada.
|
||
"pop-launcher",
|
||
# Y el `qalc` al que el plugin `calc` le pasa la expresión: tercer nivel de hijo por PATH. Es la
|
||
# primera raíz del perfil que existe para que una TECLA dé un resultado, no para que algo enlace.
|
||
"libqalculate",
|
||
# La primera APLICACIÓN con ventana del catálogo, y la primera entrada de la biblioteca que no es
|
||
# `NoDisplay`. Hasta acá el perfil listaba escritorio; desde acá lista también lo que se abre.
|
||
"cosmic-term",
|
||
# La segunda: el gestor de ficheros. Sin `gvfs` (no hay glib compartida) ⇒ navegación local sí,
|
||
# montajes remotos no.
|
||
"cosmic-files",
|
||
# La tercera: el panel de control. Habla con los daemons por zbus, así que NO arrastra
|
||
# NetworkManager/udisks/accountsservice — sólo libdrm y dav1d sobre el juego fijo.
|
||
"cosmic-settings",
|
||
# La cuarta: el editor de texto, y la más barata de las cuatro — su árbol ya estaba compilado (usa
|
||
# `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",
|
||
# La sexta: la captura de pantalla. Cero C —el único `[deps] build = []` de la campaña— pero HOY
|
||
# NO FUNCIONA: todo su trabajo es `Screenshot::request()` contra `org.freedesktop.portal.Desktop`,
|
||
# y en la imagen no hay portal. Se lista igual para que el hueco sea visible.
|
||
"cosmic-screenshot",
|
||
# La CADENA DEL PORTAL, dos raíces porque son dos procesos que se encuentran por D-Bus en runtime:
|
||
# el frontend registra `org.freedesktop.portal.Desktop` y enruta al backend, que implementa
|
||
# Access/FileChooser/Screenshot/Settings/ScreenCast. Sin ellos no hay captura, ni selector de
|
||
# ficheros de portal, ni compartir pantalla.
|
||
"xdg-desktop-portal", "xdg-desktop-portal-cosmic",
|
||
# Y la SONDA con que se mide esa cadena. No es escritorio: es el instrumento. Se lista como raíz
|
||
# porque nadie la declara como dep y sin ella el perfil no incluiría con qué verificarse a sí
|
||
# mismo — un handshake de portal sólo se puede ejercer DESDE la sesión, con bus y compositor vivos.
|
||
"portal-probe",
|
||
# El GESTOR DE SESIÓN de pipewire. Se lista como raíz porque ningún `[deps]` lo alcanza: es un
|
||
# CLIENTE del demonio, no una librería de nadie. Trae consigo la glib COMPARTIDA (`glib-shared`),
|
||
# que no es la estática que usa el resto de la cola — wireplumber produce `.so` y la estática del
|
||
# corpus no es PIC. Construido y corriendo; NO desbloqueó ScreenCast (ver el runbook).
|
||
"wireplumber",
|
||
# 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.
|
||
"cosmic-icons", "hicolor-icon-theme", "xkeyboard-config", "dejavu-fonts",
|
||
# Lo que `start-cosmic` ejecuta y ningún `[deps]` pide: bash de verdad y el bus de sesión.
|
||
"bash", "dbus",
|
||
# ── LA PRIMERA APP DE USUARIO FINAL QUE COMPARTEN LOS CUATRO ESCRITORIOS ──────────────────────
|
||
# `mpv` vive en el CORPUS, no en esta cola, justamente para poder listarse en las cuatro: una
|
||
# receta resuelve sibling-first y después el catálogo padre, así que desde acá se alcanza.
|
||
# Va de raíz por la lección que este mismo fichero ya aprendió con `foot` en el perfil de sway:
|
||
# una receta sellada que ningún perfil declara NO ESTÁ EN NINGUNA IMAGEN, y la métrica de
|
||
# clausura no lo puede ver porque mide lo declarado. Sellado ≠ instalado.
|
||
# ⚠ Hoy entra con tres huecos escritos en `recipes/mpv.toml`: audio por ALSA con
|
||
# `-Dpipewire-alsa=disabled` en las pipewire (⇒ no suena con PipeWire vivo), sin Lua (⇒ sin OSC)
|
||
# y sin vaapi (⇒ sin decodificación por hardware).
|
||
"mpv",
|
||
# ── LAS `.so` QUE mesa Y wayland PIDEN EN RUNTIME Y NINGÚN ARTEFACTO DEL CIERRE PROVEE ────────
|
||
# Medido el 2026-09-03 recorriendo los NEEDED de todo el cierre de esta imagen contra los SONAME
|
||
# que ese mismo cierre publica: `libEGL.so.1` pide `libexpat.so.1` y `libwayland-client.so.0` pide
|
||
# `libffi.so.8`, y las recetas canónicas de expat y libffi son `--disable-shared`. O sea que el
|
||
# rootfs hidratado los resolvía contra el **sysroot Alpine DEL LAB**.
|
||
# Es peor que una dep faltante: el lab NO entra en `hash_inputs`, así que la fuga es invisible para
|
||
# el store — el artefacto se da por bueno y sólo arranca en una máquina con Alpine debajo.
|
||
# No es un descubrimiento nuevo: es EXACTAMENTE lo que el perfil `escritorio-sway` ya documentó
|
||
# para `sway`, sólo que ahí se encontró a mano al armar la imagen y estas tres nunca se revisaron.
|
||
# Van de raíces (y no de `[deps]`) por lo mismo que las fuentes y el XKB: son data de RUNTIME y
|
||
# nadie las declara como dep de BUILD, así que la clausura no puede alcanzarlas por ninguna arista.
|
||
"expat-shared", "libffi-shared",
|
||
]
|
||
|
||
[perfil.escritorio-sway]
|
||
descripcion = "WM Wayland ligero: sway sobre wlroots propio, sin X11 y sin systemd"
|
||
cola = "incoming-wlr"
|
||
hereda = ["cli"]
|
||
# Sellado entero el 2026-08-07. A diferencia de los otros tres escritorios, éste NO tiene una torre
|
||
# de C debajo: son una decena de binarios pequeños sobre wlroots, y por eso salió en una noche
|
||
# mientras KDE y GNOME fueron campañas de semanas.
|
||
#
|
||
# `hereda = ["cli"]` a propósito: un WM ligero sin userland debajo no se usa: hace falta la terminal
|
||
# y las herramientas.
|
||
#
|
||
# 2026-08-26: este comentario decía que `foot` «entra por la clausura de cli, así que no se lista
|
||
# acá». ERA FALSO y el grafo lo desmentía: `foot` está sellado en el corpus pero `perfil.cli` no lo
|
||
# lista entre sus raíces, así que ningún perfil lo arrastraba. El perfil daba 121/121 SIN EMULADOR DE
|
||
# TERMINAL — sellado completo y aun así inusable. Se detectó al hidratar la clausura para armar la
|
||
# imagen, no antes: la métrica de perfil mide la clausura de las raíces declaradas, y no puede ver lo
|
||
# que falta en la declaración. `foot` se lista ahora donde le toca, entre las raíces del escritorio.
|
||
#
|
||
# Sólo RAÍCES: la clausura —wlroots, mesa, wayland, libinput, seatd, cairo, pango, fcft…— la calcula
|
||
# el grafo siguiendo las aristas de deps. Escribirla a mano sería justo lo que targets.toml existe
|
||
# para no hacer.
|
||
paquetes = [
|
||
# el compositor y sus utilidades propias
|
||
"sway",
|
||
# lo que hace que se USE y no sólo arranque
|
||
"yambar", # barra de estado (yambar y no waybar: waybar exige gtkmm-3.0, o sea GTK3 + sus
|
||
# bindings C++, que es deuda aparcada por diseño. Medido, no supuesto.)
|
||
"foot", # emulador de terminal (misma familia que fcft/tllist, ya en la clausura)
|
||
"fuzzel", # lanzador de aplicaciones
|
||
# ── DATOS, no binarios: nadie los declara como dep de build, así que SÓLO entran como raíces ──
|
||
# Ninguna receta depende de una fuente ni de un mapa de teclado para COMPILAR, de modo que la
|
||
# clausura no puede alcanzarlos por más aristas que siga. Si no están acá, no están.
|
||
"dejavu-fonts", # sin UNA fuente, foot muere con «monospace::size=8: failed to match font»
|
||
"xkeyboard-config", # sin datos XKB: «xkbcommon: ERROR: failed to add default include path
|
||
# /usr/share/X11/xkb», y sway no completa el seat
|
||
# ── LAS TRES `.so` QUE sway PIDE Y EL CORPUS SÓLO PRODUCE COMO `.a` ─────────────────────────
|
||
# `sway` es `link = "dynamic"` a propósito (dlopea los drivers DRI de mesa) y sale con
|
||
# `NEEDED libz.so.1 / libexpat.so.1 / libffi.so.8`. Las canónicas son `--disable-shared`, así que
|
||
# ningún artefacto sellado producía esos `.so` y el rootfs hidratado los resolvía contra el
|
||
# sysroot Alpine DEL LAB. Peor que una dep faltante: el lab NO entra en `hash_inputs`, así que la
|
||
# fuga era invisible para el store — el artefacto se daba por bueno y sólo arrancaba en una
|
||
# máquina con Alpine debajo. Los otros nueve NEEDED de sway (pixman, drm, evdev, input, udev,
|
||
# wayland-server, wlroots, xkbcommon, libc) sí los cubre la clausura, porque esas recetas ya son
|
||
# `link = dynamic`. Como las tres son data de runtime y nadie las declara como dep de BUILD, van
|
||
# de raíces por la misma razón que las fuentes y el XKB de arriba.
|
||
"zlib-shared", "expat-shared", "libffi-shared",
|
||
"swaybg", # fondo de escritorio
|
||
"swaylock", # bloqueo de pantalla (con PAM: linux-pam SÍ está en el corpus)
|
||
"swayidle", # apagado por inactividad
|
||
# el par de captura y el portapapeles, sin los cuales media docena de flujos no cierran
|
||
"grim", "slurp", "wl-clipboard",
|
||
# ── LA PRIMERA APP DE USUARIO FINAL QUE COMPARTEN LOS CUATRO ESCRITORIOS ──────────────────────
|
||
# `mpv` vive en el CORPUS, no en esta cola, justamente para poder listarse en las cuatro: una
|
||
# receta resuelve sibling-first y después el catálogo padre, así que desde acá se alcanza.
|
||
# Va de raíz por la lección que este mismo fichero ya aprendió con `foot` en el perfil de sway:
|
||
# una receta sellada que ningún perfil declara NO ESTÁ EN NINGUNA IMAGEN, y la métrica de
|
||
# clausura no lo puede ver porque mide lo declarado. Sellado ≠ instalado.
|
||
# ⚠ Hoy entra con tres huecos escritos en `recipes/mpv.toml`: audio por ALSA con
|
||
# `-Dpipewire-alsa=disabled` en las pipewire (⇒ no suena con PipeWire vivo), sin Lua (⇒ sin OSC)
|
||
# y sin vaapi (⇒ sin decodificación por hardware).
|
||
"mpv",
|
||
# ── GRABADOR DE PANTALLA — sólo acá, y la razón es de PROTOCOLO, no de gusto ──────────────────
|
||
# `wf-recorder` captura por `wlr-screencopy`, que implementan los compositores wlroots. KWin y
|
||
# mutter NO lo implementan (usan el portal/ScreenCast), así que ponerlo en esas dos imágenes
|
||
# sería enviar una herramienta que no puede funcionar ahí — deuda fantasma con forma de app.
|
||
# En COSMIC habría que VERIFICAR si cosmic-comp expone el protocolo antes de listarlo.
|
||
# Es la app que cobra la promoción de pipewire al corpus (2026-09-03): antes grababa muda.
|
||
"wf-recorder",
|
||
]
|