# `takana-os.net` — el sitio del proyecto Una sola página, autocontenida, en dos idiomas y dos temas. **No le pide nada a terceros:** las tipografías de la marca (Chivo e IBM Plex, las dos SIL OFL) viajan acá en `fuentes/`, subconjuntos `latin` y `latin-ext`, 154 KB en total. Un sitio sobre no depender de binarios ajenos que cargara las fuentes de Google en cada visita sería una contradicción barata. | | | |---|---| | `index.html` | la página entera: CSS y JS adentro, el símbolo como `` SVG inline | | `fuentes.css` + `fuentes/` | las ocho caras `@font-face`, servidas de acá | | `simbolo.svg` | el favicon — el martillo tocapu 7×7, derivado de `docs/marca/simbolo-fondo-claro.svg` | ## Las cuatro secciones `01 descargar` · `02 las decisiones` · `03 los componentes` · `04 el código`. **`03` es una ficha de distro, no un semáforo** (2026-09-23, a pedido del usuario: «que no presuma inmadurez»). Antes era una tabla con 🟢/🟡/⚪ y una fila que decía «distro redonda — todavía no»: una página que le cuenta al visitante lo que le falta antes que lo que tiene. Ahora son tres tablas al estilo DistroWatch — el sistema (init, libc, compilador, kernel, gráficos, audio, almacén, catálogo), los cinco escritorios con su versión y su clausura sellada, y los paquetes principales con su número de versión. ⚠ **Esas versiones salen de las recetas y hay que refrescarlas.** Están a mano en el HTML: si una receta sube de versión, la página miente hasta que alguien la toque. Se sacan así: ```sh for r in bash coreutils git curl openssl python3 go rust llvm21 firefox …; do printf '%-12s %s\n' "$r" "$(grep -m1 '^version' recipes/$r.toml | sed 's/.*= *"//; s/"//')" done python3 -c "import json;d=json.load(open('docs/state/build-state.json'));print(d['totals'])" ls /store | wc -l ``` **`04` junta lo que eran dos secciones** («los repositorios» y «cómo se llama»): las dos direcciones, el reparto del repo y los tres bloques de comandos son el mismo asunto — dónde vive y cómo se llama. ## El diagrama de los dos pisos **SVG inline, no una imagen** (2026-09-23). El usuario trajo una infografía generada con ChatGPT y no se publicó: llevaba los logos de **NixOS y Alpine** dentro del recuadro del laboratorio —lo que afirma una filiación que no existe: takana *importa recetas* de nixpkgs y de aports, no *es* eso— y un logo que no es el oficial de `docs/marca`. Además el texto iba quemado en el PNG: ni seleccionable, ni traducible con el botón ES/EN, ni adaptable al tema, y 1,9 MB con fondo fotográfico en una página que se trae 154 KB de tipografías justamente para no depender de nadie. Lo que sí valía era la IDEA, así que se dibujó de nuevo: los colores van por variable (cambia con el tema), el texto es `` (lo traduce el mismo CSS que el resto y lo lee un lector de pantalla), y muestra el MECANISMO en vez de una lista de logos — **hidratación** subiendo del almacén al FHS y **diario** bajando de lo que cambias a mano, que es lo que hace que los dos pisos sean uno. ⚠ `var(--mono)` **no funciona como atributo de presentación** (`font-family="var(--mono)"`): `var()` sólo vale en una declaración CSS. Va por clase (`.diagrama .mono`). ⚠ En pantalla angosta el diagrama **scrollea dentro de su caja** (`min-width:404px`): encoger un diagrama hasta que las etiquetas no se lean es peor que dejarlo desplazarse. Comprobado rasterizándolo con el `rsvg-convert` del propio corpus, en los dos temas, antes de publicarlo — la primera versión tenía las etiquetas de las dos flechas chocando en el medio y eso no se ve leyendo el XML. ## El castellano de la página es NEUTRO Se quitó el voseo el 2026-09-23 a pedido del usuario: «en abierto suena muy regional argentino». Ocho formas (`podés`, `trabajás`, `preferís`, `verificás`, `bajás`, `Probá`, `disponés`, `vos`) pasaron a tuteo neutro. El control para que no vuelva a colarse: ```sh python3 - <<'PY' import re h=open('web/takana-os.net/index.html').read() es=" ".join(re.sub('<[^>]+>','',t) for t in re.findall(r'data-l="es">(.*?)', h, re.S)) print([w for w in re.findall(r'\b\w+(?:ás|és|ís)\b|\bvos\b', es) if w.lower() not in ('después','además','través','inglés','país','más','así','aquí','allí','sólo','demás', 'detrás','atrás','interés','revés')] or "sin voseo") PY ``` ## La sección «las decisiones» **Trece fichas plegables** (`
`, sin una línea de JavaScript), cada una con tres lecturas de lo mismo: contra qué se decide, qué implica por dentro, y qué quiere decir sin jerga. Nacen cerradas a pedido del usuario (2026-09-23): trece fichas abiertas son una pared, y la aseveración del título basta para elegir cuál abrir. Las secciones «los dos pisos» y «la frontera» se fundieron aquí como fichas 01 y 03 — eran el mismo material contado dos veces, en una sección y en una ficha. Y entraron dos que faltaban: **la instalación** (un archivo, sin ISO y sin red) y **el escritorio propio + tawasuyu**, que son lo que alguien de fuera pregunta primero. **No son opinión: cada una sale de un ADR o de una decisión ya tomada en `docs/`** — fuentes clavadas (ADR 0006), `zig cc` (0003), `arje` de init (0007) y el arranque por grafo (0010), multi-origen con índice firmado (0014), imágenes ajenas enjauladas (0015), y las de Wayland-only y PipeWire, que viven en los frentes de escritorio y audio. ⚠ **Si una decisión cambia, esta página miente hasta que alguien la toque.** Es el precio de explicar el diseño en una landing y no en un doc generado: se gana claridad y se paga en mantenimiento. Las fichas se armaron con un guion de un solo uso — la página es la fuente, no hay generador que mantener. La paleta y la tipografía salen de **`docs/marca/README.md`** y no se inventan acá. La única desviación, deliberada: en tema claro el texto de acento usa un brasa oscurecido (`#9E3F16`), porque el `#DF6B2A` de la marca sobre alpaca da 2,9:1 y no se lee. Las combinaciones de la página están medidas: ninguna baja de 4,5:1. ## El instalador: `/descargas/` vive FUERA del repo `https://takana-os.net/descargas/takana-instalador-.sh` es **un fichero que trae todo adentro**: cabecera `sh` + un `tar.gz` pegado detrás con el binario `takana`, el instalador que corre en RAM, su kernel y el censo del terreno. Se baja, se le da permiso y se corre; no baja nada más. ⚠ **No está en el repo, y no puede estarlo.** Son 137 MiB: en git serían 137 MiB para siempre en cada clon, y además **el espejo de GitHub rechaza cualquier fichero de más de 100 MiB** — o sea que el `push` se rompería y nadie relacionaría la causa con el sitio. Vive en `/work/sergio/descargas`, que está en `sdc` (255 G) y no en la raíz de 5,8 G, que se llena y tira la caja entera. ```sh scripts/instalador-paquete.sh # arma el paquete (y comprueba su coherencia) scripts/instalador-autoextraible.sh # lo convierte en UN fichero, y lo desempaqueta para probarlo cp work/variantes/*.sh work/variantes/*.img /work/sergio/descargas/ ( cd /work/sergio/descargas && for f in takana-instalador-*; do case "$f" in *.sha256) ;; *) sha256sum "$f" > "$f.sha256";; esac; done ) ``` El `.sha256` que se publica al lado es **el del fichero entero**, para comprobar la descarga (`sha256sum -c takana-instalador.sh.sha256`). Es distinto del que el `.sh` lleva adentro, que es el **del payload** y lo verifica él solo antes de desempaquetar (`./takana-instalador.sh --sha256` lo imprime). ⚠ **El hash NO se escribe en `index.html`, y es deliberado.** La primera versión lo traía pegado en la página y habría empezado a mentir en el primer rebuild — que es el modo de fallo que este mismo README ya avisa para la sección «las decisiones». La página muestra el comando; el número lo sirve el fichero de al lado, que se regenera junto al `.sh`. ⚠ **La extensión es `.sh` y no `.run`, y por eso el vhost fuerza `Content-Disposition: attachment`.** `.sh` dice lo que el fichero ES —una cabecera de shell con el sistema pegado detrás, legible con `head` antes de correrlo— pero invita al navegador a MOSTRARLO: 580 MiB de binario volcados en una pestaña. La cabecera lo cierra para las siete descargas a la vez y no depende de que Caddy adivine el tipo (hoy no manda ningún `Content-Type` para estos ficheros). ⚠ `/descargas` queda **fuera del `encode`** del vhost: el `.sh` ya viene comprimido, y volver a comprimirlo por HTTP gasta CPU en cada descarga sin ahorrar un byte. ### En la página: los enlaces NO están en el HTML ⚠ **Ninguna URL de descarga aparece en `index.html`** (a pedido del usuario, 2026-09-23): el selector de variante las compone en JavaScript al pulsarlo, y el path se arma por trozos (`'/de'+'scargas/'`). Un rastreador que lee el documento no encuentra una sola, y estos ficheros pesan de 138 MiB a 3,4 GiB — no son para que se los baje un bot. Se comprueba con `grep -c "descargas/takana-instalador" index.html` ⇒ **0**. El precio: **sin JavaScript no hay descargas**. Por eso hay un `