---
name: install_chromium_proxy_extension
kind: function
lang: bash
domain: browser
version: 1.0.0
purity: impure
signature: install_chromium_proxy_extension --ext-dir DIR [--name NAME] [--stable-dir DIR] [--uninstall]
description: "Instala una extension desempaquetada de Chromium en todos los perfiles del usuario de forma persistente, escribiendo un fragmento en /etc/chromium.d/ que el wrapper de Chromium carga en cada arranque. Pensado para distribuir la extension de toggle de proxy de web_proxy sin Web Store, pero sirve para cualquier extension desempaquetada."
tags: [web-proxy, chromium, extension, browser, proxy, install]
uses_functions: []
uses_types: []
returns: []
returns_optional: false
error_type: "error_go_core"
params:
  - name: --ext-dir
    desc: "Directorio de la extension desempaquetada de origen (debe contener manifest.json). Obligatorio salvo en --uninstall."
  - name: --name
    desc: "Nombre del fragmento en /etc/chromium.d/ (default web_proxy_ext). Identifica esta instalacion para poder desinstalarla."
  - name: --stable-dir
    desc: "Ruta estable donde se copia la extension, independiente del repo (default ~/.web_proxy/extension). --load-extension apunta aqui."
  - name: --uninstall
    desc: "Elimina el fragmento de /etc/chromium.d/ y la copia estable. No requiere --ext-dir."
output: "JSON en stdout: {installed|uninstalled, name, stable_dir, chromiumd, ext_id}. Requiere sudo para escribir en /etc/chromium.d/."
file_path: bash/functions/browser/install_chromium_proxy_extension.sh
---

# install_chromium_proxy_extension

Instala una extension desempaquetada de Chromium en **todos los perfiles** del
usuario, de forma persistente, sin pasar por la Chrome Web Store.

## Ejemplo

```bash
# Instalar la extension de toggle de proxy de web_proxy en todos los perfiles
install_chromium_proxy_extension --ext-dir /home/enmanuel/fn_registry/apps/web_proxy/extension

# Desinstalarla
install_chromium_proxy_extension --uninstall

# Otra extension, con nombre y ruta estable propios
install_chromium_proxy_extension --ext-dir ~/mis-extensiones/foo --name foo_ext --stable-dir ~/.local/share/foo_ext
```

Tras instalar, cierra y vuelve a abrir Chromium: la extension aparece en todos
los perfiles, incluidos los que se creen despues.

## Cuando usarla

Cuando necesitas que una extension desempaquetada este presente en todos los
perfiles de Chromium de una maquina (por ejemplo, un toggle de proxy de captura
preconfigurado) y no quieres publicarla en la Web Store ni cargarla a mano en
cada perfil. Es la pieza que hace que `web_proxy` quede "a un clic" en cualquier
ventana de Chromium.

## Gotchas

- **Requiere sudo** para escribir en `/etc/chromium.d/`. Ten las credenciales
  cacheadas (`sudo -v`) antes de invocarla de forma no interactiva.
- **Solo para el wrapper de Chromium de Debian/Ubuntu** (paquete `chromium`,
  no snap ni Google Chrome). El wrapper hace `source /etc/chromium.d/*` en cada
  arranque. Comprueba con `head -1 $(command -v chromium)` que es un script.
- **`--enable-remote-extensions` es imprescindible** en estos builds: sin el,
  el wrapper anade `--disable-extensions-except` y `--disable-background-networking`,
  que deshabilitan toda extension que no venga por `--load-extension`. El
  fragmento generado lo incluye; por eso las demas extensiones del usuario
  siguen funcionando.
- La extension se carga **desempaquetada** (`--load-extension`), no como `.crx`
  firmado. Chromium puede mostrar un aviso de "extensiones en modo desarrollador".
  El force-install via managed policy con `.crx` local + `update_url file://`
  no funciona con este wrapper (lo bloquea `--disable-extensions-except`).
- El ID de la extension depende de `--stable-dir` (se deriva del path). Si
  cambias la ruta estable, el ID cambia.
- No reinicia Chromium: los cambios aplican en el siguiente arranque del
  navegador.

## Capability growth log

- v1.0.0 (2026-06-02) — version inicial. Instala/desinstala extension global via /etc/chromium.d con --enable-remote-extensions + --load-extension.
