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 1534Shell 199Rust 109Markdown 993713 Sutichaykuna

fuentes: dejavu al corpus (arregla un `wanted` que dejé), KDE con fuente, y la nerd de monospace

TRES COSAS, y la primera es un bug mío de hace un rato.

1. dejavu-fonts PROMOVIDA AL CORPUS — arregla un nodo `wanted` que introduje.
   Al añadirla de raíz a escritorio-gnome quedó como `wanted`: la receta existía en
   incoming-{kde,wlr,cosmic} y NO en incoming-gnome ni en el corpus, y una receta no
   alcanza una cola hermana. O sea que la raíz no resolvía a nada y GNOME seguía sin
   fuentes. `wanted` NO es `debt`, así que drenaje.json seguía diciendo deuda=0 y el
   hueco no salía por ninguna métrica — se vio mirando el nodo en build-state-gnome.json.
   Promoción gratis: las tres copias sellaban el mismo hash (b3:5b3a5df3) y sus deps
   están vacías. Las tres se jubilan. Ahora los cuatro perfiles resuelven a corpus y los
   cinco grafos quedan con CERO nodos `wanted`.

2. dejavu-fonts en escritorio-kde, como se pidió. Tenía UNA fuente y de rebote, dentro
   de qtbase — apoyarse en un detalle de empaquetado de Qt deja sin nada a todo lo que
   no es Qt.

3. dejavu-fonts-nerd 3.5.1 en los CUATRO perfiles: DejaVu Sans Mono parcheada con Nerd
   Fonts. Lo que se midió antes de escribirla, porque cambia la forma de hacerla:

   - SE AÑADE, NO REEMPLAZA, y no es prudencia: la licencia de Bitstream Vera exige que
     una fuente modificada se RENOMBRE. Por eso upstream la llama «DejaVuSansM Nerd Font
     Mono» — leído del name de la TTF, no supuesto. Una fuente nerdeada NO puede
     responder al nombre de la original; sustituirla rompería a todo lo que pide «DejaVu
     Sans Mono», empezando por foot, que ya murió una vez así.
   - SÓLO LA MONOESPACIADA: upstream no publica DejaVu Sans ni Serif parcheadas, y en una
     fuente de interfaz proporcional esos glifos no los pide nadie. «Todas nerdeadas» no
     se puede cumplir al pie de la letra.
   - SÓLO UNA DE LAS TRES VARIANTES: NerdFont / NerdFontMono / NerdFontPropo son los
     mismos glifos con distinto avance. Las doce pesan 32 MB; las cuatro de Mono, 11 MB.
     Se quedan las Mono, que son las correctas para una rejilla de terminal. Referencia:
     la familia DejaVu ENTERA son 9,8 MB.

   ⚠ EL NÚMERO DEL .conf ESTÁ MEDIDO, NO ELEGIDO. fontconfig carga conf.d en orden
   alfabético y el <prefer> que llega antes gana. Con 60-nerd-monospace.conf —que ordena
   después de 60-latin.conf, que ya prefiere Noto/DejaVu/Inconsolata— `fc-match
   monospace` seguía dando DejaVu Sans Mono: la conf estaba INSTALADA Y ERA INERTE, el
   mismo modo de fallar que el plugin ALSA de PipeWire. A 59- gana. 45-latin.conf también
   menciona monospace pero usa <default>, no <prefer>, así que no compite.

   ⚠ Y strip_components = 0, que tampoco es cosmético: el tarball de nerd-fonts es PLANO
   y con el default de 1 el árbol de fuentes queda VACÍO — el build no se detiene ahí,
   sigue y falla más tarde en el cp, con un mensaje que no menciona la extracción.

   ⚠ LA LICENCIA NECESITA UNA PASADA HUMANA antes de `hammer pack`: el LICENSE.txt del
   tarball cubre sólo DejaVu/Bitstream Vera y no menciona los ~10 conjuntos de iconos
   importados, que tienen licencias propias (Font Awesome CC-BY-4.0, Octicons MIT,
   Material OFL, Powerline MIT…). El campo dice lo DOCUMENTADO, no el conjunto real; no
   se inventa una cadena SPDX. Anotado en la receta.

EVIDENCIA, contra el conf.d REAL del artefacto de fontconfig:
  monospace          -> DejaVuSansM Nerd Font Mono   (los iconos llegan)
  "DejaVu Sans Mono" -> DejaVu Sans Mono             (intacta)
  sans-serif         -> DejaVu Sans                  (sin tocar)
  serif              -> DejaVu Serif                 (sin tocar)

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XB2iEmxeLZgzqNfhWChrLo

cab9439644b11b5f5dc0df29eaece09cdec13027 · ruwaq Sergio · (1 killa ñawpaq) · tayta be7aa0ef3 · kay commitpi sach'ata qhaway

Semántico sayk'uy

Mana ima sutichaypas t'ikrakurqanchu: qillqalla, yachachiylla utaq willaylla t'ikrakurqan.

