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…

TOML 1572Shell 203Rust 109Markdown 993728 Definiciones

⎇ 87b6c3020a5285cf1d41ccdf1c8070b53adbcb98 recipes/adwaita-cursors.toml TOML · 94 líneas · 5.2 KB Historia crudo

cursores: cosmic y sway corrían con el puntero INVISIBLE — receta propia, y el vigía medía mal 8c4e1a6b2 · Sergio ·

1# adwaita-cursors 48.1 — SÓLO los cursores de Adwaita, en el CORPUS.
2#
3# ══ EL HUECO QUE TAPA ══════════════════════════════════════════════════════════════════════════
4# `vigia-imagen.py` mide un invariante que ninguna métrica de clausura ve: **≥1 tema de cursor con
5# `cursors/` poblado**. El 2026-09-04 daba ✗ en DOS de los cuatro escritorios —`escritorio-cosmic`
6# y `escritorio-sway`—, y eso no es cosmético: con el cursor por software (obligatorio en
7# virtio-gpu y en cualquier render por CPU) el compositor dibuja la imagen que le da el tema, así
8# que sin tema **el puntero se mueve invisible**. Es la misma figura que las fuentes de GNOME y que
9# los iconos de KDE: sellado ≠ usable, y el agujero no es dep de build de nadie.
10#
11# ══ POR QUÉ UNA RECETA NUEVA Y NO PROMOVER `adwaita-icon-theme` ════════════════════════════════
12# Los cursores viven DENTRO de `adwaita-icon-theme` (recipes/incoming-gnome/), que son ~5000
13# ficheros de tema de ICONOS. Promoverla al corpus para conseguir un puntero le regalaría a sway y
14# a cosmic el tema de iconos de GNOME — y eso está declarado como una DECISIÓN pendiente, no como
15# un olvido (`vigia-imagen.py` lo marca ⊘ en sway a propósito). Esta receta corta por lo sano:
16# mismo tarball, misma versión, **sólo `Adwaita/cursors/`** (~1 MB), sin un solo icono.
17#
18# ⚠ **NO declarar esta receta y `adwaita-icon-theme` en el MISMO perfil**: las dos instalan
19# `/usr/share/icons/Adwaita/cursors/*` y chocarían fichero a fichero — la misma colisión por la que
20# zathura no entra en `escritorio-kde` (dos poppler). `escritorio-gnome` ya tiene sus cursores por
21# el tema completo y NO lleva ésta.
22#
23# ══ LAS DOS COSAS QUE EL TARBALL NO TRAE Y HAY QUE FABRICAR ════════════════════════════════════
24# 1. **Los nombres X11 heredados.** El tarball trae los nombres CSS (`default`, `pointer`, `text`…);
25#    `left_ptr`, `hand2`, `xterm`, `watch` y compañía son ENLACES que genera el `meson.build`
26#    (`cursor_symlinks`). Una app que pida `left_ptr` —y las viejas piden eso— no encontraría nada.
27#    El mapa se PARSEA de `meson.build`, no se copia a mano: la lista autoritativa es upstream, y
28#    copiada envejece en silencio. Si el origen del enlace no existe, la fase FALLA: upstream pone
29#    ahí un `files()` justamente como aserción, y perderla convertiría un cambio de upstream en un
30#    enlace roto que nadie ve.
31# 2. **El tema `default`.** Sin `XCURSOR_THEME` en el entorno, libXcursor y wlroots buscan el tema
32#    literalmente llamado `default`; si no existe, no hay puntero AUNQUE `Adwaita` esté instalado.
33#    Por eso se escribe `/usr/share/icons/default/index.theme` con `Inherits=Adwaita`. Es el
34#    eslabón que hace que esto funcione en una imagen SIN configuración, que es el caso real.
35#
36# Los `.cur` son los cursores de Windows: upstream los excluye en la instalación de Linux
37# (`exclude_files: win32_cursors`) y acá también, por el mismo motivo.
38#
39# Data-only: no hay un compilador involucrado.
40name    = "adwaita-cursors"
41version = "48.1"
42license = "LGPL-3.0-or-later OR CC-BY-SA-3.0"
43
44[source]
45tarball = "https://download.gnome.org/sources/adwaita-icon-theme/48/adwaita-icon-theme-48.1.tar.xz"
46sha256  = "cbfe9b86ebcd14b03ba838c49829f7e86a7b132873803b90ac10be7d318a6e12"
47
48[build]
49compiler = "zig-cc"
50target   = "x86_64-linux-musl"
51link     = "dynamic"
52
53[build.phases]
54configure = "true"
55compile   = "true"
56install   = '''
57set -e
58CUR=/out/usr/share/icons/Adwaita/cursors
59mkdir -p "$CUR"
60
61# los cursores propiamente dichos, sin los .cur de Windows
62find Adwaita/cursors -maxdepth 1 -type f ! -name '*.cur' -exec install -Dm0644 {} "$CUR"/ \;
63# MEDIDO, no supuesto: 48.1 trae 37 cursores reales (nombres CSS) + 31 `.cur` de Windows. El
64# primer intento puso el piso en 50 «por si acaso» y la fase falló contra el tarball CORRECTO —
65# un guardián calibrado por encima de la escala real no protege: bloquea.
66N=$(ls -1 "$CUR" | wc -l)
67[ "$N" -ge 30 ] || { echo "sólo $N cursores: el tarball cambió de forma" >&2; exit 1; }
68
69# los nombres X11 heredados, leídos del meson.build de upstream (no copiados a mano)
70sed -n '/cursor_symlinks = {/,/^  }/p' meson.build \
71  | sed -n "s/^ *'\([^']*\)': *\[\([^]]*\)\].*/\1 \2/p" \
72  | while read -r SRC RESTO; do
73      [ -e "$CUR/$SRC" ] || { echo "el mapa nombra un cursor ausente: $SRC" >&2; exit 1; }
74      echo "$RESTO" | tr ',' '\n' | tr -d " '" | while read -r DST; do
75        [ -n "$DST" ] && ln -sf "$SRC" "$CUR/$DST"
76      done
77    done
78
79# el tema `default`: sin esto, una imagen sin XCURSOR_THEME no encuentra NINGÚN cursor
80mkdir -p /out/usr/share/icons/default
81cat > /out/usr/share/icons/default/index.theme <<'EOF'
82[Icon Theme]
83Name=Default
84Comment=Alias al tema de cursores real
85Inherits=Adwaita
86EOF
87
88# la comprobación que no se puede cumplir por accidente: el nombre que pide TODA app vieja
89[ -e "$CUR/left_ptr" ] || { echo "sin left_ptr: el mapa de enlaces no se aplicó" >&2; exit 1; }
90[ -e "$CUR/default" ] || { echo "sin el cursor 'default': el tema no sirve" >&2; exit 1; }
91'''
92
93[deps]
94build = []