Automatitza els teus fluxos amb Espanso: textos, scripts i productivitat amb reemplaçaments intel·ligents
Quan es treballa amb terminals, documentació, scripts repetitius o tasques administratives a Linux, hi ha moltes operacions que, encara que petites, consumeixen temps innecessari si es repeteixen desenes de vegades al dia. Espanso és una eina d’expansió de text pensada per alleujar precisament aquesta càrrega. Però reduir-lo a un “autocompletador” seria un error: la seva capacitat per executar scripts, inserir dinàmicament dades o integrar eines externes ho fa útil en entorns reals de treball, no només en l’escriptura ocasional.
Què és Espanso i per què val la pena incorporar-lo?
Espanso és un expansor de text open source que treballa en segon pla detectant triggers (paraules clau que comencen per : o per un altre prefix configurable) i reemplaçant-los pel contingut definit en la seva configuració. Això pot ser text estàtic, sortides dinàmiques (com la data actual, resultats de comandaments, etc.), o fins i tot blocs personalitzats que executen scripts.
Està dissenyat per ser multiplataforma, però la seva arquitectura basada a YAML i la seva compatibilitat amb scripts externs el torna especialment útil a Linux. No requereix entorn gràfic, pot executar-se sense problemes sobre Wayland o X11, i s’integra bé amb sistemes de finestra tipus i3, Sway o fins i tot sense entorn gràfic, si treballes amb eines com Tmux o Tilix.
Instal·lació a Linux
Espanso es pot instal·lar directament des del seu lloc o fent servir el seu repositori. A sistemes Debian/Ubuntu:
curl -s https://espanso.org/install.sh | bash
Això instal·la la versió estable, configura el servei d’usuari amb systemd –user i crea les carpetes de configuració en ~/.config/espanso.
Si prefereixes compilar o gestionar versions amb càrrec, també és possible, però per a la majoria d’usuaris l’script oficial funciona correctament.
Un cop instal·lat, assegura’t que el servei està actiu:
espanso start
Pots verificar-ho amb:
espanso status
Si treballes sense entorn gràfic i fas servir terminal pur, assegura’t de llançar Espanso dins de l’entorn del gestor de sessions o tmux. Altrament, no detectarà l’entrada de teclat correctament.
Primeres passes: comportament bàsic i decisió de prefix
Per defecte, Espanso escolta paraules que comencen amb : (per exemple :data o :sig). Aquest prefix es pot canviar a la configuració global (default.yml) si genera conflictes, especialment amb editors com Vim o Neovim, on el : ja té un significat. En aquest cas, pots optar per ;, ,, o fins i tot un prefix més llarg com :esp-.
Exemple per canviar-lo:
# ~/.config/espanso/default.yml
config:
trigger_key: ";"
Aquest ajust és important. Escollir un prefix que no interfereixi amb els teus fluxos habituals és clau per evitar falsos positius.
Ús pràctic
1. Fragments de text comú
matches:
- trigger: ":sig"
replace: "Una salutació,\n\nJoan Petit\nAdministrador de Sistemes"
Ideal per a correus, respostes de tiquets o documentació interna.
2. Inserció de data o comandaments dinàmics
matches:
- trigger: ":data"
replace: "{{mydate}}"
vars:
- name: mydate
type: shell
params:
cmd: "date +'%Y-%m-%d'"
Això és útil no només per inserir dates actuals, sinó per crear marques de temps en commits, logs interns o noms d’arxiu.
3. Comandaments o scripts més complexos
matches:
- trigger: ":lamevaip"
replace: "{{ip}}"
vars:
- name: ip
type: shell
params:
cmd: "ip a | grep 'inet ' | grep -v '127.0.0.1' | awk '{print $2}' | cut -d'/' -f1"
Si treballes a suport o monitorització, tenir aquest tipus de dades a l’abast d’un parell de tecles redueix errors i accelera respostes.
Integració amb scripts personalitzats
Aquí és on Espanso se separa dels simples autocompletadors.
Pots crear blocs que executin scripts a Bash, Python, o qualsevol binari accessible. El valor de retorn es pot capturar com a reemplaçament.
1. Cridar a scripts externs
matches:
- trigger: ":uptime"
replace: "{{up}}"
vars:
- name: up
type: shell
params:
cmd: "/home/usuario/scripts/get_uptime.sh"
Aquest enfocament és útil quan el comandament és més llarg, necessita diversos passos o dependències.
Variables del sistema, porta-retalls i altres dades contextuals
Espanso també permet accedir a variables de l’entorn i contingut del porta-retalls, la qual cosa el torna útil per treballar amb dades temporals.
1. Inserir text des del porta-retalls
matches:
- trigger: ":clip"
replace: "{{clipboard}}"
vars:
- name: clipboard
type: clipboard
Això pot ajudar quan es vol formatejar o embolicar contingut copiat amb etiquetes específiques, per exemple a Markdown:
- trigger: ":mdcode"
replace: "```\n{{clipboard}}\n```"
vars:
- name: clipboard
type: clipboard
Control de context: evita que s’ activi on no ha d’activar-se
Espanso no sempre ha d’estar actiu. Si fas servir Vim, eines de desenvolupament o certs IDEs, és probable que no vulguis que els reemplaços funcionin aquí.
Pots definir filters per finestra o aplicació usant regles basades en window_class o title. Exemple:
filter_class:
- "Alacritty"
- "Firefox"
matches:
- trigger: ":mail"
replace: "contacte@domini.com"
conditions:
- not:
app: "Firefox"
Aquesta lògica condicional permet afinar el comportament en entorns mixtos.
Organització modular: com mantenir la teva configuració neta
A mesura que creixes en nombre de dreceres, mantenir tot en un sol arxiu es torna immanejable. Espanso permet dividir la configuració en paquets.
Cada paquet viu en ~/.config/espanso/match/packages/.
Estructura típica d’ un paquet:
packages/
├── git-tools/
│ └── package.yml
├── signatura-correu/
│ └── package.yml
└── dates/
└── package.yml
Pots activar-los o desactivar-los segons l’entorn de treball:
espanso restart
espanso status
L’ús de paquets per context (projecte, client, idioma, departament) ajuda a evitar conflictes i mantenir la configuració manejable.
Més casos d’ ús
Respostes tècniques a tiquets
- trigger: ":reboot"
replace: "Hem reiniciat el servei i verificat que l'aplicació respon correctament. Si el problema persisteix, indica-ho per aquest mitjà."
Automatització per a logs de sistemes
- trigger: ":logerr"
replace: "[{{timestamp}}] ERROR: {{clipboard}}"
vars:
- name: timestamp
type: shell
params:
cmd: "date +'%F %T'"
- name: clipboard
type: clipboard
Documentació tècnica repetitiva
- trigger: ":blk"
replace: |
**Bloc afectat:** `{{clipboard}}`
**Acció realitzada:**
- Verificació manual
- Reinici del servei
- Validació de logs
**Resultat:** Operatiu
vars:
- name: clipboard
type: clipboard
Problemes comuns i com resoldre’ls
1. Espanso no respon al teclat a Wayland
Espanso depèn de mecanismes d’accés al teclat que a Wayland estan limitats. Fes servir el backend espanso-wayland si està disponible, o executa dins de XWayland. En alguns entorns, no hi ha solució completa encara sense privilegis elevats.
2. Conflictes amb dreceres en editors
Configura els filtres per classe de finestra. Especialment si fas servir Vim, Nano, emacs o editors de línia.
3. No reconeix entrada a terminal multiplexada (tmux, screen)
Llança Espanso des de l’entorn on corre el multiplexor, o assegura’t que estigui en la mateixa sessió de systemd –user.
4. Triggers que no s’executen
Verifica el trigger_key, revisa que no hi hagi errors YAML i fes servir espanso logs per depurar errors.
Variables d’ entorn persistents i comportament a scripts
Espanso executa comandaments fent servir un entorn net, la qual cosa significa que variables personalitzades que hagis definit al teu .bashrc o .zshrc no estaran necessàriament disponibles. Si els teus scripts en depenen, hi ha dues solucions:
- Referenciar l’ script directament, sense dependre d’ àlies o funcions shell.
- Crear un entorn controlat al propi script:
#!/bin/bash
source /home/usuario/.bashrc
# o exportar manualment les variables necessàries
Recomanació: mantingues els scripts externs a una carpeta específica (per exemple ~/espanso-scripts/) i controla explícitament les dependències d’entorn.
Seguretat: compte amb el contingut dinàmic
Tot i que Espanso no executa codi sense que el defineixi explícitament, és fàcil caure en l’error d’automatitzar accions sensibles sense filtrar l’entrada. Si còpies contingut del porta-retalls, per exemple, i l’insereixes directament a un shell script automatitzat, pots introduir dades arbitraries.
Evita automatismes cecs que facin servir el porta-retalls o dades sense validar. Sempre que facis servir type: shell, considera el risc d’execució si el comandament inclou entrada d’usuaris o tercers.
Rendiment i escalabilitat: ¿afecta tenir molts triggers?
Espanso carrega totes les coincidències definides en iniciar. Si defineixes centenars o milers de triggers, hi pot haver un petit impacte al temps d’arrencada, però no en l’execució.
No obstant això, si fas servir molts comandaments type: shell, la latència es pot tornar perceptible. Això és especialment notori si l’script és pesat o bloquejant. Per a aquests casos:
- Evita fer crides externes a triggers molt freqüents.
- Fes servir reemplaços estàtics on sigui possible.
- Considera precarregar valors amb scripts que actualitzin fitxers temporals si les dades canvien poc.
Exemple: en lloc de consultar constantment la IP, pots tenir un cron job que l’escrigui en un arxiu temporal i llegir des d’aquí.
Espanso a equips de treball o múltiples dispositius
Quan es treballa en diversos entorns o es comparteixen configuracions entre diversos usuaris (per exemple, un equip de suport tècnic o desenvolupament), la portabilitat es torna clau.
Versionar la teva configuració amb Git
mkdir -p ~/espanso-config
cd ~/.config/espanso
rsync -av --exclude=*.log . ~/espanso-config/
cd ~/espanso-config
git init
git add .
git commit -m "Configuració base d’ Espanso"
Això permet:
- Mantenir historial de canvis.
- Compartir paquets amb altres usuaris.
- Restaurar el teu entorn a una màquina nova amb facilitat.
Sincronització amb serveis al núvol
Tot i que pots fer servir eines com Syncthing, Nextcloud o fins i tot Dropbox, el més robust pot ser un repositori Git privat (per exemple a Gitea, GitLab o GitHub).
Si fas això, evita sincronitzar espanso.db o qualsevol arxiu d’estat intern. Només interessa la configuració (default.yml, match/packages, scripts, etc.).
Checklists útils per a ús diari
Checklist de desplegament en un nou entorn Linux
- Instal·lar Espanso des de l’script oficial o paquet.
- Verificar que espanso start funciona correctament.
- Canviar trigger_key si hi ha conflictes amb el teu editor.
- Restaurar paquets des de la teva còpia local o repo Git.
- Provar almenys tres triggers bàsics.
- Comprovar accés a scripts i permisos d’ execució.
- Configurar filtres per finestra si fas servir editors o terminals especials.
- Verificar integració amb porta-retalls (xclip o wl-clipboard instal·lat).
Checklist per definir un nou trigger robust
- És realment útil o només anecdòtic?
- Té un nom únic que no es pot activar per accident?
- Requereix entrada dinàmica (data, clipboard, etc.)?
- Fa servir shell? Verifica que el comandament sigui ràpid (<100ms).
- S’executa correctament des de la terminal sense Espanso?
- S’ha de filtrar per finestra o aplicació?
- Està documentat si es comparteix amb d’altres?
Quan no convé fer servir Espanso?
Tot i que és flexible, no tots els casos són adequats per a Espanso. Per exemple:
- Tasques que modifiquen arxius o el sistema directament. Per a això, és preferible fer servir un àlies, script o funció al teu shell.
- Gestió complexa de dades estructurades. Si necessites lògica condicional avançada o treballar amb JSON, millor fer servir eines com jq directament en scripts.
- Ambients amb alta seguretat o entrada sensible. Automatismes que insereixen claus, tokens o comandaments privilegiats poden convertir-se en un risc si no es controlen bé.
Alternatives i comparació
Si véns de Windows, probablement hagis fet servir eines com AutoHotKey. Espanso té un enfocament diferent: més simple, menys dependent de GUI, i amb millor integració a sistemes tipus Unix.
A Linux hi ha altres opcions:
- Autokey: més orientat a entorns gràfics i scripts Python. Útil, però més pesat i amb pitjor suport per a Wayland.
- xdotool + scripts: flexible però menys pràctic per a manteniment a llarg termini.
- Snippets a editors específics (Vim, VSCode): bona opció, però limitada a l’editor. Espanso actua a nivell del sistema, cosa que el fa més versàtil.
Et convé fer servir Espanso en producció?
Sí, si necessites inserir informació repetitiva, executar scripts breus amb una paraula clau o generar contingut dinàmic a qualsevol aplicació que accepti entrada de teclat. No, si el que necessites és una automatització complexa o d’alt risc.
Requereix molt de manteniment?
No especialment. Però sí que convé establir un criteri clar per nomenar, documentar i organitzar els paquets i triggers, especialment si treballes amb més persones o fas servir múltiples dispositius.
Recursos addicionals
- Documentació oficial: https://espanso.org/docs/
- Repositori de GitHub: https://github.com/espanso/espanso
- Comandaments útils:
espanso edit # Obre l'arxiu de configuració
espanso restart # Recàrrega la configuració
espanso path # Mostra la ruta de configuració
espanso logs # Diagnòstic d'errors
Conclusió
Espanso no és una solució màgica, però sí una eina útil quan es configura amb criteri. Pot estalviar temps a tasques repetitives, ajudar a estandarditzar respostes tècniques o simplement reduir errors de tipeig en comandaments o textos estructurats.
El valor real està en com s’integra amb els teus fluxos existents: terminal, edició de text, tiquets, documentació interna o administració de sistemes. No reemplaça scripts o funcions shell, però sí que els complementa bé quan el que necessites és velocitat, repetibilitat i agilitat sense dependre del context.
Amb una configuració ben pensada, Espanso pot convertir-se en una eina invisible però poderosa per al teu dia a dia.