⚙ cosmic: cosmic-settings — el panel de control, y NO arrastra medio sistema
Sellada b3:716dac53. Cola 33/33, escritorio-cosmic 71/71. Abre desde el lanzador con la barra lateral entera (Red, Bluetooth, Accesibilidad, Escritorio, Pantallas, Sonido, Energía, Entrada, Aplicaciones, Fecha y hora, Sistema y cuentas). Tarda ~20s con render por software; no está colgado. La sorpresa buena: nada de NetworkManager, libpulse, udisks ni accountsservice — habla con los daemons por zbus, que es Rust puro. Se verificó ANTES de escribir la receta listando los crates -sys del Cargo.lock, que es donde vive la verdad sobre qué C hace falta: sólo drm-sys, input-sys, libudev-sys, dav1d-sys, wayland-sys (dlopen) y gettext-sys. Regla barata: grep '^name = ".*-sys"' Cargo.lock antes de adivinar deps por lo que el programa hace. Volvió a morder la doble barra de cosmic-protocols// (404 de GitHub, muere en el fetch con tres reintentos). Segunda víctima ⇒ es patrón de la suite, no rareza de un repo. Instala 32 .desktop, uno por página. Y default_schema va con find, no cp plano: es el árbol <Componente>/v1/<clave> de cosmic-config, donde cada clave es un fichero con su nombre. Deuda que deja su propio log: org.freedesktop.locale1 no lo sirve nadie ⇒ la página de idioma no podrá cambiar nada. Mismo tipo que login1, mismo arreglo. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Delta semántico
Ninguna definición cambió: el cambio es de texto, documentación o datos.
6 archivos · +143 −2
diff --git a/docs/evidencia/cosmic-settings-qemu-2026-08-04.png b/docs/evidencia/cosmic-settings-qemu-2026-08-04.png
new file mode 100644
index 00000000..1757d210
Binary files /dev/null and b/docs/evidencia/cosmic-settings-qemu-2026-08-04.png differ
diff --git a/docs/runbooks/cosmic-desktop.md b/docs/runbooks/cosmic-desktop.md
index 9404fade..5fddf846 100644
--- a/docs/runbooks/cosmic-desktop.md
+++ b/docs/runbooks/cosmic-desktop.md
@@ -111,8 +111,9 @@ Más `cosmic-settings-daemon` y `xdg-desktop-portal-cosmic` fuera de esa lista.
| `libqalculate` 5.12.0 (`qalc`) | ✅ sellado — la calculadora del lanzador ANDA (ver abajo) | `b3:edb8d14d` |
| **`cosmic-term`** 1.5.0 — la 1ª APLICACIÓN | ✅ **sellada a la primera** (arrastra `cosmic-files` y `wgpu`) | `b3:d0ea1c1e` |
| `cosmic-files` 1.5.0 — la 2ª aplicación | ✅ sellada, **sin `gvfs` ni `wgpu`** (ver abajo) | `b3:48d2b072` |
+| `cosmic-settings` 1.5.0 — la 3ª aplicación | ✅ sellada (necesitó el parche de la doble barra) | `b3:716dac53` |
-**La cola está COMPLETA: 32 recetas, `escritorio-cosmic` 70/70.**
+**La cola está COMPLETA: 33 recetas, `escritorio-cosmic` 71/71.**
**El mínimo viable de una sesión son cuatro**: `cosmic-comp` + `cosmic-settings-daemon` +
`cosmic-notifications` + `cosmic-panel` (los tres `.expect` de la tabla de arriba).
@@ -612,6 +613,37 @@ sino lo que su `.pc` declara en `Requires`**. Declarar una dep trae su artefacto
pkg-config. Se lee en dos segundos con `grep ^Requires` sobre los `.pc` del artefacto, ANTES de
gastar el build: `glib-2.0.pc → libpcre2-8`, `gobject-2.0.pc → libffi`, `gio-2.0.pc → zlib`.
+### ⚙ `cosmic-settings`: un panel de control que NO arrastra medio sistema
+
+`docs/evidencia/cosmic-settings-qemu-2026-08-04.png`: abre desde el lanzador (`Super`, teclear
+«settings») con la barra lateral entera —Red, Bluetooth, Accesibilidad, Escritorio, Pantallas,
+Sonido, Energía, Dispositivos de entrada, Aplicaciones, Fecha y hora, Sistema y cuentas— y la página
+de Escritorio poblada. **Tarda ~20 s en aparecer** con render por software; no está colgado.
+
+**La sorpresa buena: no arrastra NetworkManager, ni libpulse, ni udisks, ni accountsservice.** Habla
+con los daemons por D-Bus vía `zbus`, que es Rust puro. Se verificó ANTES de escribir la receta
+listando los crates `-sys` del `Cargo.lock` —que es donde vive la verdad sobre qué C hace falta—, y
+salieron sólo: `drm-sys`, `input-sys`, `libudev-sys`, `dav1d-sys`, `wayland-sys` (dlopen) y
+`gettext-sys` (trae su propio C). O sea el juego fijo de todo cliente + `libdrm` + `dav1d`.
+**Regla barata que ahorra builds: `grep '^name = ".*-sys"' Cargo.lock | sort -u` antes de adivinar
+deps por lo que el programa *hace*.**
+
+**Volvió a morder la doble barra de `cosmic-protocols//`**, igual que en `cosmic-applets`: el
+manifiesto usa esa forma para que cargo trate la fuente como distinta y el `[patch]` no se apunte a
+sí mismo, GitHub le contesta 404, y el build muere en el *fetch* con tres reintentos de red y
+`failed to load source for dependency 'cosmic-client-toolkit'`. Mismo fix: mover la barra al medio
+(`pop-os//cosmic-protocols`) en `Cargo.toml` **y** `Cargo.lock`. **Segunda víctima ⇒ es un patrón de
+la suite, no una rareza de un repo**: conviene mirarlo apenas un `cargo vendor` da 404.
+
+Instala **32 `.desktop`**, uno por página, así que cada sección del panel aparece como entrada propia
+en la biblioteca. Y `resources/default_schema/` va con `find`, no con `cp` plano: es el árbol
+`<Componente>/v1/<clave>` de cosmic-config, donde **cada clave es un fichero cuyo nombre es la
+clave** — aplanarlo deja el escritorio sin esa configuración, callado.
+
+**Deuda que deja anotada su propio log:** `org.freedesktop.locale1 was not provided by any .service
+files` — nadie sirve `localed` en la imagen, así que la página de idioma no va a poder cambiar nada.
+Es del mismo tipo que `login1` (que sí resuelve arje-logind-compat), y se arregla del mismo modo.
+
### ⏱ El panel tiene un DEADLINE de arranque: con 4 vCPU sale mutilado
Medido: con `-smp 4` el panel arranca **sin ala izquierda, sin reloj y sin dock** —sólo la bandeja
@@ -628,7 +660,7 @@ El número de procesos no distingue «arrancó» de «dibujó». El framebuffer
## Lo que falta, en orden
-1. **Más aplicaciones**: `cosmic-settings` (el panel de control) y `cosmic-edit`.
+1. **Más aplicaciones**: `cosmic-edit`, `cosmic-store`, `cosmic-screenshot`.
2. **La cadena glib COMPARTIDA** (`glib` + `pcre2` + `libffi` + `zlib` con `.so`), que destrabaría
`gvfs` en cosmic-files y su applet del panel. Es una campaña propia y hay que decidir antes si la
imagen puede tener una sola glib.
diff --git a/docs/state/targets.toml b/docs/state/targets.toml
index bb273634..fe86871a 100644
--- a/docs/state/targets.toml
+++ b/docs/state/targets.toml
@@ -113,6 +113,9 @@ paquetes = [
# 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",
# 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-settings-protocols-url.patch b/recipes/incoming-cosmic/cosmic-settings-protocols-url.patch
new file mode 100644
index 00000000..59c8638d
--- /dev/null
+++ b/recipes/incoming-cosmic/cosmic-settings-protocols-url.patch
@@ -0,0 +1,33 @@
+--- a/Cargo.toml 2026-08-04 15:30:22.590268861 -0400
++++ b/Cargo.toml 2026-08-04 15:30:22.606608476 -0400
+@@ -70,8 +70,8 @@
+ # cosmic-text = { git = "https://github.com/pop-os/cosmic-text//", rev = "b017d7c" }
+
+ [patch.'https://github.com/pop-os/cosmic-protocols']
+-cosmic-protocols = { git = "https://github.com/pop-os/cosmic-protocols//", rev = "e95d895" }
+-cosmic-client-toolkit = { git = "https://github.com/pop-os/cosmic-protocols//", rev = "e95d895" }
++cosmic-protocols = { git = "https://github.com/pop-os//cosmic-protocols", rev = "e95d895" }
++cosmic-client-toolkit = { git = "https://github.com/pop-os//cosmic-protocols", rev = "e95d895" }
+
+ # [patch.'https://github.com/pop-os/cosmic-settings-daemon']
+ # cosmic-settings-config = { git = "https://github.com/pop-os/cosmic-settings-daemon//", branch = "input_nobuild" }
+--- a/Cargo.lock 2026-08-04 15:30:22.590189381 -0400
++++ b/Cargo.lock 2026-08-04 15:30:22.609054971 -0400
+@@ -1368,7 +1368,7 @@
+ [[package]]
+ name = "cosmic-client-toolkit"
+ version = "0.2.0"
+-source = "git+https://github.com/pop-os/cosmic-protocols//?rev=e95d895#e95d89504513e1407f89a189aca328fbecc9eeef"
++source = "git+https://github.com/pop-os//cosmic-protocols?rev=e95d895#e95d89504513e1407f89a189aca328fbecc9eeef"
+ dependencies = [
+ "bitflags 2.13.1",
+ "cosmic-protocols",
+@@ -1481,7 +1481,7 @@
+ [[package]]
+ name = "cosmic-protocols"
+ version = "0.2.0"
+-source = "git+https://github.com/pop-os/cosmic-protocols//?rev=e95d895#e95d89504513e1407f89a189aca328fbecc9eeef"
++source = "git+https://github.com/pop-os//cosmic-protocols?rev=e95d895#e95d89504513e1407f89a189aca328fbecc9eeef"
+ dependencies = [
+ "bitflags 2.13.1",
+ "wayland-backend",
diff --git a/recipes/incoming-cosmic/cosmic-settings.toml b/recipes/incoming-cosmic/cosmic-settings.toml
new file mode 100644
index 00000000..66b5df86
--- /dev/null
+++ b/recipes/incoming-cosmic/cosmic-settings.toml
@@ -0,0 +1,70 @@
+# cosmic-settings — el panel de control. Tercera aplicación con ventana del catálogo.
+#
+# ── LO QUE NO ARRASTRA, Y ES LA BUENA NOTICIA ───────────────────────────────────────────────────
+# Un panel de control suena a la peor dep del mundo: red, audio, discos, usuarios, energía,
+# bluetooth. En COSMIC no lo es, porque **habla con los daemons por D-Bus vía `zbus`, que es Rust
+# puro**: no enlaza NetworkManager, ni libpulse, ni udisks, ni accountsservice. Se comprobó ANTES de
+# escribir la receta, listando los crates `-sys` del `Cargo.lock`, que es donde vive la verdad sobre
+# qué C hace falta:
+# drm-sys → libdrm · input-sys → libinput · libudev-sys → libudev-zero · dav1d-sys → dav1d
+# wayland-sys → dlopen (runtime) · gettext-sys → trae su propio C
+# O sea: el juego fijo de todo cliente, más `libdrm` (configuración de pantallas) y `dav1d`, que
+# vuelve a aparecer por la unificación de features de cargo — la misma que lo trajo con cosmic-bg.
+#
+# `rust-version = "1.93"` en el workspace; el sandbox tiene 1.96 ⇒ entra sin tocar nada.
+name = "cosmic-settings"
+version = "1.5.0"
+
+[source]
+tarball = "https://github.com/pop-os/cosmic-settings/archive/epoch-1.5.0/cosmic-settings-epoch-1.5.0.tar.gz"
+sha256 = "06070fae46b77a57f906b0ee670e9d5c8ec10604359653bc6ca7b1eece6237ec"
+# ⚠ LA MISMA BARRA DE MÁS QUE EN `cosmic-applets`, y falla igual de temprano: el manifiesto apunta a
+# `https://github.com/pop-os/cosmic-protocols//` (dos barras al final) para que cargo trate esa
+# fuente como DISTINTA de la normal y el `[patch]` de al lado no se apunte a sí mismo. GitHub
+# devuelve **404** a esa forma, así que `cargo vendor` no puede clonar y el build muere en el fetch:
+# failed to load source for dependency `cosmic-client-toolkit` ← con tres reintentos de red
+# La barra se MUEVE al medio (`pop-os//cosmic-protocols`), que es la forma que usa `cosmic-comp` —y
+# por eso ése construyó sin parche—. Se tocan `Cargo.toml` **y** `Cargo.lock`: cambiar sólo uno rompe
+# el `--locked` del build hermético.
+patches = ["cosmic-settings-protocols-url.patch"]
+
+[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"
+# El workspace es VIRTUAL (no tiene paquete raíz) pero declara
+# `default-members = ["cosmic-settings"]`, así que `-p` deja el target único que `cargo rustc --`
+# exige. Sin `-p`, cargo intentaría construir los ~30 miembros (`pages/*`, `subscriptions/*`).
+flags = ["-p", "cosmic-settings", "--bin", "cosmic-settings"]
+
+[build.phases]
+# El `just install` traducido, con `rootdir=/`. Son CUATRO clases de fichero y ninguna es opcional:
+# · el binario;
+# · `target/xdgen/` → los `.desktop`, que el build GENERA (crate `xdgen`). Acá son VARIOS, uno por
+# página del panel (pantalla, sonido, red…), así que la biblioteca lista cada sección como
+# entrada propia. Por eso es un `find`, no un `cp` de un fichero.
+# · `resources/default_schema/` → la config por defecto de cosmic-config, mismo árbol
+# `<Componente>/v1/<clave>` que ya mordió en cosmic-comp: **cada clave es UN fichero cuyo nombre
+# es la clave**, así que hay que preservar la estructura (de ahí el `find`, no un `cp` plano).
+# · las reglas de polkit: sin ellas el panel abre pero no puede cambiar nada que pida autoridad
+# (usuarios, hora del sistema). Van con el paquete, no con el shim de arje.
+install = '''
+mkdir -p /out/usr/bin /out/usr/share/applications /out/usr/share/metainfo \
+ /out/usr/share/cosmic /out/usr/share/icons/hicolor \
+ /out/usr/share/polkit-1/actions /out/usr/share/polkit-1/rules.d
+cp target/release/cosmic-settings /out/usr/bin/cosmic-settings
+chmod 755 /out/usr/bin/cosmic-settings
+cp resources/com.system76.CosmicSettings.metainfo.xml /out/usr/share/metainfo/
+cp resources/polkit-1/rules.d/cosmic-settings.rules /out/usr/share/polkit-1/rules.d/
+cp resources/polkit-1/actions/com.system76.CosmicSettings.Users.policy /out/usr/share/polkit-1/actions/
+[ -d target/xdgen ] && (cd target/xdgen && find . -type f -exec cp --parents '{}' /out/usr/share/applications/ \;) || true
+(cd resources/default_schema && find . -type f -exec cp --parents '{}' /out/usr/share/cosmic/ \;)
+(cd resources/icons && find . -type f -exec cp --parents '{}' /out/usr/share/icons/hicolor/ \;)
+'''
+
+[deps]
+# El juego fijo de todo cliente + `libdrm` (páginas de pantalla) + `dav1d` (unificación de features
+# de cargo, igual que en cosmic-bg). Nada de NetworkManager/pipewire/udisks: todo eso es zbus.
+build = ["libxkbcommon", "pkgconf", "libudev-zero", "libinput", "libdrm", "dav1d"]
diff --git a/scripts/cosmic/hydrate-cosmic.sh b/scripts/cosmic/hydrate-cosmic.sh
index 00c3dfb7..39343dbd 100755
--- a/scripts/cosmic/hydrate-cosmic.sh
+++ b/scripts/cosmic/hydrate-cosmic.sh
@@ -61,6 +61,9 @@ else
recipes/incoming-cosmic/cosmic-term.toml
# …y el gestor de ficheros, la segunda. Su `.desktop` tampoco es `NoDisplay`.
recipes/incoming-cosmic/cosmic-files.toml
+ # …y el panel de control, la tercera. Instala 32 `.desktop`: uno por página (Pantalla, Sonido,
+ # Red…), así que la biblioteca lista cada sección como entrada propia.
+ recipes/incoming-cosmic/cosmic-settings.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