Stow: Alacritty

Compartir esta publicación

Compartir en facebook
Compartir en linkedin
Compartir en twitter
Compartir en email

Llevo en mac muchos años trabajando con la misma terminal: iTerm2. Es muy conocida por la comunidad macera y no es para menos, una terminal no es que tenga mucho trabajo que hacer pero lo poco que debe hacer, lo hace muy bien (tabs, integración con tmux, personalización.)

El problema viene cuando nos vamos a otro sistema operativo. Recientemente he tenido el placer (y no es irónico) de trabajar con el entorno Windows y su WSL2, y me he vuelto loco por encontrar algo parecido.

Lo primero que necesitaba era entender qué necesitaba realmente, que venía a ser el theme y los tabs. El tema de los themes es algo muy común en la mayoría de terminales y los tabs, en los modernos, también. Pero añadí un tercer elemento a la ecuación de lo que buscaba, y es que fuera cross platform, no tener que estar configurando N terminales para cada SO que tenga que usar a lo largo de mi carrera, ahí entra Alacritty.

Disclaimer: No hago un uso intensivo de la terminal, como developer paso más tiempo en IntelliJ.

Alacritty se vende como el más rápido dado que tira de OpenGL, y es cierto que he notado cierta velocidad a la hora de cargar, aunque puede ser placebo, no tengo queja de la velocidad de iTerm2. También es un terminal configurable mediante dotfile, un punto muy positivo dado que puedo incluirlo en mi colección de .dotfiles.

En este artículo vamos a ver una configuración simple pero muy funcional acerca de la terminal Alacritty en conjunto con ZSH y tmux.

Como hemos comentado previamente, Alacritty se configura mediante un dotfile que guardaremos en nuestro stow directory, por lo que crearemos toda la estructura de ficheros que luego linkaremos en nuestra $HOME con stow.

mnrcuH1xcr

La ruta en la que nos basaremos nosotros para linkar la configuración será `$HOME/.config/alacritty/alacritty.yml`, aunque tienes más directorios en la documentación.

$ cd ~/.dotfiles

$ mkdir -p alacritty/.config/alacritty
$ touch alacritty/.config/alacritty/alacritty.yml

Configurando Alacritty

Antes de configurar nada, Alacritty tiene ya unas configuraciones sensatas por defecto, entre ellas, la opción de que la configuración se refresca automáticamente sin tener que reiniciar la terminal.

Una vez creado el fichero de configuración, empezaremos a completarlo, comenzaremos por la sección de la ventana, donde definiremos una mínima opacidad, que se ejecute en modo ventana (no fullscreen) y con un padding para crear distancia entre el texto y el borde del terminal:

window:
 opacity: 0.965
 startup_mode: Windowed
 padding:
   x: 8
   y: 8

El siguiente step es el histórico de comandos que guarda la terminal como caché:

scrolling:
 history: 100000
 multiplier: 3

En History le indicaremos el número de líneas a guardar en el buffer y multiplier es el número de líneas que nos moveremos en cada tick del scroll.

Ahora nos toca configurar la shell que lanzaremos cuando Alacritty se abra con el siguiente snippet:

shell:
 program: /bin/zsh
 args:
   - --login

El argumento login es para que la shell lea las configuraciones dentro de la home del usuario, si no se indica, no llegará a leer el fichero ~/.zshrc.

Como último, Alacritty te permite configurar también key bindings para que realicen acciones, os dejo aquí los míos (por el momento):

key_bindings:
 - { key: H, mods: Command, action: Hide }
 - { key: Q, mods: Command, action: Quit }
 - { key: V, mods: Command, action: Paste }
 - { key: C, mods: Command, action: Copy }
 - { key: Key0, mods: Command, action: ResetFontSize }
 - { key: Equals, mods: Command, action: IncreaseFontSize }
 - { key: Minus, mods: Command, action: DecreaseFontSize }

Aquí no creo que haga falta explicar nada ya que de normal son comunes a muchas aplicaciones, a parte que la acción define muy bien lo que hace sin lugar a dudas.

Hay unos apartados dentro de la configuración donde le indicas la font-family a utilizar, tamaños y colores, al ser algo muy personal no voy a dedicarle una sección, abajo del todo tendréis un link a mi configuración por si interesa pero es bastante self explanatory.

El complemento perfecto

Si tengo que sacarle una pega a Alacritty es la falta de gestión de tabs y paneles de manera nativa, es por ello que tenemos que tirar de herramientas externas como tmux. En este artículo no vamos a definir que es tmux dado que ya hablamos de él hace 5 años en otro artículo y no ha cambiado mucho desde entonces, sigue haciendo su función de una manera excelente.

Tmux también basa su configuración en un dotfile linkado en $HOME/.tmux.conf

A continuación os dejo mi configuración respecto a los keybindings que uso diariamente (a tener en cuenta es que mi prefijo es C-a [Control + A])

# create new window and pane
bind c new-window -c "#{pane_current_path}"
bind-key h split-window -v -c '#{pane_current_path}'
bind-key v split-window -h -c '#{pane_current_path}'
 
