# appindicator 64 — los ICONOS DE BANDEJA que GNOME quitó del shell. Es la extensión que hace que # aparezcan en el panel las apps que usan `StatusNotifierItem` / `org.kde.StatusNotifierItem` (y las # `libappindicator` viejas): clientes de chat, sincronizadores, gestores de portapapeles. Sin ella, # esas apps corren y no tienen dónde mostrarse. # # Tercera extensión del catálogo. El patrón y el porqué de usar el REPO y no el zip de # extensions.gnome.org están en la cabecera de `gnome-shell-extension-blur-my-shell`. # El tag `v64` es el que EGO sirve para shell 48, preguntado a su API — ⚠ y acá la pregunta SÍ # importó: el repo ya tiene `v65`, que es la que se habría tomado por reflejo. # # ══ ÉSTA SE CONSTRUYE CON MESON, NO CON UN MAKEFILE ════════════════════════════════════════════ # Las otras dos son un `pack` y un `make install`; ésta trae `meson.build` con los módulos `gnome` # e `i18n`, y hace lo mismo que un paquete de distro cuando el prefix NO es local: # · el árbol va a /share/gnome-shell/extensions// # · el gschema al directorio GLOBAL /share/glib-2.0/schemas # · los .mo a /share/locale # ⚠ `-Dlocal_install=disabled` explícito: la opción viene en `auto`, y en `auto` decide mirando si # el prefix es /usr/local Y si el uid es 0. Nuestro sandbox corre como root con prefix /usr, así que # hoy resolvería bien por accidente — pero «funciona por accidente se ve igual que funciona por # diseño», y si mañana el lab dejara de ser root la instalación se iría a $HOME/.local y el artefacto # sellaría vacío. # # ⚠ `jq` VA EN [deps] AUNQUE LA EXTENSIÓN SEA JAVASCRIPT PURO: `meson.build:22` saca el uuid del # `metadata.json` con `run_command(jq, '-r', '.uuid', …)` — es una herramienta del sandbox, no una # librería que se enlace. Sin ella meson corta en el configure. name = "gnome-shell-extension-appindicator" version = "64" # licencia: el `meson.build` declara `license: 'GPL2'` y las cabeceras de los fuentes (extension.js, # appIndicator.js…) dan la concesión completa: «either version 2 of the License, or (at your option) # any later version». ⚠ No se dedujo del LICENSE: su apéndice «How to Apply» contiene esa frase # siempre, así que buscarla ahí da positivo aunque el proyecto sea -only. license = "GPL-2.0-or-later" [source] repo = "https://github.com/ubuntu/gnome-shell-extension-appindicator" commit = "c934adc6c97363b8e6bb161ca8d1ac62d1da3d63" # tag v64 (ADR 0006: commit fijo, nunca HEAD) [build] compiler = "zig-cc" target = "x86_64-linux-musl" link = "dynamic" [build.phases] configure = "PYTHONPATH=/usr/lib/python3.12/site-packages meson setup output --prefix=/usr --buildtype=release --wrap-mode=nodownload -Dlocal_install=disabled" compile = "PYTHONPATH=/usr/lib/python3.12/site-packages ninja -C output" install = ''' set -e UUID="appindicatorsupport@rgcjonas.gmail.com" PYTHONPATH=/usr/lib/python3.12/site-packages DESTDIR=/out meson install -C output --no-rebuild D="/out/usr/share/gnome-shell/extensions/$UUID" # Guardián: se comprueba el RESULTADO, no la intención. Si `local_install` hubiera resuelto a # «local», esto habría instalado en $HOME/.local y el artefacto sellaría igual, vacío (regla 3 de # CLAUDE.md — un vacío llega hasta el final diciendo que todo fue bien). test -s "$D/metadata.json" test -s "$D/extension.js" grep -q '"48"' "$D/metadata.json" # falla ruidoso si un bump deja de soportar shell 48 # El gschema tiene que haber ido al directorio GLOBAL, que es el que compila el lanzador al arrancar. test -s /out/usr/share/glib-2.0/schemas/org.gnome.shell.extensions.appindicator.gschema.xml ''' [deps] # `jq` es del configure (saca el uuid del metadata.json); `glib` trae glib-compile-schemas para el # módulo `gnome` de meson y `gettext-tiny` el msgfmt para el módulo `i18n`. build = ["meson", "samurai", "python3", "pkgconf", "jq", "glib", "pcre2", "libffi", "zlib", "gettext-tiny"]