> 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…
atuq v0.4: el branding que se VE estaba en las imágenes del zip, no en el texto
Capturé la pantalla con `grim` y por fin miré lo que el usuario miraba. El diagnóstico cambió
entero: la ventana SÍ estaba —el título decía «New Tab — atuq» y el icono del lanzador era el
zorro— pero la PÁGINA mostraba el logo y la palabra «Nightly».
O sea que la v0.2 rebrandeó lo que se lee y no lo que se ve. El branding de Gecko vive en TRES
sitios y sólo uno es texto FTL:
· `brand.ftl` — las cadenas nuevas (título de ventana, menús). Ya estaba.
· `brand.properties` — las cadenas VIEJAS, formato heredado. Seguía diciendo Nightly, y nadie lo
habría notado leyendo la receta: son 71 bytes en otra ruta del mismo zip.
· las imágenes de `chrome/browser/content/branding/` — TODO lo visible: el favicon de las páginas
internas (ese orbe azul en la pestaña), el logo de about:, y el «wordmark»,
que es una IMAGEN con la palabra dibujada, no un texto traducible.
Se reemplazan 10 imágenes + las dos tablas de cadenas + los dos wordmarks. Cada imagen va con LAS
MISMAS DIMENSIONES que la que sustituye (192, 384, 300x236, 16/32/48/64/128): son tamaños que el CSS
del chrome da por sentados, y meter otro tamaño descoloca la página en vez de rebrandearla. El
`about.png` (300x236, no cuadrado) lleva el medallón ENCAJADO y centrado, no estirado.
El wordmark conserva el `viewBox` exacto del original (0 0 372 99) y `fill="context-fill"`, que es
la convención de Gecko para que el color lo ponga quien lo usa — así sigue el tema claro/oscuro solo
en vez de imponer un color.
La variante «private» usa el mismo medallón a propósito: inventar una segunda marca para un modo del
navegador es ruido, y ese modo ya se distingue por su propio chrome.
MÉTODO, que es lo que más vale de esta vuelta: `grim` está en el corpus (incoming-wlr), se hidrata
en el mismo rootfs y captura la pantalla real desde dentro de la jaula. Dejé de decir «mirá tu
pantalla» y pasé a mirarla yo.
diff --git a/recipes/atuq/branding/brand.properties b/recipes/atuq/branding/brand.properties
new file mode 100644
index 00000000..7fb8af3a
--- /dev/null
+++ b/recipes/atuq/branding/brand.properties
@@ -0,0 +1,3 @@
+brandShorterName=atuq
+brandShortName=atuq
+brandFullName=atuq
diff --git a/recipes/atuq/branding/icons/atuq-about-300x236.png b/recipes/atuq/branding/icons/atuq-about-300x236.png
new file mode 100644
index 00000000..59e52d88
Binary files /dev/null and b/recipes/atuq/branding/icons/atuq-about-300x236.png differ
diff --git a/recipes/atuq/branding/icons/atuq192.png b/recipes/atuq/branding/icons/atuq192.png
new file mode 100644
index 00000000..d5af06ca
Binary files /dev/null and b/recipes/atuq/branding/icons/atuq192.png differ
diff --git a/recipes/atuq/branding/icons/atuq384.png b/recipes/atuq/branding/icons/atuq384.png
new file mode 100644
index 00000000..6b9056f3
Binary files /dev/null and b/recipes/atuq/branding/icons/atuq384.png differ
diff --git a/recipes/atuq/branding/wordmark.svg b/recipes/atuq/branding/wordmark.svg
new file mode 100644
index 00000000..f43484fc
--- /dev/null
+++ b/recipes/atuq/branding/wordmark.svg
@@ -0,0 +1,10 @@
+<!-- Reemplaza a `about-wordmark.svg` y `firefox-wordmark.svg` dentro de browser/omni.ja.
+ - El `viewBox` se conserva EXACTO (0 0 372 99): es el del original, y cambiarlo descolocaría
+ - todo lo que lo posiciona desde CSS.
+ - `fill="context-fill"` es la convención de Gecko para que el color lo ponga quien lo usa —
+ - así el wordmark sigue el tema claro/oscuro solo, en vez de imponer un color. -->
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 372 99">
+ <text x="186" y="76" text-anchor="middle" fill="context-fill"
+ font-family="system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif"
+ font-size="82" font-weight="600" letter-spacing="2">atuq</text>
+</svg>
diff --git a/recipes/atuq/tools/rebrand.py b/recipes/atuq/tools/rebrand.py
index 61ead1f4..c53d2322 100644
--- a/recipes/atuq/tools/rebrand.py
+++ b/recipes/atuq/tools/rebrand.py
@@ -179,6 +179,55 @@ def escribir_iconos():
return escritos
+# ── 3.bis QUÉ SE REEMPLAZA DENTRO DE browser/omni.ja ───────────────────────────────────────────
+# La v0.2 cambió sólo `brand.ftl` y el resultado se vio en pantalla: el TÍTULO de la ventana decía
+# «New Tab — atuq» y la PÁGINA seguía mostrando el logo y la palabra «Nightly». La lección es que el
+# branding de Gecko vive en tres sitios y sólo uno es texto FTL:
+#
+# · `brand.ftl` — las cadenas nuevas (título de ventana, menús). Ya estaba.
+# · `brand.properties` — las cadenas VIEJAS, formato heredado. Seguía diciendo Nightly.
+# · los PNG y SVG de `chrome/browser/content/branding/` — TODO lo que se ve: el favicon de las
+# páginas internas (ese orbe azul en la pestaña), el logo de about:, y el «wordmark» que es una
+# IMAGEN con la palabra dibujada, no un texto traducible.
+#
+# Cada imagen se reemplaza por otra de LAS MISMAS DIMENSIONES: son tamaños que el CSS del chrome da
+# por sentados, y meter un PNG de otro tamaño descoloca la página en vez de rebrandearla.
+IMAGENES = {
+ "chrome/browser/content/branding/icon16.png": "atuq16.png",
+ "chrome/browser/content/branding/icon32.png": "atuq32.png",
+ "chrome/browser/content/branding/icon48.png": "atuq48.png",
+ "chrome/browser/content/branding/icon64.png": "atuq64.png",
+ "chrome/browser/content/branding/icon128.png": "atuq128.png",
+ "chrome/browser/content/branding/about-logo.png": "atuq192.png",
+ "chrome/browser/content/branding/about-logo@2x.png": "atuq384.png",
+ # La variante «private» existe para distinguir la ventana privada. Se usa el mismo medallón a
+ # propósito: inventar una segunda marca para un modo del navegador es ruido, y el modo ya se
+ # distingue por su propio chrome.
+ "chrome/browser/content/branding/about-logo-private.png": "atuq192.png",
+ "chrome/browser/content/branding/about-logo-private@2x.png": "atuq384.png",
+ "chrome/browser/content/branding/about.png": "atuq-about-300x236.png",
+}
+
+
+def reemplazos_branding():
+ r = {}
+ for destino, fuente in IMAGENES.items():
+ ruta = os.path.join(OVERLAY, "branding", "icons", fuente)
+ if not os.path.isfile(ruta) or os.path.getsize(ruta) == 0:
+ fatal(f"falta o está vacío el asset {ruta}")
+ with open(ruta, "rb") as fh:
+ r[destino] = fh.read()
+ for destino, fuente in (
+ ("localization/en-US/branding/brand.ftl", "brand.ftl"),
+ ("chrome/en-US/locale/branding/brand.properties", "brand.properties"),
+ ("chrome/browser/content/branding/about-wordmark.svg", "wordmark.svg"),
+ ("chrome/browser/content/branding/firefox-wordmark.svg", "wordmark.svg"),
+ ):
+ with open(os.path.join(OVERLAY, "branding", fuente), "rb") as fh:
+ r[destino] = fh.read()
+ return r
+
+
# ── 4.bis La extensión de sistema: página de inicio y pestaña nueva ────────────────────────────
# POR QUÉ UNA EXTENSIÓN Y NO UNA PREF. `browser.startup.homepage` acepta una URL, pero la pestaña
# NUEVA no se puede redirigir con una pref desde hace años: el único mecanismo soportado es
@@ -280,12 +329,7 @@ def main():
huella = huella_overlay()
bid = build_id(huella)
claves = rebrandear_application_ini(bid)
- with open(os.path.join(OVERLAY, "branding", "brand.ftl"), "rb") as fh:
- brand = fh.read()
- n = repack_omni(
- os.path.join(APPDIR, "browser", "omni.ja"),
- {"localization/en-US/branding/brand.ftl": brand},
- )
+ n = repack_omni(os.path.join(APPDIR, "browser", "omni.ja"), reemplazos_branding())
iconos = escribir_iconos()
binarios = renombrar_binarios()
# Después del renombrado: los ficheros ya se llaman atuq/atuq-bin.
@@ -295,6 +339,7 @@ def main():
print(f"rebrand: overlay {huella[:16]}… ⇒ BuildID {bid}")
print(f"rebrand: application.ini {sorted(claves)}")
print(f"rebrand: browser/omni.ja re-empacado, {n} entradas, orden y STORED preservados")
+ print(f"rebrand: branding dentro del zip — {len(IMAGENES)} imágenes + brand.ftl + brand.properties + 2 wordmarks")
print(f"rebrand: {len(iconos)} iconos escritos ({', '.join(str(s) for s in TAMANOS)} px)")
print(f"rebrand: binarios {', '.join(binarios)} (+ symlink firefox → {MARCA})")
for l in parches: