
675 - Fish, la primera shell de Linux en Rust
#fish es la #shell amigable en #linux con muchas características que la hacen realmente potente e interesante y ahora además está reescrita en Rust
Llevo ya mas de un año utilizando esta shell en mi equipo personal, y ahora ya te puedo decir que acerté totalmente con el cambio. Fue un proceso largo, desde que comencé en Bash, hasta que llegué a Fish, pero un proceso que ha valido totalmente la pena. Actualmente me encuentro realmente cómodo en Fish. Se puede decir, que me encuentro como pez en el agua. Y me encuentro realmente satisfecho tanto por el desempeño como por la propia personalización, que he ido realizando durante este último año. Pero ahora, te tengo que hacer una confesión, en el momento que decidí convertir Fish en mi shell personal, pensaba que la transición a Rust, ya se había realizado, y la verdad es que no. Es ahora cuando Fish se ha liberado completamente reescrito en Rust. Y te voy a confesar algo mas, no hay diferencia alguna, al menos a simple vista. Así, en este episodio comentaré el estado de Fish en mi escritorio, la migración a Rust y las novedades.

Fish, la primera shell de Linux en Rust
Tengo que confesarte, y hoy va de confesiones, que ayer cuando hice la actualización de Fish a la versión 4.0, esta que de verdad está implementada en Rust, esperaba un cambio revolucionario y que nada funcionara por que la configuración sería distinta. De verdad pensaba que tendría que atar mis dedos al teclado pensando en la velocidad ganada con esta nueva versión.
Mi gozo en un pozo. Nada mas lejos de la realidad, ni se ha roto la compatibilidad, ni he tenido que atar mis dedos al teclado. Así se hacen las actualizaciones, sin romper nada. A ver si otros aprenden.
Mi experiencia con Fish
Como te decía en la introducción estoy realmente satisfecho del cambio que decidí emprender hace algún tiempo, con la migración a Fish. En este tiempo, he descubierto las ventajas de esta shell, y la facilidad y simplicidad de la misma.
Esto me ha permitido centrarme en otros aspectos, y no estar tan centrado en la shell. Y sin embargo, he podido implementar distintas personalizaciones para hacerme la vida mas sencilla.
Así durante este tiempo, he implementado mis propias funciones en Fish, sobre todo para ayudarme en la producción de contenido. Pero también para crear extensiones en GNOME, craer copias de seguridad de las combinaciones de teclas de GNOME, minimizar css, y otras funciones, que como digo, simplifican enormemente mi trabajo con Fish.
De la misma manera, he creado mis propias abreviaturas y alias, así como algunos atajos de teclado, para hacerme la vida mas cómodo… aunque esto último tampoco es que lo haya utilizado en gran medida.
Y sin embargo, todavía tengo algunos tropiezos puntuales. Por ejemplo, de vez en cuando me doy de bruces con el uso de set
para configurar las variables, y algunos otros detalles. También tienes que tener en cuenta que profesionalmente utilizo mayoritariamente bash
y en menor medida ksh
, con lo que es normal, que de vez en cuando cometa alguna torpeza.
Pero, lo mas importante para mi, es que he conseguido replicar la configuración en todos mis dispositivos, aunque todavía no he migrado Termux a Fish 4.0, esto me queda pendiente.
Así, utilizo determinadas herramientas en todos los dispositivos que me facilitan junto con Fish, enormemente el trabajo. Herramientas como son,
yadm
para gestionar los dotiles yjinrender
para las plantillas.atuin
para trabajar con el historialstarship
para tener un prompt elegante, potente y increíblemente útilzellij
mi multiplexor de cabeceradime
una sencilla utilidad para tener la IA y facilitarme los commits.
Fish reescrito con Rust
Durante estos dos últimos años, los desarrolladores de Fish, han trabajado en reescribir esta shell utilizando Rust. El objetivo de realizar esta tarea, es ni mas ni menos que el de mejorar el rendimiento y la mantenibilidad de Fish.
Realmente, el cambio ha sido completamente transparente, no vas a notar nada, o al menos, yo no he notado absolutamente nada con esta migración. Los comandos y configuraciones habituales permanecen sin cambios.
Esto no quita que se hayan introducido mejoras notables. como un sistema actualizado de notación de enlaces de teclas y una mayor compatibilidad con diferentes terminales.
Integración con terminales
Además, esta nueva versión de Fish integra automáticamente secuencias OSC 133
para prompts y salida de comandos, facilitando una sincronización más fluida con diversos terminales que anteriormente dependían de scripts adicionales de integración de shell.
Gestión de comandos
También se ha mejorado la gestión de líneas de comandos largos, que ahora se desplazan en lugar de renderizarse incorrectamente. Las ediciones realizadas mediante enlaces de línea de comandos son visibles de inmediato, ofreciendo una experiencia de scripting e interacción más intuitiva.
Paginador de historial
El paginador de historial (ctrl-r
), introducido en Fish 3.6, ha sido refinado en esta versión. Ahora permite utilizar la sintaxis de glob para filtrar entradas de historial de manera más precisa, aplicándose estrictamente al comando actual y facilitando la reconstrucción de comandos complejos sin necesidad de buscar en scripts completos.
Sin embargo, actualmente no estoy utilizando el paginador de historial, porque en su lugar utilizo atuin
, desde hace ya bastante tiempo, lo que ha supuesto una notable mejora en la interacción con el historial.
Temas
Se ha ajustado el tema predeterminado, de forma que los comandos ahora aparecen en el color normal del terminal en lugar del azul, que podía ser difícil de leer. Los usuarios existentes mantendrán sus configuraciones actuales, a menos que recarguen manualmente el tema mediante fish_config
.
Auto instalables
Una característica destacada es la posibilidad de construir versiones auto-instalables de Fish. Después de compilar, se puede ejecutar un único binario autónomo que extrae todo lo necesario—funciones, páginas de manual e incluso la herramienta de configuración web—en el directorio personal del usuario. Esto facilita la ejecución de Fish en entornos donde no se dispone de un gestor de paquetes o no se tienen permisos para utilizarlo. Versiones precompiladas están disponibles para plataformas principales como x86_64 y aarch64 Linux en la página de GitHub del proyecto.
Exclusión de comandos del historial
Finalmente, se ha añadido una función muy solicitada: la capacidad de excluir ciertos comandos del historial. Definiendo una función personalizada llamada fish_should_add_to_history
, los usuarios pueden decidir qué comandos se retienen en el historial. Cualquier comando marcado para exclusión permanece en un espacio temporal, permitiendo su repetición inmediata con la tecla de flecha hacia arriba, pero una vez que se ejecuta otro comando, se elimina.
Que yo recuerde, esto también se puede configurar en atuin
, aunque yo realmente, a día de hoy no lo estoy utilizando.
Conclusión
En resumen, Fish Shell 4 representa una actualización significativa que combina una reescritura completa en Rust con mejoras funcionales y de usabilidad, manteniendo su compromiso con una experiencia de usuario amigable e interactiva.
Gracias, hace tiempo que no te las doy, pero que sepas que tienes un lector muy agradecido en mí desde hace mucho tiempo. PS: Le he pedido a deepseek y a gemini que me programasen en html un mockup de reloj de esfera de 24h con otras concéntricas enseñando el internet time (1000 beats, 42, 84, 125 …) dos horarios, ahora trabajo en Guinea, tambien en números sin segundos y a veces coincide y a veces no, y temperatura y pluviometría, con gradientes de colores rojo verde, y azul amarillo alrededor de la media. Sale, más menos que más, pero me encantaría que alguien que supiese los hiciese para el escritorio y/o android y relojes inteligentes, por si te interesa la idea o sabes a quien pudiera interesarle. En blogspot opinadorcompulsivo están, por si interesan a alguien.