> 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…
marca: el simbolo como arte de terminal, y la via al fetch de shuma
scripts/logo-ascii.py emite la tocapu 7x7 en color (ANSI 24-bit) y en
monocromo. Se DERIVA del SVG en vez de dibujarse a mano: una copia aparte se
desincroniza el dia que la marca cambie y nadie se entera.
Para shuma: su fetch no lleva arte ASCII a proposito —su propio doc explica que
los *fetch clasicos empaquetan el ASCII de trescientas distros y que eso
envejece— pero expone SHUMA_FETCH_LOGO, que toma una IMAGEN.
Y el hallazgo que hay que dejar escrito: NO sirve exportarla desde el perfil de
la shell. shuma absorbe el entorno de la login shell, pero su es_denegada
rechaza todo lo que empiece con SHUMA_, por diseño. La via correcta es su propio
env.json, que aplica los grupos activos al proceso al arrancar.
El icono se instala fuera del repo (~/.local/share/pixmaps/takana.png): una ruta
dentro del arbol se rompe cuando el repo se mueve, que es literalmente lo que
paso hoy con ~/hammer.
diff --git a/docs/marca/README.md b/docs/marca/README.md
index 9d3388b6..99788c9e 100644
--- a/docs/marca/README.md
+++ b/docs/marca/README.md
@@ -34,3 +34,47 @@ Ejemplos: «Forjado en 41 s.» · «Idéntico al build 7f3a…» · `takana forj
## Ecosistema
TAWASUYU (el territorio: apps, compositor, filosofía) × TAKANA (la herramienta: distro, forja determinista).
+
+---
+
+## En terminal: el símbolo como arte de `*fetch`
+
+`scripts/logo-ascii.py` emite el símbolo al estilo de un `*fetch`. **Se deriva del SVG**, no se
+dibuja a mano: una copia dibujada aparte se desincroniza el día que la marca cambie y nadie se
+entera. La grilla es la tocapu 7×7 y cada celda ocupa dos columnas para salir cuadrada (los
+caracteres de terminal son ~2:1).
+
+```sh
+scripts/logo-ascii.py # color, ANSI 24-bit
+scripts/logo-ascii.py --plano # monocromo, para pipes y TERM sin color
+scripts/logo-ascii.py --regenerar # reescribe simbolo.ansi y simbolo.txt
+```
+
+- `simbolo.ansi` — listo para `cat`.
+- `simbolo.txt` — monocromo, densidad decreciente del extremo del gradiente (`#`) a la chispa (`@`).
+
+## En el fetch de shuma
+
+El fetch de shuma **no lleva arte ASCII y es a propósito**: su `logo_de_la_distro` documenta que los
+`*fetch` clásicos empaquetan el ASCII de trescientas distros y que eso es una galería que envejece;
+él le pregunta a la máquina. Lo que sí expone es una válvula para que el operador mande su propio
+archivo — **una imagen, PNG o SVG**, no ASCII:
+
+```
+SHUMA_FETCH_LOGO=<ruta a un fichero>
+```
+
+⚠ **No sirve exportarla desde `~/.zshenv` ni `~/.zshrc`.** shuma absorbe el entorno de la shell de
+login (`wire_login_env`), pero su `es_denegada` **rechaza todo lo que empiece con `SHUMA_`** — son
+«cosas que shuma gobierna por su cuenta». Comprobado en `login_env.rs`.
+
+La vía que sí funciona es su propio mecanismo, que aplica los grupos activos al proceso al arrancar
+(`modelo.rs`, `apply_env_group`) y sobrevive reinicios:
+
+```sh
+# desde un tab de shuma, o escribiendo ~/.config/shuma/env.json a mano
+:env SHUMA_FETCH_LOGO=~/.local/share/pixmaps/takana.png
+```
+
+El icono se instala **fuera del repo** a propósito: una ruta dentro del árbol se rompe el día que el
+repo se mueve, que es exactamente lo que pasó el 2026-09-09 con `~/hammer`.
diff --git a/docs/marca/simbolo.ansi b/docs/marca/simbolo.ansi
new file mode 100644
index 00000000..5ab05e50
--- /dev/null
+++ b/docs/marca/simbolo.ansi
@@ -0,0 +1,7 @@
+[38;2;166;58;37m██[0m[38;2;223;107;42m██[0m[38;2;227;166;61m██[0m[38;2;227;166;61m██[0m[38;2;227;166;61m██[0m[38;2;223;107;42m██[0m[38;2;166;58;37m██[0m
+ [38;2;223;107;42m██[0m[38;2;227;166;61m██[0m[38;2;255;246;222m██[0m[38;2;227;166;61m██[0m[38;2;223;107;42m██[0m
+[38;2;166;58;37m██[0m[38;2;223;107;42m██[0m[38;2;227;166;61m██[0m[38;2;227;166;61m██[0m[38;2;227;166;61m██[0m[38;2;223;107;42m██[0m[38;2;166;58;37m██[0m
+ [38;2;223;107;42m██[0m
+ [38;2;166;58;37m██[0m
+ [38;2;166;58;37m██[0m
+ [38;2;166;58;37m██[0m
diff --git a/docs/marca/simbolo.txt b/docs/marca/simbolo.txt
new file mode 100644
index 00000000..831b5d14
--- /dev/null
+++ b/docs/marca/simbolo.txt
@@ -0,0 +1,7 @@
+##**++++++**##
+ **++@@++**
+##**++++++**##
+ **
+ ##
+ ##
+ ##
diff --git a/scripts/logo-ascii.py b/scripts/logo-ascii.py
new file mode 100755
index 00000000..e67884fd
--- /dev/null
+++ b/scripts/logo-ascii.py
@@ -0,0 +1,61 @@
+#!/usr/bin/env python3
+"""Emite el símbolo de takana como arte de terminal, al estilo de los `*fetch`.
+
+Se DERIVA del SVG de `docs/marca/`, no se dibuja a mano: una copia dibujada
+aparte se desincroniza del símbolo el día que la marca cambie, y nadie se
+entera. La grilla es la tocapu 7x7 y cada celda ocupa dos columnas para que
+salga cuadrada en una terminal (los caracteres son ~2:1 de alto).
+
+Uso:
+ scripts/logo-ascii.py # color (ANSI 24-bit)
+ scripts/logo-ascii.py --plano # monocromo, para pipes y TERM tontos
+ scripts/logo-ascii.py --regenerar # reescribe docs/marca/simbolo.{ansi,txt}
+"""
+import re, sys, pathlib
+
+RAIZ = pathlib.Path(__file__).resolve().parent.parent
+SVG = RAIZ / "docs/marca/simbolo-fondo-oscuro.svg"
+# Monocromo: densidad decreciente, del extremo del gradiente a la chispa.
+DENSIDAD = {"#A63A25": "#", "#DF6B2A": "*", "#E3A63D": "+", "#FFF6DE": "@"}
+
+
+def grilla():
+ s = SVG.read_text()
+ # El SVG trae un manifiesto C2PA enorme en <metadata>; los rects van después.
+ cuerpo = s[s.rfind("</metadata>") + 11:] if "</metadata>" in s else s
+ celdas = {}
+ for m in re.finditer(
+ r'<rect x="(\d+)" y="(\d+)" width="(\d+)" height="(\d+)" fill="(#[0-9A-Fa-f]{6})"', cuerpo
+ ):
+ x, y, fill = int(m.group(1)), int(m.group(2)), m.group(5)
+ celdas[(y // 108, x // 108)] = fill
+ if not celdas:
+ sys.exit(f"no encontré celdas en {SVG} — ¿cambió el formato del símbolo?")
+ return celdas, max(r for r, _ in celdas) + 1, max(c for _, c in celdas) + 1
+
+
+def render(color=True):
+ celdas, filas, cols = grilla()
+ out = []
+ for r in range(filas):
+ linea = []
+ for c in range(cols):
+ f = celdas.get((r, c))
+ if f is None:
+ linea.append(" ")
+ elif color:
+ rr, gg, bb = int(f[1:3], 16), int(f[3:5], 16), int(f[5:7], 16)
+ linea.append(f"\x1b[38;2;{rr};{gg};{bb}m██\x1b[0m")
+ else:
+ linea.append(DENSIDAD[f] * 2)
+ out.append("".join(linea).rstrip())
+ return "\n".join(out)
+
+
+if __name__ == "__main__":
+ if "--regenerar" in sys.argv:
+ (RAIZ / "docs/marca/simbolo.ansi").write_text(render(True) + "\n")
+ (RAIZ / "docs/marca/simbolo.txt").write_text(render(False) + "\n")
+ print("docs/marca/simbolo.ansi y simbolo.txt regenerados desde el SVG")
+ else:
+ print(render(color="--plano" not in sys.argv))