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 604Rust 56Shell 36Markdown 281227 Definiciones

receta: wireplumber al corpus — KDE y sway tenían pipewire y no encaminaban nada

  wireplumber  b3:bd5471f00f5cbd229fcb252ceced41c35547725733708426bf7a42ea3e39a7bd

Arreglo del hueco que destapó el barrido de servicios. `pipewire` está en los cuatro escritorios y
arranca, pero se construyó con `-Dsession-managers=[]`: sin gestor de sesión no hay política de qué
es entrada, qué es salida ni qué se enlaza con qué, y el sink que ve la aplicación es `auto_null`
—el nodo de descarte—. Audio que parece vivo y no suena.

wireplumber existía en `incoming-gnome` y en `incoming-cosmic`, y desde KDE o sway NO SE ALCANZA:
una receta resuelve sibling-first y después el catálogo PADRE, nunca una cola hermana. Por eso la
copia va al corpus, que es el único sitio desde el que las cuatro imágenes la ven — el mismo
argumento por el que viven acá `mpv` y `atuq`.

Medido antes de copiar, no supuesto:
- `yupana radio wireplumber` = **0 dependientes** ⇒ esta copia no fuerza un solo rebuild ajeno.
- Las tres variantes sellan DISTINTO (gnome b3:71afcef4…, cosmic b3:7ad25184…, corpus b3:bd5471f0…).
  No es la enfermedad de las dos glib: ninguna imagen hidrata dos wireplumber, cada una toma la
  suya. Es la figura de las tres `pulseaudio`, que también se quedaron a propósito.
- Consolidar las tres en una es el trabajo siguiente y NO se hace de paso: el método está probado
  (es lo que se hizo con pipewire el 2026-09-03) pero GNOME y COSMIC están validados y cambiarles
  el artefacto de audio sin probarlos sería pagar con su imagen una limpieza que no urge.

424363fbdc9ce1e11980cf0861367e1fa654e62c · por Sergio · (hace 1 mes) · padre 47ec0d955 · ver el árbol en este commit

Delta semántico

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

1 archivos · +111 −0

