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