11 qillqakuna · +380 −127

diff --git a/docs/state/build-state-cosmic.json b/docs/state/build-state-cosmic.json
index f20808c9..e3dd542e 100644
--- a/docs/state/build-state-cosmic.json
+++ b/docs/state/build-state-cosmic.json
@@ -1,14 +1,14 @@
 {
  "schema": "hammer-build-state/1",
  "totals": {
-  "recipes": 854,
-  "nodes": 855,
-  "sealed": 854,
+  "recipes": 855,
+  "nodes": 856,
+  "sealed": 855,
   "ajeno": 1
  },
  "by_class": {
   "ajeno": 1,
-  "c": 201,
+  "c": 202,
   "go": 362,
   "gui": 35,
   "kernel": 6,
@@ -17,11 +17,11 @@
  "debt_by_class": {},
  "by_queue": {
   "corpus": {
-   "sealed": 815,
+   "sealed": 817,
    "ajeno": 1
   },
   "incoming-cosmic": {
-   "sealed": 39
+   "sealed": 38
   }
  },
  "by_profile": {
@@ -36,9 +36,9 @@
    "sealed": 75
   },
   "escritorio-cosmic": {
-   "raices": 37,
-   "clausura": 131,
-   "sealed": 131
+   "raices": 38,
+   "clausura": 132,
+   "sealed": 132
   },
   "escritorio-mirada": {
    "raices": 14,
@@ -3263,13 +3263,36 @@
    "compiler": "zig-cc",
    "deps": [],
    "cls": "c",
-   "queue": "incoming-cosmic",
+   "queue": "corpus",
    "hash": "b3:5b3a5df3d75586315f4371f05be021a58ee31d5f664b4253957a35a6c7b95d71",
    "state": "sealed",
    "blocked_by": [],
    "unblocks": 0,
    "perfiles": [
-    "escritorio-cosmic"
+    "escritorio-cosmic",
+    "escritorio-gnome",
+    "escritorio-kde",
+    "escritorio-sway"
+   ],
+   "dependientes_total": 0
+  },
+  "dejavu-fonts-nerd": {
+   "iname": "dejavu-fonts-nerd",
+   "version": "3.5.1",
+   "link": "dynamic",
+   "compiler": "zig-cc",
+   "deps": [],
+   "cls": "c",
+   "queue": "corpus",
+   "hash": "b3:387cf391f09cec628088845dadd94a5268e61acbd1c04dcc12c1a035c4d4d591",
+   "state": "sealed",
+   "blocked_by": [],
+   "unblocks": 0,
+   "perfiles": [
+    "escritorio-cosmic",
+    "escritorio-gnome",
+    "escritorio-kde",
+    "escritorio-sway"
    ],
    "dependientes_total": 0
   },
diff --git a/docs/state/build-state-gnome.json b/docs/state/build-state-gnome.json
index be070a81..604e0686 100644
--- a/docs/state/build-state-gnome.json
+++ b/docs/state/build-state-gnome.json
@@ -1,30 +1,27 @@
 {
  "schema": "hammer-build-state/1",
  "totals": {
-  "recipes": 880,
-  "nodes": 882,
-  "sealed": 880,
-  "ajeno": 1,
-  "wanted": 1
+  "recipes": 882,
+  "nodes": 883,
+  "sealed": 882,
+  "ajeno": 1
  },
  "by_class": {
   "ajeno": 1,
-  "c": 240,
+  "c": 242,
   "go": 362,
   "gui": 42,
   "kernel": 6,
-  "rust": 230,
-  "wanted": 1
+  "rust": 230
  },
  "debt_by_class": {},
  "by_queue": {
   "corpus": {
-   "sealed": 806,
+   "sealed": 808,
    "ajeno": 1
   },
   "incoming-gnome": {
-   "sealed": 74,
-   "wanted": 1
+   "sealed": 74
   }
  },
  "by_profile": {
@@ -39,9 +36,9 @@
    "sealed": 74
   },
   "escritorio-gnome": {
-   "raices": 14,
-   "clausura": 148,
-   "sealed": 148
+   "raices": 15,
+   "clausura": 150,
+   "sealed": 150
   },
   "escritorio-mirada": {
    "raices": 14,
@@ -49,7 +46,7 @@
    "sealed": 33
   }
  },
- "sin_perfil": 662,
+ "sin_perfil": 661,
  "orphan_deps": [],
  "topo_ok": true,
  "nodes": {
@@ -2968,17 +2965,42 @@
   },
   "dejavu-fonts": {
    "iname": "dejavu-fonts",
-   "version": null,
-   "link": null,
-   "compiler": null,
+   "version": "2.37",
+   "link": "dynamic",
+   "compiler": "zig-cc",
    "deps": [],
-   "cls": "wanted",
-   "queue": "incoming-gnome",
-   "hash": null,
-   "state": "wanted",
+   "cls": "c",
+   "queue": "corpus",
+   "hash": "b3:5b3a5df3d75586315f4371f05be021a58ee31d5f664b4253957a35a6c7b95d71",
+   "state": "sealed",
    "blocked_by": [],
    "unblocks": 0,
-   "perfiles": [],
+   "perfiles": [
+    "escritorio-cosmic",
+    "escritorio-gnome",
+    "escritorio-kde",
+    "escritorio-sway"
+   ],
+   "dependientes_total": 0
+  },
+  "dejavu-fonts-nerd": {
+   "iname": "dejavu-fonts-nerd",
+   "version": "3.5.1",
+   "link": "dynamic",
+   "compiler": "zig-cc",
+   "deps": [],
+   "cls": "c",
+   "queue": "corpus",
+   "hash": "b3:387cf391f09cec628088845dadd94a5268e61acbd1c04dcc12c1a035c4d4d591",
+   "state": "sealed",
+   "blocked_by": [],
+   "unblocks": 0,
+   "perfiles": [
+    "escritorio-cosmic",
+    "escritorio-gnome",
+    "escritorio-kde",
+    "escritorio-sway"
+   ],
    "dependientes_total": 0
   },
   "delta": {
diff --git a/docs/state/build-state-kde.json b/docs/state/build-state-kde.json
index a4f471a1..006ba4d6 100644
--- a/docs/state/build-state-kde.json
+++ b/docs/state/build-state-kde.json
@@ -1,14 +1,14 @@
 {
  "schema": "hammer-build-state/1",
  "totals": {
-  "recipes": 997,
-  "nodes": 998,
-  "sealed": 997,
+  "recipes": 998,
+  "nodes": 999,
+  "sealed": 998,
   "ajeno": 1
  },
  "by_class": {
   "ajeno": 1,
-  "c": 362,
+  "c": 363,
   "go": 362,
   "gui": 38,
   "kernel": 6,
@@ -17,10 +17,10 @@
  "debt_by_class": {},
  "by_queue": {
   "corpus": {
-   "sealed": 799
+   "sealed": 801
   },
   "incoming-kde": {
-   "sealed": 198,
+   "sealed": 197,
    "ajeno": 1
   }
  },
@@ -36,9 +36,9 @@
    "sealed": 70
   },
   "escritorio-kde": {
-   "raices": 16,
-   "clausura": 197,
-   "sealed": 196,
+   "raices": 18,
+   "clausura": 199,
+   "sealed": 198,
    "ajeno": 1
   },
   "escritorio-mirada": {
@@ -47,7 +47,7 @@
    "sealed": 29
   }
  },
- "sin_perfil": 706,
+ "sin_perfil": 705,
  "orphan_deps": [],
  "topo_ok": true,
  "nodes": {
@@ -3030,12 +3030,37 @@
    "compiler": "zig-cc",
    "deps": [],
    "cls": "c",
-   "queue": "incoming-kde",
+   "queue": "corpus",
    "hash": "b3:5b3a5df3d75586315f4371f05be021a58ee31d5f664b4253957a35a6c7b95d71",
    "state": "sealed",
    "blocked_by": [],
    "unblocks": 0,
-   "perfiles": [],
+   "perfiles": [
+    "escritorio-cosmic",
+    "escritorio-gnome",
+    "escritorio-kde",
+    "escritorio-sway"
+   ],
+   "dependientes_total": 0
+  },
+  "dejavu-fonts-nerd": {
+   "iname": "dejavu-fonts-nerd",
+   "version": "3.5.1",
+   "link": "dynamic",
+   "compiler": "zig-cc",
+   "deps": [],
+   "cls": "c",
+   "queue": "corpus",
+   "hash": "b3:387cf391f09cec628088845dadd94a5268e61acbd1c04dcc12c1a035c4d4d591",
+   "state": "sealed",
+   "blocked_by": [],
+   "unblocks": 0,
+   "perfiles": [
+    "escritorio-cosmic",
+    "escritorio-gnome",
+    "escritorio-kde",
+    "escritorio-sway"
+   ],
    "dependientes_total": 0
   },
   "delta": {
diff --git a/docs/state/build-state-wlr.json b/docs/state/build-state-wlr.json
index 4505b452..90736838 100644
--- a/docs/state/build-state-wlr.json
+++ b/docs/state/build-state-wlr.json
@@ -1,14 +1,14 @@
 {
  "schema": "hammer-build-state/1",
  "totals": {
-  "recipes": 831,
-  "nodes": 832,
-  "sealed": 831,
+  "recipes": 832,
+  "nodes": 833,
+  "sealed": 832,
   "ajeno": 1
  },
  "by_class": {
   "ajeno": 1,
-  "c": 199,
+  "c": 200,
   "go": 362,
   "gui": 35,
   "kernel": 6,
@@ -17,11 +17,11 @@
  "debt_by_class": {},
  "by_queue": {
   "corpus": {
-   "sealed": 816,
+   "sealed": 818,
    "ajeno": 1
   },
   "incoming-wlr": {
-   "sealed": 15
+   "sealed": 14
   }
  },
  "by_profile": {
@@ -41,9 +41,9 @@
    "sealed": 33
   },
   "escritorio-sway": {
-   "raices": 67,
-   "clausura": 170,
-   "sealed": 170
+   "raices": 68,
+   "clausura": 171,
+   "sealed": 171
   }
  },
  "sin_perfil": 645,
@@ -2797,12 +2797,35 @@
    "compiler": "zig-cc",
    "deps": [],
    "cls": "c",
-   "queue": "incoming-wlr",
+   "queue": "corpus",
    "hash": "b3:5b3a5df3d75586315f4371f05be021a58ee31d5f664b4253957a35a6c7b95d71",
    "state": "sealed",
    "blocked_by": [],
    "unblocks": 0,
    "perfiles": [
+    "escritorio-cosmic",
+    "escritorio-gnome",
+    "escritorio-kde",
+    "escritorio-sway"
+   ],
+   "dependientes_total": 0
+  },
+  "dejavu-fonts-nerd": {
+   "iname": "dejavu-fonts-nerd",
+   "version": "3.5.1",
+   "link": "dynamic",
+   "compiler": "zig-cc",
+   "deps": [],
+   "cls": "c",
+   "queue": "corpus",
+   "hash": "b3:387cf391f09cec628088845dadd94a5268e61acbd1c04dcc12c1a035c4d4d591",
+   "state": "sealed",
+   "blocked_by": [],
+   "unblocks": 0,
+   "perfiles": [
+    "escritorio-cosmic",
+    "escritorio-gnome",
+    "escritorio-kde",
     "escritorio-sway"
    ],
    "dependientes_total": 0
diff --git a/docs/state/build-state.json b/docs/state/build-state.json
index 2f717eb5..77dfee0e 100644
--- a/docs/state/build-state.json
+++ b/docs/state/build-state.json
@@ -1,14 +1,14 @@
 {
  "schema": "hammer-build-state/1",
  "totals": {
-  "recipes": 817,
-  "nodes": 818,
-  "sealed": 817,
+  "recipes": 819,
+  "nodes": 820,
+  "sealed": 819,
   "ajeno": 1
  },
  "by_class": {
   "ajeno": 1,
-  "c": 185,
+  "c": 187,
   "go": 362,
   "gui": 35,
   "kernel": 6,
@@ -17,7 +17,7 @@
  "debt_by_class": {},
  "by_queue": {
   "corpus": {
-   "sealed": 817,
+   "sealed": 819,
    "ajeno": 1
   }
  },
@@ -2782,6 +2782,46 @@
    "perfiles": [],
    "dependientes_total": 0
   },
+  "dejavu-fonts": {
+   "iname": "dejavu-fonts",
+   "version": "2.37",
+   "link": "dynamic",
+   "compiler": "zig-cc",
+   "deps": [],
+   "cls": "c",
+   "queue": "corpus",
+   "hash": "b3:5b3a5df3d75586315f4371f05be021a58ee31d5f664b4253957a35a6c7b95d71",
+   "state": "sealed",
+   "blocked_by": [],
+   "unblocks": 0,
+   "perfiles": [
+    "escritorio-cosmic",
+    "escritorio-gnome",
+    "escritorio-kde",
+    "escritorio-sway"
+   ],
+   "dependientes_total": 0
+  },
+  "dejavu-fonts-nerd": {
+   "iname": "dejavu-fonts-nerd",
+   "version": "3.5.1",
+   "link": "dynamic",
+   "compiler": "zig-cc",
+   "deps": [],
+   "cls": "c",
+   "queue": "corpus",
+   "hash": "b3:387cf391f09cec628088845dadd94a5268e61acbd1c04dcc12c1a035c4d4d591",
+   "state": "sealed",
+   "blocked_by": [],
+   "unblocks": 0,
+   "perfiles": [
+    "escritorio-cosmic",
+    "escritorio-gnome",
+    "escritorio-kde",
+    "escritorio-sway"
+   ],
+   "dependientes_total": 0
+  },
   "delta": {
    "iname": "delta",
    "version": "0.19.2",
diff --git a/docs/state/targets.toml b/docs/state/targets.toml
index 80f4c427..4a5340db 100644
--- a/docs/state/targets.toml
+++ b/docs/state/targets.toml
@@ -63,6 +63,22 @@ paquetes = [
   # 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",
+  # ── FUENTES ──────────────────────────────────────────────────────────────────────────────────
+  # Añadida el 2026-09-03 por el mismo recuento que destapó el hueco de GNOME: contando
+  # `.ttf/.otf/.ttc/.pfb` sobre los artefactos del cierre, este perfil tenía **UNA sola**, y de
+  # rebote — viene dentro de `qtbase`, no porque nadie la haya pedido. `fontconfig` estaba, pero
+  # fontconfig es el MOTOR que busca fuentes, no una fuente.
+  # Depender de la que trae qtbase es apoyarse en un detalle de empaquetado de Qt que puede
+  # desaparecer en cualquier versión, y encima deja a todo lo que NO es Qt sin nada.
+  "dejavu-fonts",
+  # `dejavu-fonts-nerd` es la MISMA DejaVu Sans Mono parcheada con Nerd Fonts (~10.000 glifos de
+  # iconos: Powerline, Font Awesome, Devicons…) que usan starship, lsd, eza, neovim y las
+  # statuslines; sin ellos dibujan cuadraditos. Se AÑADE, no reemplaza: la licencia de Bitstream
+  # Vera obliga a renombrar una fuente modificada, así que la parcheada se llama
+  # «DejaVuSansM Nerd Font Mono» y NO puede responder a «DejaVu Sans Mono» — sustituirla rompería
+  # a todo lo que la pide por nombre, empezando por foot. Se enchufa por fontconfig: su
+  # `59-nerd-monospace.conf` hace que el alias `monospace` la prefiera. Ver su receta.
+  "dejavu-fonts-nerd",
   # ⚠ `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
@@ -196,6 +212,14 @@ paquetes = [
   # de rebote, dentro de qtbase) es un hallazgo aparte y NO se toca acá: ese perfil no lleva zathura
   # y su árbol lo está trabajando otro frente.
   "dejavu-fonts",
+  # `dejavu-fonts-nerd` es la MISMA DejaVu Sans Mono parcheada con Nerd Fonts (~10.000 glifos de
+  # iconos: Powerline, Font Awesome, Devicons…) que usan starship, lsd, eza, neovim y las
+  # statuslines; sin ellos dibujan cuadraditos. Se AÑADE, no reemplaza: la licencia de Bitstream
+  # Vera obliga a renombrar una fuente modificada, así que la parcheada se llama
+  # «DejaVuSansM Nerd Font Mono» y NO puede responder a «DejaVu Sans Mono» — sustituirla rompería
+  # a todo lo que la pide por nombre, empezando por foot. Se enchufa por fontconfig: su
+  # `59-nerd-monospace.conf` hace que el alias `monospace` la prefiera. Ver su receta.
+  "dejavu-fonts-nerd",
   "expat-shared", "libffi-shared", "bzip2-shared",
 ]
 
@@ -266,6 +290,14 @@ paquetes = [
   # 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",
+  # `dejavu-fonts-nerd` es la MISMA DejaVu Sans Mono parcheada con Nerd Fonts (~10.000 glifos de
+  # iconos: Powerline, Font Awesome, Devicons…) que usan starship, lsd, eza, neovim y las
+  # statuslines; sin ellos dibujan cuadraditos. Se AÑADE, no reemplaza: la licencia de Bitstream
+  # Vera obliga a renombrar una fuente modificada, así que la parcheada se llama
+  # «DejaVuSansM Nerd Font Mono» y NO puede responder a «DejaVu Sans Mono» — sustituirla rompería
+  # a todo lo que la pide por nombre, empezando por foot. Se enchufa por fontconfig: su
+  # `59-nerd-monospace.conf` hace que el alias `monospace` la prefiera. Ver su receta.
+  "dejavu-fonts-nerd",
   # 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 ──────────────────────
@@ -351,6 +383,14 @@ paquetes = [
   # 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»
+  # `dejavu-fonts-nerd` es la MISMA DejaVu Sans Mono parcheada con Nerd Fonts (~10.000 glifos de
+  # iconos: Powerline, Font Awesome, Devicons…) que usan starship, lsd, eza, neovim y las
+  # statuslines; sin ellos dibujan cuadraditos. Se AÑADE, no reemplaza: la licencia de Bitstream
+  # Vera obliga a renombrar una fuente modificada, así que la parcheada se llama
+  # «DejaVuSansM Nerd Font Mono» y NO puede responder a «DejaVu Sans Mono» — sustituirla rompería
+  # a todo lo que la pide por nombre, empezando por foot. Se enchufa por fontconfig: su
+  # `59-nerd-monospace.conf` hace que el alias `monospace` la prefiera. Ver su receta.
+  "dejavu-fonts-nerd",
   "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` ─────────────────────────
diff --git a/recipes/dejavu-fonts-nerd.toml b/recipes/dejavu-fonts-nerd.toml
new file mode 100644
index 00000000..e8579987
--- /dev/null
+++ b/recipes/dejavu-fonts-nerd.toml
@@ -0,0 +1,111 @@
+# dejavu-fonts-nerd 3.5.1 — DejaVu Sans Mono parcheada con Nerd Fonts: ~10.000 glifos de iconos
+# (Powerline, Font Awesome, Devicons, Material, Octicons, Weather…) que usan starship, lsd, eza,
+# neovim, las statuslines y media herramienta moderna de terminal. Sin ellos esas apps dibujan
+# cuadraditos.
+#
+# ══ SE AÑADE, NO REEMPLAZA — Y NO ES PRUDENCIA, ES LA LICENCIA ═════════════════════════════════
+# La tentación es «cambiemos DejaVu por la nerdeada y listo». No se puede, y el motivo está en el
+# `LICENSE.txt` del propio tarball: la licencia de Bitstream Vera dice que una fuente modificada
+# **sólo puede distribuirse SI SE LA RENOMBRA**. Por eso upstream la llama `DejaVuSansM Nerd Font`
+# y no `DejaVu Sans Mono` — leído en el `name` de la TTF, no supuesto:
+#
+#     familia(1) = DejaVuSansM Nerd Font Mono      postscript(6) = DejaVuSansMNFM
+#
+# ⇒ **una fuente nerdeada NO puede responder al nombre de la original.** Si se sustituyera, todo lo
+# que pide «DejaVu Sans Mono» por nombre dejaría de encontrarla, empezando por `foot`, que ya murió
+# una vez con `monospace::size=8: failed to match font` (ver el perfil `escritorio-sway`).
+# Por eso conviven: `dejavu-fonts` sigue siendo la familia con su nombre de siempre, y ésta se
+# enchufa por fontconfig, que es el mecanismo que existe justamente para esto.
+#
+# ══ SÓLO LA MONOESPACIADA, Y SÓLO UNA DE LAS TRES VARIANTES ════════════════════════════════════
+# «Que todas las fuentes estén nerdeadas» no se puede cumplir al pie de la letra y conviene saber
+# por qué: **upstream sólo publica parcheada la MONOESPACIADA**. No existe una DejaVu Sans ni una
+# DejaVu Serif con iconos, y tampoco tendría sentido — los glifos de Nerd Fonts son para terminal,
+# editor y statusline; en una fuente de interfaz proporcional no los pide nadie.
+#
+# Y de la mono, el tarball trae TRES variantes que son los mismos glifos con distinto ancho de
+# avance de los iconos: `NerdFont` (doble ancho), `NerdFontMono` (ancho simple) y `NerdFontPropo`
+# (proporcional). Instalar las doce cuesta **32 MB**; instalar sólo las cuatro de `NerdFontMono`
+# cuesta **11 MB**. Se quedan las `Mono`, que son las correctas para una rejilla de terminal —
+# un icono de doble ancho descuadra la cuadrícula. Para comparar: la familia DejaVu ENTERA
+# (Sans + Serif + Mono, 22 ficheros) son 9,8 MB.
+#
+# ══ ⚠ LA LICENCIA NECESITA UNA PASADA HUMANA ANTES DE `hammer pack` ════════════════════════════
+# El `LICENSE.txt` que viene en el tarball cubre **sólo DejaVu/Bitstream Vera** y no dice ni una
+# palabra de los ~10 conjuntos de iconos IMPORTADOS, que tienen licencias propias y distintas
+# (Font Awesome es CC-BY-4.0, Octicons MIT, Material Design Icons OFL, Powerline MIT…). O sea que
+# el artefacto es un derivado multi-licencia y el fichero que lo acompaña lo subrepresenta.
+# El campo de abajo dice lo que está DOCUMENTADO en la fuente, no el conjunto real, y por eso se
+# deja anotado acá en vez de inventar una cadena SPDX: el campo `license` NO SE ADIVINA (y está
+# fuera de `hash_inputs`, así que corregirlo después no re-hashea nada).
+#
+# ══ CÓMO SE ENCHUFA: fontconfig, no renombrado ═════════════════════════════════════════════════
+# Se instala un `/etc/fonts/conf.d/59-nerd-monospace.conf` que hace que el alias `monospace`
+# PREFIERA la nerd. `fonts.conf` incluye `conf.d` (leído del artefacto de fontconfig, no supuesto).
+# Efecto: las terminales y todo lo que pide «monospace» —que es lo normal— se llevan los iconos,
+# y quien pida «DejaVu Sans Mono» por nombre sigue recibiendo la original, intacta.
+#
+# ⚠ **EL NÚMERO 59 ESTÁ MEDIDO, NO ELEGIDO.** fontconfig carga `conf.d` en orden alfabético y un
+# `<prefer>` que llega ANTES gana la cabeza de la lista. El fontconfig de esta distro trae
+# `60-latin.conf`, que ya prefiere `Noto Sans Mono, DejaVu Sans Mono, Inconsolata…` para
+# `monospace`. Con el fichero en `60-nerd-monospace.conf` —que ordena DESPUÉS de `60-latin.conf`—
+# `fc-match monospace` seguía devolviendo `DejaVu Sans Mono`: la conf estaba instalada y era
+# INERTE. Comprobado montando el `conf.d` real del artefacto de fontconfig y corriendo `fc-match`:
+#
+#     60-nerd-monospace.conf → DejaVu Sans Mono          (pierde)
+#     59-nerd-monospace.conf → DejaVuSansM Nerd Font Mono (gana)
+#
+# `45-latin.conf` también menciona monospace pero usa `<default>`, no `<prefer>`, así que no compite.
+# Es el mismo modo de fallar que el plugin de PipeWire para ALSA: instalado y sin que lo use nadie.
+name    = "dejavu-fonts-nerd"
+version = "3.5.1"
+# Sólo lo documentado en el LICENSE.txt del tarball. Ver el ⚠ de arriba: el conjunto real incluye
+# las licencias de los iconos importados, que upstream no enumera.
+license = "Bitstream-Vera"
+
+[source]
+tarball = "https://github.com/ryanoasis/nerd-fonts/releases/download/v3.5.1/DejaVuSansMono.tar.xz"
+sha256  = "9d3f2d60faa790b101903c2984b89c11397fc63b9ce43f2dcd25ffed4fb44e5f"
+# ⚠ `strip_components = 0` NO ES COSMÉTICO. El default de hammer es 1, pensado para el tarball
+# normal que extrae a `<nombre>-<version>/`. **Éste es PLANO**: los `.ttf` están en la raíz del
+# archivo, sin directorio contenedor. Con el default, `tar --strip-components 1` se come el único
+# nivel que hay y **el árbol de fuentes queda VACÍO** — y el build no se detiene ahí: sigue a las
+# fases y falla más tarde, en el `cp`, con un mensaje que no menciona la extracción. Es la misma
+# figura de siempre: el vacío se lee como presencia hasta que algo tropieza con él.
+strip_components = 0
+
+[build]
+compiler = "zig-cc"
+target   = "x86_64-linux-musl"
+link     = "dynamic"
+
+[build.phases]
+configure = "true"
+compile   = "true"
+install   = '''
+set -e
+mkdir -p /out/usr/share/fonts/dejavu-nerd /out/etc/fonts/conf.d
+# Sólo la variante Mono: ver la cabecera (las otras dos son los mismos glifos con otro avance).
+cp DejaVuSansMNerdFontMono-*.ttf /out/usr/share/fonts/dejavu-nerd/
+cp LICENSE.txt /out/usr/share/fonts/dejavu-nerd/
+cat > /out/etc/fonts/conf.d/59-nerd-monospace.conf <<'CONF'
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
+<!-- Hace que `monospace` prefiera la DejaVu parcheada con Nerd Fonts, para que las terminales y
+     las apps de TUI tengan los glifos de iconos. NO renombra ni sustituye: quien pida
+     «DejaVu Sans Mono» por nombre sigue recibiendo la original. Ver recipes/dejavu-fonts-nerd.toml -->
+<fontconfig>
+  <alias>
+    <family>monospace</family>
+    <prefer><family>DejaVuSansM Nerd Font Mono</family></prefer>
+  </alias>
+</fontconfig>
+CONF
+# Un `cp` que no copia nada sale 0 si el glob no casa y el artefacto queda VACÍO: se comprueba.
+test "$(ls /out/usr/share/fonts/dejavu-nerd/*.ttf | wc -l)" = "4" || {
+  echo "ERROR: se esperaban 4 TTF de la variante Mono" >&2; ls -l /out/usr/share/fonts/dejavu-nerd >&2; exit 1
+}
+'''
+
+[deps]
+build = []
diff --git a/recipes/dejavu-fonts.toml b/recipes/dejavu-fonts.toml
new file mode 100644
index 00000000..7dfd0b71
--- /dev/null
+++ b/recipes/dejavu-fonts.toml
@@ -0,0 +1,35 @@
+# dejavu-fonts 2.37 — PROMOVIDA AL CORPUS el 2026-09-03. Antes existían TRES copias idénticas
+# (incoming-kde, incoming-wlr, incoming-cosmic) y ninguna en el corpus.
+#
+# ══ POR QUÉ SUBE, Y EL BUG QUE LO OBLIGÓ ═══════════════════════════════════════════════════════
+# Al descubrir que `escritorio-gnome` no traía NI UN fichero de fuente se la añadió de raíz a ese
+# perfil… y quedó como nodo **`wanted`**: `incoming-gnome` no tiene esta receta y el corpus tampoco,
+# y una receta no alcanza una cola hermana. O sea que la raíz no resolvía a nada y la imagen seguía
+# sin fuentes. **`wanted` no es `debt`**, así que `drenaje.json` seguía diciendo deuda=0 — el hueco
+# no salía por ninguna métrica. Se vio mirando el nodo en `build-state-gnome.json`.
+#
+# La promoción es GRATIS: las tres copias sellaban el MISMO ArtifactHash (b3:5b3a5df3) y sus
+# `[deps]` están vacías, así que resuelve igual desde cualquier lado. Las tres copias de cola se
+# jubilan en el mismo movimiento: con `[deps] = []` no hay nada que pueda cambiar de resolución.
+#
+# Data-only: copia los .ttf a /usr/share/fonts. 22 ficheros, 9,8 MB — Sans, Serif y Sans Mono.
+name    = "dejavu-fonts"
+version = "2.37"
+license = "MIT"
+
+[source]
+tarball = "https://github.com/dejavu-fonts/dejavu-fonts/releases/download/version_2_37/dejavu-fonts-ttf-2.37.tar.bz2"
+sha256  = "fa9ca4d13871dd122f61258a80d01751d603b4d3ee14095d65453b4e846e17d7"
+
+[build]
+compiler = "zig-cc"
+target   = "x86_64-linux-musl"
+link     = "dynamic"
+
+[build.phases]
+configure = "true"
+compile   = "true"
+install   = "mkdir -p /out/usr/share/fonts/dejavu && cp ttf/*.ttf /out/usr/share/fonts/dejavu/"
+
+[deps]
+build = []
diff --git a/recipes/incoming-cosmic/dejavu-fonts.toml b/recipes/incoming-cosmic/dejavu-fonts.toml
deleted file mode 100644
index 4522df39..00000000
--- a/recipes/incoming-cosmic/dejavu-fonts.toml
+++ /dev/null
@@ -1,22 +0,0 @@
-# dejavu-fonts 2.37 — fuentes TTF. Qt ya no trae fuentes ("QFontDatabase: Cannot find font directory");
-# sin ellas el escritorio renderiza sin texto legible. Data-only: copia los .ttf a /usr/share/fonts.
-name    = "dejavu-fonts"
-version = "2.37"
-license = "MIT"
-
-[source]
-tarball = "https://github.com/dejavu-fonts/dejavu-fonts/releases/download/version_2_37/dejavu-fonts-ttf-2.37.tar.bz2"
-sha256  = "fa9ca4d13871dd122f61258a80d01751d603b4d3ee14095d65453b4e846e17d7"
-
-[build]
-compiler = "zig-cc"
-target   = "x86_64-linux-musl"
-link     = "dynamic"
-
-[build.phases]
-configure = "true"
-compile   = "true"
-install   = "mkdir -p /out/usr/share/fonts/dejavu && cp ttf/*.ttf /out/usr/share/fonts/dejavu/"
-
-[deps]
-build = []
diff --git a/recipes/incoming-kde/dejavu-fonts.toml b/recipes/incoming-kde/dejavu-fonts.toml
deleted file mode 100644
index 4522df39..00000000
--- a/recipes/incoming-kde/dejavu-fonts.toml
+++ /dev/null
@@ -1,22 +0,0 @@
-# dejavu-fonts 2.37 — fuentes TTF. Qt ya no trae fuentes ("QFontDatabase: Cannot find font directory");
-# sin ellas el escritorio renderiza sin texto legible. Data-only: copia los .ttf a /usr/share/fonts.
-name    = "dejavu-fonts"
-version = "2.37"
-license = "MIT"
-
-[source]
-tarball = "https://github.com/dejavu-fonts/dejavu-fonts/releases/download/version_2_37/dejavu-fonts-ttf-2.37.tar.bz2"
-sha256  = "fa9ca4d13871dd122f61258a80d01751d603b4d3ee14095d65453b4e846e17d7"
-
-[build]
-compiler = "zig-cc"
-target   = "x86_64-linux-musl"
-link     = "dynamic"
-
-[build.phases]
-configure = "true"
-compile   = "true"
-install   = "mkdir -p /out/usr/share/fonts/dejavu && cp ttf/*.ttf /out/usr/share/fonts/dejavu/"
-
-[deps]
-build = []
diff --git a/recipes/incoming-wlr/dejavu-fonts.toml b/recipes/incoming-wlr/dejavu-fonts.toml
deleted file mode 100644
index 4522df39..00000000
--- a/recipes/incoming-wlr/dejavu-fonts.toml
+++ /dev/null
@@ -1,22 +0,0 @@
-# dejavu-fonts 2.37 — fuentes TTF. Qt ya no trae fuentes ("QFontDatabase: Cannot find font directory");
-# sin ellas el escritorio renderiza sin texto legible. Data-only: copia los .ttf a /usr/share/fonts.
-name    = "dejavu-fonts"
-version = "2.37"
-license = "MIT"
-
-[source]
-tarball = "https://github.com/dejavu-fonts/dejavu-fonts/releases/download/version_2_37/dejavu-fonts-ttf-2.37.tar.bz2"
-sha256  = "fa9ca4d13871dd122f61258a80d01751d603b4d3ee14095d65453b4e846e17d7"
-
-[build]
-compiler = "zig-cc"
-target   = "x86_64-linux-musl"
-link     = "dynamic"
-
-[build.phases]
-configure = "true"
-compile   = "true"
-install   = "mkdir -p /out/usr/share/fonts/dejavu && cp ttf/*.ttf /out/usr/share/fonts/dejavu/"
-
-[deps]
-build = []