diff --git a/recipes/wireplumber.toml b/recipes/wireplumber.toml
new file mode 100644
index 00000000..1f972d4a
--- /dev/null
+++ b/recipes/wireplumber.toml
@@ -0,0 +1,111 @@
+# wireplumber 0.5.15 — EL GESTOR DE SESIÓN de PipeWire, **en el corpus**. La pieza que faltaba para
+# que el audio sea audio y no sólo un socket que acepta conexiones.
+#
+# ══ POR QUÉ EXISTE ESTA COPIA, Y NO ES UN DESCUIDO (2026-09-13) ════════════════════════════════
+# El barrido de servicios midió que **`escritorio-kde` y `escritorio-sway` tienen `pipewire` y NO
+# tienen `wireplumber`**: el demonio arranca, acepta clientes, y **no enumera ni enruta un solo
+# dispositivo** — el sink que ve la aplicación es `auto_null`, que es el nodo de descarte. Audio que
+# parece vivo y no suena.
+#
+# wireplumber existía en `incoming-gnome` y en `incoming-cosmic`, y **desde KDE o sway no se
+# alcanza**: una receta resuelve sibling-first y después el catálogo PADRE, nunca una cola hermana.
+# Por eso la copia va al corpus, que es el único sitio desde el que las cuatro imágenes la ven. Es
+# exactamente el argumento por el que `mpv` y `atuq` viven acá y no en una cola.
+#
+# ⚠ HOY HAY TRES VARIANTES (corpus, gnome, cosmic) Y SUS TRES HASHES DIFIEREN — medido, no supuesto:
+#     incoming-gnome   b3:71afcef4…      incoming-cosmic  b3:7ad25184…      corpus  (éste)
+# Eso NO es la enfermedad de las dos glib: ninguna imagen hidrata dos wireplumber, cada una toma la
+# suya. Es la misma figura que las tres `pulseaudio`, que también se quedaron a propósito.
+# **Consolidar las tres en una es el trabajo siguiente**, y el método ya está probado: es lo que se
+# hizo con `pipewire` el 2026-09-03 —promover UNA, jubilar las de cola, contar los rebuilds— sólo que
+# ahí las tres sellaban distinto y hubo que decidir cuál ganaba. Acá pasa lo mismo, así que no se
+# hace de paso: GNOME y COSMIC están validados y cambiarles el artefacto de audio sin probarlos sería
+# pagar con su imagen una limpieza que no urge.
+#
+# `radio` = 0 dependientes ⇒ esta copia no fuerza un solo rebuild ajeno.
+#
+# Lo que sigue es la documentación de la variante de GNOME, de la que ésta es copia literal.
+#
+# QUÉ APORTA, y por qué no alcanzaba con pipewire: `pipewire` se construyó con
+# `-Dsession-managers=[]`, así que arranca, acepta clientes y gnome-shell conecta —el
+# `Gvc-WARNING: Failed to connect context` desapareció— pero **no enumera ni enruta dispositivos**: no
+# hay política de qué es entrada, qué es salida, qué se enlaza con qué. El sink que veía el shell era
+# `auto_null` («Dummy Output»). Eso es el nodo de descarte, no una tarjeta.
+#
+# wireplumber es esa política, y está escrita EN LUA: embebe un intérprete (`lib/wplua`) y sus reglas
+# viven en `src/scripts/*.lua`. De ahí que la dep interesante de esta receta no sea PipeWire sino
+# **`lua`**, que hubo que autorar (el Makefile de Lua no produce `.so` ni `.pc`; ver esa receta).
+#
+# `-Dsystem-lua=true` es obligatorio acá: por defecto wireplumber usa su `subprojects/lua.wrap`, que
+# **DESCARGA Lua 5.5 de lua.org**, y el sandbox va con `--wrap-mode=nodownload`. Con la perilla
+# prendida busca por pkg-config `lua-5.5`/`lua5.5`/`lua55`, después las 5.4 y después las 5.3
+# (meson.build:91-95): nuestra `lua5.4.pc` entra por la segunda tanda.
+#
+# `-Delogind=enabled` — cuarta vez que la C-ABI de logind aparece en esta campaña, y la primera en que
+# está desde el principio: `libelogind` (arje-sdlogin-compat) ya está sellada. wireplumber la usa para
+# saber si la sesión está activa antes de tomar los dispositivos de audio, que es exactamente el
+# problema que resuelve nuestro shim.
+#
+# ✅ RESUELTO (2026-07-30): el `-I$PWD/lib/wp` de `c_args` NO HACÍA FALTA y ya no está.
+#
+# Se había agregado porque el build cortaba con `../lib/wp/wp.h:13: fatal error: 'client.h' file not
+# found` — un header que SÍ existe justo al lado del que lo incluye, o sea que el `#include "..."`
+# relativo debía haberlo encontrado. La explicación real era la CARRERA DEL ADR 0012: otro agente
+# construía en el mismo repo y borraba árboles de `work/sources/` en pleno build. Esa carrera produce
+# exactamente esa firma —ficheros que existen cuando los mirás después y no existían al compilar—, y es
+# de las que hacen inventar arreglos para síntomas que no son del código.
+#
+# **Re-probado con el repo QUIETO y sella igual sin la bandera.** Confirmado, no supuesto: se comprobó
+# primero que no hubiera ningún `takana build` corriendo, después se quitó el flag y el build pasó
+# entero. La lección: antes de agregar una bandera que no se explica, mirar si hay otro build vivo.
+#
+# Por lo mismo se QUITÓ de esta receta un `rm -rf output` que había puesto antes en el configure: con
+# el árbol compartido, borrar el directorio de build es sabotear a quien esté compilando en paralelo.
+#
+# Apagados: `-Dsystemd=disabled` y sus units (acá PID1 es arje-zero, y el arranque lo hace
+# `gnome-start`); `-Ddoc=disabled` (falta sphinx/doxygen); `-Dtests=false -Ddbus-tests=false`;
+# `-Dintrospection=disabled` porque nadie carga `Wp-0.5` por typelib — el shell habla con PipeWire por
+# el protocolo de PulseAudio, no con wireplumber por GObject.
+name    = "wireplumber"
+version = "0.5.15"
+license = "MIT"
+
+[source]
+tarball = "https://gitlab.freedesktop.org/pipewire/wireplumber/-/archive/0.5.15/wireplumber-0.5.15.tar.gz"
+sha256  = "baa121bc918df5fa0e0e70755bb1c99ffab0ab107225ecf99aa470e2c6ba5e7b"
+
+[build]
+compiler = "zig-cc"
+target   = "x86_64-linux-musl"
+link     = "dynamic"
+
+[build.phases]
+configure = '''
+set -e
+PKG_CONFIG_PATH=/usr/lib/pkgconfig PYTHONPATH=/usr/lib/python3.12/site-packages meson setup output \
+  --prefix=/usr --buildtype=release --wrap-mode=nodownload \
+  -Ddefault_library=shared \
+  -Dsystem-lua=true -Dsystem-lua-version=auto \
+  -Delogind=enabled -Dsystemd=disabled \
+  -Dsystemd-system-service=false -Dsystemd-user-service=false \
+  -Dintrospection=disabled -Ddoc=disabled \
+  -Dtests=false -Ddbus-tests=false \
+  -Dc_args=-Wno-error=date-time
+'''
+compile = "PYTHONPATH=/usr/lib/python3.12/site-packages ninja -C output"
+install = "PYTHONPATH=/usr/lib/python3.12/site-packages DESTDIR=/out meson install -C output --no-rebuild"
+
+[deps]
+build = ["meson", "samurai", "python3", "pkgconf", "gettext-tiny", "lua", "pipewire",
+  "glib", "dbus-shared", "libelogind", "alsa-lib", "libsndfile", "pulseaudio",
+  "expat", "pcre2", "libffi", "libudev-zero", "zlib-shared"]
+
+# ── EL SERVICIO QUE ESTE PAQUETE TRAE (SDD 30) ──────────────────────────────────────────────────
+# El gestor de sesión de pipewire. Mismo `scope = "session"` y misma advertencia: fuera de mirada
+# nadie entrega Cards de sesión todavía.
+[[service]]
+label   = "wireplumber"
+id      = "01HQAR53D4M2NBV8KZTYXFQA28"
+exec    = "/usr/bin/wireplumber"
+scope   = "session"
+restart = { initial_ms = 500, max_ms = 20000 }