gioser

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 1346Shell 97Rust 63Markdown 571650 Definiciones

⎇ 7c794568a963b18b68d747959e6bbd07cf2ebff7 recipes/os-release.toml TOML · 66 líneas · 3.9 KB Historia crudo

el logo OFICIAL de takana, extraído del PNG — y rustc entra al corpus como `foreign` cd78bb98c · Sergio ·

1# os-release — la identidad del sistema, que hasta hoy NO EXISTÍA.
2#
3# Se descubrió al meter `fastfetch` (2026-09-14): en la caja de producción decía
4#
5#     Host: vServer (20171111)
6#     Kernel: Linux 7.1.2
7#
8# …y ni una palabra de takana, porque `/etc/os-release` no está. No es cosmético: ese fichero es lo
9# que TODO el mundo lee para saber en qué distro corre — fastfetch, los instaladores de terceros, los
10# scripts de CI, el propio `qorpa` el día que quiera distinguir anfitrión de huésped. Una distro sin
11# `os-release` es anónima para cualquier programa que no sea suyo.
12#
13# ══ POR QUÉ UNA RECETA Y NO UNA CONSTANTE EN `takana-bootstrap` ════════════════════════════════
14# El `/etc/passwd` del producto SÍ es una constante de Rust, y esa decisión ya costó: para añadir un
15# usuario había que recompilar takana (lo arregló `[[user]]`). Meter `os-release` ahí re-sellaría el
16# `product-rootfs`, que es el **baseline del selfhost**, por un fichero de cinco líneas. Como receta
17# entra por perfil, se edita sin tocar el bootstrap y su radio es cero.
18#
19# ══ Y EL LOGO, QUE ES PARTE DE LA IDENTIDAD ════════════════════════════════════════════════════
20# `fastfetch` dibujaba **el pingüino genérico de Linux**: elige el logo por el `ID` de `os-release`
21# y no conoce `takana`. Van juntos acá y no en la receta de fastfetch porque lo que se declara es la
22# identidad del sistema —nombre, URL, color, logo—, no la configuración de una herramienta: mañana
23# el que dibuje puede ser otro programa y el logo seguirá siendo el mismo fichero.
24#   · `/usr/share/takana/logo.png`      — **el logo oficial**, tal cual lo entregó el usuario
25#   · `/usr/share/takana/logo.txt`      — el mismo, en ANSI de color verdadero para la terminal
26#   · `/etc/xdg/fastfetch/config.jsonc` — la config GLOBAL (XDG), no la de un usuario
27#
28# ⚠ EL ASCII NO SE INVENTA: SE EXTRAE DEL PNG. La primera versión de este fichero era un martillo
29# dibujado a ojo, y no era el logo — era *un* martillo. El de verdad es una cuadrícula **7×7**
30# medida sobre el PNG (bbox 348×348 en un lienzo de 512, celda de 49,7 px), con cuatro colores
31# exactos y nada más:
32#
33#     #a63a25  ladrillo     #df6b2a  naranja     #e3a63d  dorado     #fff6de  crema
34#
35#     ██ ██ ██ ██ ██ ██ ██        fila 0: las siete
36#        ██ ██ ██ ██ ██           fila 1: cinco, con el crema al centro
37#     ██ ██ ██ ██ ██ ██ ██        fila 2: las siete
38#           ██                    filas 3-6: el mango, una sola columna
39#
40# Cada celda son DOS caracteres de bloque: un carácter de terminal es alto y angosto, así que
41# `██` por celda es lo que conserva la geometría CUADRADA del original. Reconstruirlo a ojo la
42# pierde, y con ella deja de ser el logo.
43#
44# ⚠ SIN VERSIÓN NI FECHA, a propósito. Un `VERSION_ID` con la fecha del build haría que este
45# artefacto —y con él la clausura de toda imagen que lo lleve— cambiara de hash cada día sin que
46# nada haya cambiado. La versión de una distro de árbol único es el hash de su imagen, que ya existe.
47name    = "os-release"
48version = "1"
49license = "MIT"
50
51[source]
52dir = "os-release/tree"
53
54[build]
55compiler = "zig-cc"
56target   = "x86_64-linux-musl"
57link     = "static"
58flags    = []
59
60[build.phases]
61configure = "true"
62compile   = "true"
63# `cp -r`, NO `cp -a`: en el sandbox no hay privilegio para preservar el propietario y `-a` aborta
64# con `failed to preserve ownership ... Invalid argument`. Los modos por defecto son los correctos —
65# y el dueño real lo pone la proyección del artefacto, no esta copia.
66install   = "mkdir -p /out/etc /out/usr/lib && cp -r /src/etc/. /out/etc/ && cp -r /src/usr/. /out/usr/ && ln -sf ../../etc/os-release /out/usr/lib/os-release"