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…

⎇ main recipes/noto-fonts.toml TOML · 80 lines · 4.6 KB History raw

receta: las fuentes del mundo — la distro mostraba cuadraditos a la mayor parte de la humanidad de6d9f754 · Sergio ·

1# noto-fonts — las fuentes de TODOS los alfabetos que no son latino, griego ni cirílico.
2#
3# ══ POR QUÉ ENTRA, Y ES EL HUECO MÁS GRANDE QUE TENÍA LA DISTRO ════════════════════════════════
4# Medido el 2026-10-19 con `scripts/censo-distro.py`: las ÚNICAS fuentes del corpus eran
5# `dejavu-fonts` y su variante nerd. DejaVu cubre latino, griego, cirílico y algo de árabe/hebreo
6# — y nada más. O sea que la distro, con el tablero entero en verde (1158/1158 selladas, clausura
7# 10 de 10), **mostraba cuadraditos en chino, japonés, coreano, árabe, hindi, bengalí, tamil,
8# tailandés, hebreo, coreano y emoji**: la mayor parte de la humanidad.
9#
10# Esto no es una app que alguien pida: es la diferencia entre una distro y una demo en inglés.
11#
12# ══ LA SELECCIÓN: `hinted/ttf`, Regular y Bold, DE TODOS LOS ALFABETOS ═════════════════════════
13# El tarball trae **7.937 ficheros `.ttf`** — cada familia en hinted/unhinted × ttf/slim/full × una
14# docena de pesos. Instalarlo entero es cientos de megas de variantes que nadie elige.
15#
16# El criterio es deliberado y se eligió para NO tener que juzgar qué idioma importa, porque ésa es
17# exactamente la decisión que produjo el hueco: **Regular y Bold, hinted, de todas las familias**.
18# Medido sobre el tarball antes de escribir esto: **321 ficheros, 48 MB**. Con sólo Regular serían
19# 226 y 33 MB, y se descartó porque sin Bold un título en hindi se sintetiza y sale mal.
20#
21#   · `hinted` y no `unhinted`: hay rasterización por CPU en el camino (llvmpipe) y el hinting es
22#     lo que hace legible un cuerpo pequeño ahí.
23#   · `ttf` y no `slim`/`full`: `slim` recorta glifos y `full` trae variantes que el shaper no pide.
24#
25# ⚠ **ESTO NO TRAE CJK NI EMOJI.** Son dos recetas hermanas y por razones distintas: el CJK de Noto
26# se publica en otro repositorio (y en `.zip`, ver `noto-fonts-cjk.toml`), y el emoji es un repo
27# aparte de Google. Las tres hacen falta; ninguna sustituye a otra.
28#
29# ══ POR QUÉ ESTE TARBALL Y NO EL RELEASE DE UPSTREAM ═══════════════════════════════════════════
30# Upstream publica los `.zip` de cada familia por separado. **El `fetch` de takana desempaqueta con
31# `tar -x`** (`takana-build/src/fetch.rs:685`), que autodetecta el compresor por la cabecera pero NO
32# abre zip: una receta con un `.zip` muere al desempaquetar. El tarball mensual de
33# `notofonts.github.io` es `.tar.gz` y trae todas las familias juntas, que es lo que Alpine usa
34# también (`community/font-noto`, misma URL con otra versión).
35#
36# Es el archive generado por GitHub a partir de un TAG, no un release subido: su sha256 es estable
37# mientras el tag no se mueva, y el tag de una release mensual no se mueve. (La reserva del ADR 0006
38# sobre los `/archive/` vale para tags que se reescriben; una release fechada no es ese caso.)
39#
40# Data-only: no compila nada. El `.pc` no existe y no hace falta — fontconfig escanea
41# `/usr/share/fonts` recursivamente, igual que con `dejavu-fonts`.
42name    = "noto-fonts"
43version = "2026.10.01"
44license = "OFL-1.1"
45
46[source]
47tarball = "https://github.com/notofonts/notofonts.github.io/archive/refs/tags/noto-monthly-release-2026.10.01.tar.gz"
48sha256  = "65493b5967fd11372c1566e87f38a05c8c80a0e7f1fee4644fcaad23731a7b8e"
49
50[build]
51compiler = "zig-cc"   # inerte: acá no se compila nada, pero el campo es obligatorio
52target   = "x86_64-linux-musl"
53link     = "dynamic"
54
55[build.phases]
56configure = "true"
57compile   = "true"
58# ⚠ El `find` va con `-path '*/hinted/ttf/*'` y NO con `-name`, porque el árbol tiene la misma
59# familia repetida en `unhinted/` y en `slim/`: filtrar por nombre traería cuatro copias de cada
60# fichero y el artefacto saldría cuatro veces más gordo sin añadir un glifo.
61# El guardián de cuenta no es adorno: si upstream reorganiza el árbol —y este repo se reorganizó
62# al menos una vez— el `find` saldría VACÍO, el `install` saldría 0 y el artefacto quedaría como un
63# directorio sin fuentes, que es exactamente un cache-hit envenenado (regla 3 del CLAUDE.md).
64install = '''
65set -e
66mkdir -p /out/usr/share/fonts/noto
67n=0
68for f in $(find fonts -path '*/hinted/ttf/*' \( -name '*-Regular.ttf' -o -name '*-Bold.ttf' \) | sort); do
69  cp "$f" /out/usr/share/fonts/noto/
70  n=$((n + 1))
71done
72echo "noto-fonts: $n ficheros instalados"
73if [ "$n" -lt 250 ]; then
74  echo "noto-fonts: esperaba >=250 ficheros y encontré $n — ¿cambió el árbol de upstream? NO sello un artefacto a medias" >&2
75  exit 1
76fi
77'''
78
79[deps]
80build = []