ZSH, tu shell DevOps en Ubuntu y Windows Subsystem for Linux
Tags: bash, ubuntu, spanish, devops
Published: 2023-05-18 05:58:08

<sup>*Basado en este articulo: <a href="https://drasite.com/blog/Pimp%20my%20terminal">Fuente DRA</a>.*</sup>

---
## Introducción
El **software libre** hace tiempo que se ha convertido en **la mejor opción** para crear servicios y aplicaciones.

Este es el motivo por el cual muchos utilizamos la **consola de Linux**.

Si además tienes el perfil **DevOps**, usarás tanto herramientas de **desarrollador**: `git`, `npm`, `pip`, etc. como otras más propias de **sysadmin**: `docker`, `kubectl`, `systemctl`, `ssh`, etc.

### Las CLI más habituales
<sup>*__NOTA:__ No pretendo que esta sea una lista cerrada que cubra todos los casos pero son algunas de las más habituales hoy en día.*</sup>

* `git`: control de versiones.
* `npm`: gestor de paquetes **Node.js**.
* `yarn`: gestor de paquetes **Node.js** alternativo muy popular.
* `nvm`: gestor de entornos virtuales de **Node.js**.
* `pip`: gestor de paquetes de **Python**.
* `docker`: gestor de **contenedores** e imágenes.
* `docker-compose`: gestor de **manifiestos** de **Docker**.
* `kubectl`: consola de **Kubernetes**.
* `helm`: gestor de despliegue de aplicaciones de **Kubernetes**.

## ZSH, tu asistente personal
Manejar todo esto es complejo y aquí es donde entra **zsh**, un shell personalizable con infinidad de plugins.

Esta es una receta que **se puede adaptar fácilmente a las necesidades de cada uno** y al final del post encontrarás los links para que puedas explorar esta posibilidad.

### Ayudas visuales
* **Carpeta actual** y **estado del repositorio git**:
![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1hb1ezmm1qwf2wb5hzmc.png)

* **Tiempo y estado de ejecución** del comando anterior:
![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/82kfot00gzbd3srrelua.png)
* **Colores** que mejoran la legibilidad:
![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wkssh0xy94qpp60wpzrr.png)
![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jcq4guxgs38kg7qoiddo.png)
![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dp0ocz9sk9icbdq9almq.png)

### Otras ayudas
* **Autocompletado** de comandos:
![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qlxhe76hldvspfb9a3fl.png)

* Copiar **contenido de un fichero al portapapeles**:
![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xepmgei6abc59mpmhzu4.png)
 
* **Comandos recursivos** utilizando el doble operador `**`:
![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c241v47xnj1jhahtxb2z.png)

* **Búsqueda dentro del historial de comandos** introduciendo los primeros caracteres y usando los cursores `↑` `↓` `→`
![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ko65fbylb9sbyi9f6317.png) 
 
## Instalación

Lo primero que haremos es instalar en el sistema la fuente **Nerd Font FiraCode** por ser compatible con **vscode**, [related issue](https://github.com/ryanoasis/nerd-fonts/issues/332):

```shell
git clone --depth 1 https://github.com/ryanoasis/nerd-fonts.git /tmp/nerd-fonts
```

{% details **sólo para Windows:** *Pincha para ver.* %}

Seguimos con la instalación de la fuente, abre la consola **Powershell como administrador** e introduce estos comandos:

```powershell
# excluir la seguridad de WSL Ubuntu
wsl -l -v
powershell -ExecutionPolicy Bypass -File .\excludeWSL.ps1
powershell -ExecutionPolicy Bypass -File \tmp\nerd-fonts\install.ps1 FiraCode
Set-ExecutionPolicy Default
Remove-Item -Recurse -Force -Path \tmp\nerd-fonts\
```

Ahora instala el **soporte para las notificaciones**:

```powershell
Install-Module -Name BurntToast
```

{% enddetails %}

{% details **sólo para Linux:** *Pincha para ver.* %}

Seguimos con la instalación de la fuente, abre la consola e introduce este comando:

```shell
/tmp/nerd-fonts/install.sh FiraCode
```

Ahora instala el **soporte para copiar al portapapeles** desde el cli:

```shell
sudo apt install --no-install-recommends xclip
```

Y continuamos con el terminal **kitty**:

```shell
sudo apt install kitty
```

Ábrelo y pulsa `ctrl+shift+f2` para **generar el fichero de configuración** y por último **cambia el tema de color** con este comando:

```shell
bash -c "$(wget -qO- https://raw.githubusercontent.com/Mayccoll/Gogh/master/themes/symphonic.sh)" 
```

{% enddetails %}

Instalar dependencias
```shell
sudo apt update
sudo apt upgrade
sudo apt install python-is-python3
sudo apt install python3-pip
sudo apt install powerline
sudo apt install zsh
sudo apt install zplug
sudo apt install fzf
sudo apt install imagemagick
sudo apt install grc
sudo apt install bat
sudo snap install lsd
sudo -H pip3 install Pygments
[ `echo $0` != `which zsh` ] && chsh -s `which zsh`
```

### notify-send
https://codelearn.me/2019/01/13/wsl-windows-toast.html

Mi repo dotfiles:
{% github uxtechie/dotfiles no-readme %}

## Recursos de personalización
Aquí encontrarás información para personalizar tu shell.

[Más fuentes **Nerd Fonts**](https://www.nerdfonts.com/font-downloads)

[Iconos de la fuente Nerd Font](https://www.nerdfonts.com/cheat-sheet)

[Terminal **kitty**](https://sw.kovidgoyal.net/kitty/conf/)

[Temas de color para el terminal](https://mayccoll.github.io/Gogh/)

[Añade color a comandos genéricos con **grc**](https://github.com/garabik/grc)

[Sustituto de `ls` **lsd**](https://github.com/Peltoche/lsd)

[Sustituto de `cat` **bat**](https://github.com/sharkdp/bat)

[Sustituto de `top` **Bpytop**](https://github.com/aristocratos/bpytop), para cambiar el tema de color pulsa `shift+m` y elige *flat-remix*.