# close window and pane without confirmation
bind-key C-w kill-pane
bind-key & kill-window
 
# utils
bind-key b break-pane -d
bind-key C-j choose-tree

Mi día a día consiste en abrir tabs, ya sean verticales (C-a v) o horizontal (C-a h), realizar ciertas acciones, y cerrarlas (C-a w). Si veo que la tab pilla muy valor y me interesa darle más prioridad, lo saco a su propia window (C-a b). Cuando termino de usar el window, lo cierro (C-a &). Si la cosa se complica, lanzó el árbol de windows/tabs que tengo en la sesión actual (C-a C-j) y las cierro directamente desde el árbol.

Solo queda una combinación más que no suelo usar mucho, pero siempre está bien tenerla:

# reload tmux C-a + r
bind-key r source-file ~/.tmux.conf \; display-message "~/.tmux.conf reloaded"

Con ello, pulsando [C-a r] recargamos la configuración de tmux, evitando tener que cerrar sesión y volver a abrir.

Alacritty

Hasta ahora, hemos configurado Alacritty por un lado y tmux por el otro, poca relación han tenido, lejos que uno llama al otro. Ahora entramos en una parte que le he visto mucho valor, sobretodo a la hora de conectar con tmux, ya que es una herramienta tan potente y tan versátil, que la gente suele tenerle mucho respeto, y es la creación de bindings de Alacritty que lancen comandos de tmux.

A continuación dejo la lista de keybindings completa:

key_bindings:
 - { key: H, mods: Command, action: Hide }
 - { key: Q, mods: Command, action: Quit }
 
 - { key: V, mods: Command, action: Paste }
 - { key: C, mods: Command, action: Copy }
 
 - { key: Key0, mods: Command, action: ResetFontSize }
 - { key: Equals, mods: Command, action: IncreaseFontSize }
 - { key: Minus, mods: Command, action: DecreaseFontSize }
 
 - { key: T, mods: Command, chars: "\x01\x63" } # new window
 - { key: W, mods: Command|Shift, chars: "\x01\x77" } # close window
 
 - { key: V, mods: Shift, chars: "\x01\x76" } # new pane (vertical)
 - { key: H, mods: Shift, chars: "\x01\x68" } # new pane (horizontal)
 - { key: W, mods: Shift, chars: "\x01\x77" } # close pane
 
 - { key: B, mods: Shift, chars: "\x01\x62" } # make window from pane
 # move to window 1, 2, 3 with command+n
 - { key: Key1, mods: Command, chars: "\x01\x31" }
 - { key: Key2, mods: Command, chars: "\x01\x32" }
 - { key: Key3, mods: Command, chars: "\x01\x33" }
 - { key: Key4, mods: Command, chars: "\x01\x34" }
 - { key: Key5, mods: Command, chars: "\x01\x35" }
 - { key: Key6, mods: Command, chars: "\x01\x36" }
 - { key: Key7, mods: Command, chars: "\x01\x37" }
 - { key: Key8, mods: Command, chars: "\x01\x38" }
 - { key: Key9, mods: Command, chars: "\x01\x39" }

Los chars a enviar cuando pulsemos la combinación de teclas elegida se pueden sacar con muchas herramientas, personalmente he usado “xxd”, junto con los parámetros -xs se inicia esperando un input, es ahí donde pulsando la combinación de teclas que tenemos configurados en tmux, sacaremos su valor hexadecimal para configurar en Alacritty, por ejemplo:

M ZC37EO F6x1e96mt8bNQpi0iemyuTkRe05VZMiH cV8Z4RFBrCvJgqXV3vY2XD7OHapciIQqVG 8TX9vQPucBSKlsLXVSteX h6g3TNdSZ3fJaWAMXY5tCQQtNUPe cvpJnbVOeOjNwV00jHNs2Q

Aquí podemos ver en la primera línea que hemos pulsado “C-a+c + enter”, que es el comando que lanzaremos en tmux para crear una nueva ventana. El resultado desglosado vendría a ser:

01 C-a
63 c
0a enter

En este caso, la creación de una nueva windows la hemos configurado cuando pulsamos CMD + t (no hace falta añadir el enter en hexadecimal al comando).

 - { key: T, mods: Command, chars: "\x01\x63" } # new window

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

Suscríbete a nuestro boletín de noticias

Recibe actualizaciones de los últimos descubrimientos tecnológicos

Acerca de Apiumhub

Apiumhub reúne a una comunidad de desarrolladores y arquitectos de software para ayudarte a transformar tu idea en un producto potente y escalable. Nuestro Tech Hub se especializa en Arquitectura de Software, Desarrollo Web & Desarrollo de Aplicaciones Móviles. Aquí compartimos con usted consejos de la industria & mejores prácticas, basadas en nuestra experiencia.

Posts populares
Obtén nuestro Libro: Software Architecture Metrics

Global Software Architecture Summit '22

Reserva tu plaza!

Reserva

¿Tienes un proyecto desafiante?

Podemos trabajar juntos

Secured By miniOrange