¡Adiós Bash, hola Zsh!
He decidido migrar mi CLI desde la fiable y conocida bash
a la poderosa y versátil zsh
. Se trata de una evolución extendida de la Bourne Shell (sh), no solo hereda muchas de las características familiares de Bash, sino que también introduce una serie de nuevas funcionalidades, soporte para plugins y temas personalizados. Apple adoptó Zsh como la shell predeterminada hace algún tiempo, me faltaba dar el paso en mis sistemas Linux, incluido WSL2 en Windows.
¿Por qué Zsh?
Antes de sumergirnos en la instalación y configuración de Zsh (abreviatura de “Z Shell”), es esencial comprender las razones:
-
Autocompletado Avanzado: Zsh brinda un autocompletado inteligente y avanzado que supera con creces las capacidades de Bash.
-
Personalización Extensiva: Zsh permite una personalización profunda y flexible de la interfaz de usuario. Los usuarios pueden elegir entre una amplia gama de temas predefinidos o crear sus propios diseños para adaptar la apariencia de la línea de comandos a sus preferencias individuales.
-
Potentes Extensiones y Plugins: La comunidad de Zsh ofrece una gran cantidad de extensiones y plugins que amplían aún más su funcionalidad. Desde la integración con herramientas de desarrollo hasta la gestión avanzada de historiales de comandos, estas extensiones permiten a los usuarios personalizar su entorno de trabajo de acuerdo con sus necesidades específicas.
-
Historial Mejorado: Zsh proporciona un historial de comandos mejorado que facilita la búsqueda, edición y ejecución de comandos anteriores. Esta característica resulta especialmente útil para usuarios que trabajan con una gran cantidad de comandos en su día a día.
Instalación
Linux (Ubuntu)
En sistemas Linux basados en Debian, como Ubuntu, la instalación de Zsh es sencilla. Puedes comprobar si ya está instalado y en su defecto instalar Zsh:
⚡ luis@luix:~ $ sudo dpkg -l zsh
:
⚡ luis@luix:~ $ apt install zsh
Compruebo que es una shell válida:
⚡ luis@luix:~ $ grep zsh /etc/shells`
/bin/zsh
/usr/bin/zsh
Cambio a Zsh, para luis
y root
con chsh -s $(which zsh)
⚡ luis@luix:~ $ sudo chsh $USER -s $(which zsh)
Contraseña:
⚡ luis@luix:~ $
⚡ luis@luix:~ $ sudo su -
Contraseña:
root@luix:~# chsh -s $(which zsh)
root@luix:~#
Salgo de la sesión gráfica (a veces hago un reboot completo) y vuelvo a entrar en ambos usuarios y verifico que se ejecuta zsh.
⚡ luis@luix:~ $ ps
PID TTY TIME CMD
48727 pts/0 00:00:00 zsh <=== !!
48736 pts/0 00:00:00 ps
Si no tienes el fichero .zshrc
probalemente se ejecutará zsh-newuser-install
y te ofrecerá crearlo. En mi caso seleccioné la opción (2) Populate your ~/.zshrc with the configuration recommended.
Por si te es útil, he dejado varios ficheros en este repositorio zsh-zshrc en GitHub:
- ~/.zshrc. Mi fichero de configuración de
zsh
- ~/.tmux.conf. Mi fichero de configuración de
tmux
. Lo uso en combinación conzsh
, echa un ojo a “Terminales con tmux”. Lo acompaña un script que he llamado t y que ejecutatmux
. - ~/.zshrc.async. En el repositorio verás este archivo. Es una copia de un script (zsh) hecho por Mathias Fredriksson que permite ejecutar jobs asíncronos. Descargo mi propia copia desde mi
.zshrc
la primera vez. - ~/.luispa.omp.json: Tema para Oh My Posh, descrito más adelante.
Extra: starship
startship.rs se anuncia como “un Prompt para cualquier Shell, mínimo, super-rápido, y altamente personalizable”. Aprovecha símbolos y caracteres especiales que no están presentes en las fuentes predeterminadas, así que tenemos que instalar una Nerd Font.
- Desde el repo de Nerd Fonts >
Downloads
. Busco y descargoFira Code
(puede ser cualquiera).
sudo apt install fontconfig unzip
mkdir -p ~/.fonts
cd .fonts
curl -LJs -o FiraCode.zip https://github.com/ryanoasis/nerd-fonts/releases/download/v3.2.1/FiraCode.zip
unzip FiraCode.zip && rm FiraCode.zip
fc-cache -fv
- Lo configuro como fuente por defecto en Gnome Console “PDTE”
- Instalo la última versión con:
curl -sS https://starship.rs/install.sh | sh
- Configuro mi
.zshrc
(sección anterior)
macOS
Los usuarios de macOS ya tienen Zsh instalado por defecto, lo que significa que pueden empezar a utilizarlo de inmediato sin necesidad de instalación adicional. Pueden abrir Terminal y comenzar a experimentar con las características y funcionalidades de Zsh.
Extra: starship en MacOS
startship.rs se anuncia como “un Prompt para cualquier Shell, mínimo, super-rápido, y altamente personalizable”. Aprovecha símbolos y caracteres especiales que no están presentes en las fuentes predeterminadas, así que tenemos que una Nerd Font.
- Desde el repo de Nerd Fonts >
Downloads
. Busco y descargoFira Code
(puede ser cualquiera). Unzip del fichero, selecciono todos los.ttf
> botón derecho >Abrir
> Instalar todos. - Lo configuro como fuente por defecto en iTerm: Settings -> Profiles -> Default -> Text -> Font
FiraCode Nerd Font
- Instalo la última versión con:
brew update && brew upgrade && brew install starship
- Configuro mi
.zshrc
Windows 11
Para los usuarios de Windows 11 que deseen utilizar Zsh, te recomiendo instalar el Subsistema de Windows para Linux (WSL2) y una distribución de Linux compatible.
La shell que viene por defecto en Ubuntu para WSL2 es bash pero la puedes cambiar exactamente igual que como lo haces en Linux y tambien te puedes instalar “tmux”, hablo sobre ello en este artículo sobre Windows para desarrollo.
Extra: Nerd Fonts
- Desde el repo de Nerd Fonts >
Downloads
. Busco y descargoFira Code
(puede ser cualquiera). Unzip del fichero, selecciono todos los.ttf
> botón derecho >Abrir
> Instalar todos. - Lo configuro como fuente por defecto en iTerm: Settings -> Profiles -> Default -> Text -> Font
FiraCode Nerd Font
- Instalo la última versión con:
brew update && brew upgrade && brew install starship
- Configuro mi
.zshrc
Extra: Oh My Posh
Oh My Posh se anuncia como “un motor de Prompts para cualquier Shell”. Permite renderizar el PROMPT de forma muy avanzada, pero lo que más me gusta es cómo gestiona GIT. El mayor problema de trabajar en un repositorio Git es al renderizar el PROMPT. De todos los renderizadores avanzados que he probado (incluido Starship), ninguno es capaz de hacerlo tan rápido como Oh My Posh. Solo por este motivo se ha convertido en mi elección, por encima de Starship.
Instalo Oh My Posh siguiendo su guía.
- En linux (incluido WSL2), los temas quedan instalados en
$HOME/.cache/oh-my-posh/themes
, aunque yo uso mi tema modificado ~/.luispa.omp.json que copio directamente a mi$HOME
. Un ejemplo de instalación en~/bin
.
sudo apt install unzip
mkdir ~/bin
curl -s https://ohmyposh.dev/install.sh | bash -s -- -d ~/bin
curl -LJs -o ~/.luispa.omp.json https://raw.githubusercontent.com/LuisPalacios/zsh-zshrc/main/.luispa.omp.json
PATH=$PATH:/home/luis/bin
Instalo una fuente: oh-my-posh font install
(elijo Melo). Oh My Posh está diseñado para usar Nerd Fonts. Nerd Fonts are popular fonts that are patched to include icons. To see the icons displayed in Oh My Posh, install a Nerd Font, and configure your terminal to use it. Añado lo siguiente a mi ~/.zshrc: eval "$(oh-my-posh init zsh --config ~/.luispa.omp.json)"
- En MacOS:
brew install jandedobbeleer/oh-my-posh/oh-my-posh
- En linux (incluido WSL2), los temas quedan instalados en
$HOME/.cache/oh-my-posh/themes
, aunque yo uso mi tema modificado ~/.luispa.omp.json que copio directamente a mi$HOME
. Un ejemplo de instalación en~/bin
.
Referencias
Cheatsheet
En la recomendadísima Ultimate Resource List encontrarás una estupenda Cheatsheet. Resalto las entradas relacionadas con zsh
:
- Shells
- ✅ Zsh - es un shell diseñado para uso interactivo, aunque también es un poderoso lenguaje de scripting.
- ✅ Oh My ZSH! - es el mejor marco de trabajo para gestionar tu configuración de Zsh. Echa un ojo a su sitio, oh-my-zsh viene con miles de funciones útiles, ayudantes, plugins, temas. Trae varios plugins que hacen la vida más fácil. Lo mejor de Oh My Zsh son sus temas.
- Plugins para shell
- ✅ zsh-autosuggestions - Autosugestiones al estilo de Fish para Zsh.
- ✅ zsh-syntax-highlighting - Resaltado de sintaxis al estilo del shell Fish para Zsh.
- ✅ Awesome ZSH Plugins - Una lista de marcos de trabajo, plugins, temas y tutoriales para ZSH.
- Gestores
- ✅ tmux - es un multiplexor de terminales, permite cambiar fácilmente entre varios programas en un mismo terminal.
Al hacer la transición de Bash a Zsh, no solo estás adoptando una herramienta más poderosa y versátil, sino que también estás abriendo las puertas a una experiencia en la línea de comandos más eficiente y adaptable. Con sus características avanzadas y su activa comunidad de desarrolladores, Zsh se posiciona como la opción ideal para usuarios que buscan maximizar su productividad y control en entornos estilo unix.