zsh-shell/README.md
Manuel Vergara 7c28885894 Incluyo el emulador Tilix
Signed-off-by: Manuel Vergara <manuel@vergaracarmona.es>
2022-11-17 17:21:15 +01:00

326 lines
14 KiB
Markdown

Configuración personal de la shell
===
**Índice de contenidos:**
- [Configuración personal de la shell](#configuración-personal-de-la-shell)
- [Descripción](#descripción)
- [Terminal](#terminal)
- [Terminator](#terminator)
- [Tilix](#tilix)
- [zsh](#zsh)
- [Oh my zsh!](#oh-my-zsh)
- [Theme](#theme)
- [Plugins](#plugins)
- [Conclusiones](#conclusiones)
- [Agradecimientos 🎁](#agradecimientos-)
# Descripción
En este repo explicaré el terminal, la shell y las configuraciones que uso en el día a día. Intentaré tenerlo siempre actualizado.
Las opciones barajadas han sido:
- **Opciones UI:**
- Terminator
- gnome terminal
- Yakuake
- **Opciones shell:**
- zsh
- fish
- bash
También puedes ojear el tutorial "[Zsh: Configuración, personalización y algo más](https://vergaracarmona.es/zsh/)".
# Terminal
Podemos instalar la que más nos guste, hay varias opciones como:
- [Terminator](https://gnome-terminator.org/)
- [gnome terminal](https://help.gnome.org/users/gnome-terminal/stable/)
- [Yakuake](https://apps.kde.org/yakuake/)
- [Tilda](https://github.com/lanoxx/tilda)
- [Terminus](https://github.com/inteI-cloud/terminus)
- [Tilix](https://gnunn1.github.io/tilix-web/)
He estado años con gnome terminal y realmente es muy estable. Pase a Terminator por lo altamente configurable que es. Ahora estoy un poco más minimalista con Tilix. Mañana la shell dirá.
<div id="predeterminar">
Si tienes varias terminales instaladas, puedes escoger la que quieres tener por defecto en Debian/Ubuntu con el siguiente comando:
```shell
sudo update-alternatives --config x-terminal-emulator
```
Esto nos muestrará un listado con las aplicaciones de terminal que existen en nuestro sistema. La terminal que tengamos por defecto estará marcada con un asterisco. Ahora, para cambiar a la terminal que queremos debemos introducir el número del listado que corresponde con esa terminal y pulsar la intro.
</div>
## Terminator
[`Terminator`](https://github.com/gnome-terminator/terminator) es un emulador de terminal, proyecto de gnome, que proporciona funcionalidades como dividir horizontalmente o verticalmente, se puede dar un título personalizado a cada terminal, estructura multigrid, ahorro de diseños, etc.
En la barra de título hay un botón que abre el menú de agrupación desde donde se puede controlar múltiples terminales simultáneamente. Esto significa que se escribirán al mismo tiempo. Es útil si quieres mandar un comando de actualización de la ventana, un `clear` o simplemente cerrarlas. Con la agrupación se activará el *broadcast group*, se puede desactivar (Broadcast off) o agrupar a todos los terminal aunque no sean del mismo grupo(Broadcast all).
El emulador `Terminator` lo suelen tener los repositorios de paquetes de las distros más conocidas. Por ejemplo, instalación en Ubuntu:
```
sudo apt install terminator
```
Archivo de configuración en `${HOME}/.config/terminator/config`.
Si quieres hacer predeterminado este terminal usa este [comando](#predeterminar).
**Shortcuts que me resultan interesantes:**
Descripción | Atajo
---|:---:
Abrir terminal | Ctrl+mayús+T
Mover al terminal inferior | Alt+Abajo
Mover al terminal superior | Alt+Arriba
Mover al terminal derecha | Alt+Derecha
Mover al terminal izquierda | Alt+Izquierda
Mover al siguiente terminal | Ctrl+tabulador
Mover al anterior terminal | Maj+Ctrl+tabulador
Rotar ventanas | Super+R
Rotar ventanas a la inversa| Maj+Super+R
Dividir horizontal | Maj+Ctrl+O
Dividir vertical | Maj+Ctrl+E
Cerrar terminal | Maj+Ctrl+W
Cerrar ventana | Maj+Ctrl+Q
Copiar | Maj+Ctrl+C
Pegar | Maj+Ctrl+V
Buscar | Maj+Ctrl+F
Zoom | Maj+Ctrl+Z
Ampliar fuente | Ctrl++
Disminuir fuente | Ctrl+-
Editar título tab | Ctrl+Alt+A
Editar título terminal | Ctrl+Alt+X
Editar título ventana | Ctrl+Alt+W
## Tilix
[Tilix](https://github.com/gnunn1/tilix) es un emulador de terminal Linux avanzado de código abierto que utiliza GTK+ 3 y ofrece muchas funciones que no forman parte del terminal predeterminado que se incluye con las distribuciones de Linux.
Algunas de las características populares de tilix incluyen:
- Pantalla dividida horizontal y vertical.
- Sincronización de entrada entre múltiples terminales.
- Admite marcadores.
- Exportar sesión de terminal a un archivo.
- Barra de título personalizable.
- Buscar a través de la terminal.
Su instalación en Ubuntu a través de apt es tan simple como esto:
```shell
sudo apt install tilix
```
Si quieres hacer predeterminado este terminal usa este [comando](#predeterminar).
**Shortcuts que me resultan interesantes:**
Descripción | Atajo
---|:---:
Abrir nueva ventana | Ctrl+mayús+N
Abrir nueva sesión | Ctrl+mayús+T
Agregar una terminal automática | Ctrl+Alt+A
Agregar una terminal abajo | Ctrl+Alt+D
Agregar una terminal a la derecha | Ctrl+Alt+R
Cerrar sesión actual | Ctrl+Alt+Q
Pantalla completa | F11
Mostrar barra lateral de la sesión | F12
Cambiar a la sesión siguiente | Ctrl+Av Pag
Cambiar a la sesión anterior | Ctrl+Re Pag
Reordenar a la sesión siguiente | Maj+Ctrl+Av Pag
Reordenar a la sesión anterior | Maj+Ctrl+Re Pag
Cambiar a la sesión 1 | Ctrl+Alt+1
Cambiar a la sesión 2 | Ctrl+Alt+2
Cambiar a la sesión 3 | Ctrl+Alt+3
Cambiar a la sesión 4 | Ctrl+Alt+4
Cambiar a la sesión 5 | Ctrl+Alt+5
Cambiar a la sesión 6 | Ctrl+Alt+6
Cambiar a la sesión 7 | Ctrl+Alt+7
Cambiar a la sesión 8 | Ctrl+Alt+8
Cambiar a la sesión 9 | Ctrl+Alt+9
Cambiar a la sesión 10 | Ctrl+Alt+0
Ampliar fuente | Ctrl++
Disminuir fuente | Ctrl+-
Ampliar fuente | Ctrl++
Medida normal | Ctrl+0
# zsh
[`ZSH`](https://www.zsh.org/) son las siglas de Z Shell, que es un programa de shell para sistemas operativos similares a Unix. ZSH es una versión extendida de Bourne Shell que incorpora algunas características de BASH, KSH, TSH, etc.
Alguna de sus funciones son:
- **Completar la línea de comandos programable** que puede ayudar al usuario a escribir tanto las opciones como los argumentos de la mayoría de los comandos utilizados, con soporte inmediato para varios cientos de comandos.
- **Compartir el historial** entre todos los shells en funcionamiento.
- El **globbing de archivos extendido** permite la especificación de archivos sin necesidad de ejecutar un programa externo como `find`.
- **Mejora del manejo de variables y arrays**
- **Edición de comandos multilínea** en una sola memoria intermedia
- **Corrección ortográfica y relleno automático** de los nombres de los comandos (y opcionalmente de los argumentos, que se asumen como nombres de archivo)
- **Varios modos de compatibilidad**, por ejemplo Zsh puede fingir ser una Bourne Shell cuando se ejecuta como `/bin/sh`
- Los **avisos temáticos**, incluyendo la capacidad de poner la información del aviso en el lado derecho de la pantalla y hacer que se oculte automáticamente cuando se teclea un comando largo
- **Módulos cargables**, que proporcionan entre otras cosas:
- Controles completos TCP y sockets de dominio Unix
- Un cliente FTP
- Funciones matemáticas ampliadas.
- El **comando `where` incorporado**. Funciona como el comando `which` pero muestra todas las ubicaciones en los directorios especificados en `$PATH` en lugar de sólo el que se utilizará.
- **Directorios nombrados.** Esto permite al usuario establecer atajos como `~mydir`, que luego se comportan de la manera `~` y `~user`.
Su instalación en Ubuntu es muy sencilla, ya está incluído en los repositorios oficiales:
```shell
sudo apt update
sudo apt install zsh
```
Podemos comprobar su versión:
```shell
zsh --version
```
Podemos ver la shell predeterminada imprimiendo la variable en pantalla:
```shell
echo $SHELL
```
Para establecer zsh como la shell predeterminada podemos usar `chsh`:
```shell
chsh -s $(which zsh)
```
o
```shell
chsh -s /usr/bin/zsh
```
Y ahora, para usar zsh predeterminado debemos lanzar de nuevo la terminal. Podemos cerrar y volver a abrir o utilizar el comando:
```shell
exec zsh
```
Cuando se inicie ZSH por primera vez, aparecerán algunas opciones para configurar. Por ejemplo:
a) Seleccione la opción “1”en la primera página que nos llevará al menú principal.
![](https://hazlolinux.com/wp-content/uploads/2021/08/1627178652_124_How-to-Install-and-Setup-Zsh-in-Ubuntu-2004.png)
b) El menú principal mostrará algunas opciones recomendadas para configurar.
![](https://hazlolinux.com/wp-content/uploads/2021/08/1627178652_946_How-to-Install-and-Setup-Zsh-in-Ubuntu-2004.png)
También podemos configurar directamente en el fichero `${HOME}/.zshrc`. Por ejemplo, el mío es este: [zshrc](files/zshrc).
En el caso que se quiera volver a `bash`, tan solo debemos cambiar la shell predeterminada con el comando:
```shell
chsh -s $(which bash)
```
o
```shell
chsh -s /usr/bin/bash
```
O directamente desinstalar zsh 😢
```shell
sudo apt --purge remove zsh
chsh -s $(which "SHELL NAME")
```
# Oh my zsh!
[`Oh My Zsh`](https://github.com/ohmyzsh/ohmyzsh) es un framework de código abierto, impulsado por la comunidad para la gestión de su configuración de zsh. Las características principales son:
- El directorio de **plugins** que puedes ver en su [repositorio Git](https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins) y en la [wiki](https://github.com/ohmyzsh/ohmyzsh/wiki/Plugins).
- El directorio de **themes** con más de ciento cincuenta incluidos. La mayoría de ellos tienen [capturas de pantalla](https://github.com/ohmyzsh/ohmyzsh/wiki/Themes) en el wiki (¡Estamos trabajando en la actualización de esto!).
Para instalar `Oh My Zsh` se puede ejecutar con uno de los siguientes comandos.
Método | Comando
:---:|:---
**curl** | `sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"`
**wget** | `sh -c "$(wget -O- https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"`
**fetch** | `sh -c "$(fetch -o - https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"`
Una vez instalado se puede ver toda la configuración en el árbol de directorios del directorio `${HOME}/.oh-my-zsh/`.
```shell
.oh-my-zsh/
├── cache
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── custom
├── lib
├── LICENSE.txt
├── log
├── oh-my-zsh.sh
├── plugins
├── README.md
├── SECURITY.md
├── templates
├── themes
└── tools
```
## Theme
El tema que he escogido es [`powerlevel10k/powerlevel10k`](https://github.com/romkatv/powerlevel10k) ❤️
![](https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/prompt-styles-high-contrast.png)
Hace hincapié en la velocidad, la flexibilidad y la experiencia out-of-the-box. Es un tema muy llamativo para las terminales.
Para instalarlo empezamos descargando con git y ubicándolo en su sitio:
```shell
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ~/.oh-my-zsh/custom/themes/powerlevel10k
echo 'source ~/.oh-my-zsh/custom/themes/powerlevel10k/powerlevel10k.zsh-theme' >>~/.zshrc
```
En el archivo de configuración de zsh `.zshrc` tendremos que buscar la línea del tema, suele ser `ZSH_THEME="robbyrussell"`, y reemplazarlo por `ZSH_THEME="powerlevel10k/powerlevel10k"`.
Reiniciamos la terminal y nos aparecerá un asistente de configuración del tema powerlevel10k. También podemos acudir a este wizard con el comando:
```shell
p10k configure
```
Cualquier duda sobre la instalación y configuración del tema, la [documentación oficial](https://github.com/ohmyzsh/ohmyzsh/wiki/Installing-ZSH) es muy completa.
## Plugins
Los plugins que utilizo son los siguientes:
- [ansible](https://github.com/ohmyzsh/ohmyzsh/blob/master/plugins/ansible)
- [dirhistory](https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/dirhistory)
- [docker](https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/docker)
- [docker-compose](https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/docker-compose)
- [emoji](https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/emoji)
- [encode64](https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/encode64)
- [git](https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/git)
- [helm](https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/helm)
- [history](https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/history)
- [history-substring-search](https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/history-substring-search)
- [jsontools](https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/jsontools)
- [jump](https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/jump)
- [kubectl](https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/kubectl)
- [nmap](https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/nmap)
- [sudo](https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/sudo)
- [terraform](https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/terraform)
- [zsh-autosuggestions](https://github.com/zsh-users/zsh-autosuggestions)
- [zsh-syntax-highlighting](https://github.com/zsh-users/zsh-syntax-highlighting)
- [z](https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/z)
La mayoría son de `Oh my zsh` y la instalación es simple: Después de instalar Omz tan solo hay que incluirlos en los plugins del documento `.zshrc`.
De todas formas, para sacar el máximo jugo, es interesante leer el README de cada uno de ellos.
# Conclusiones
He empezado con este nuevo ambiente de trabajo a finales de octubre de 2022, el tiempo dirá si tengo los componentes más adecuados, pero desde luego tengo que destacar varios aspectos:
- La comunidades que respaldan cada unos de los elementos mencionados.
- El minimalismo, la elegancia y las posibilidades de gestión de terminales del emulador Tilix.
- Las posibilidades de gestión del shell con el documento de configuración.
- La amplia personalización con los themes de Oh my zsh!. De los colores, de las fuentes, de los tamaños, de las ubicaciones, etc
- El amplio abanico de shortcuts personalizados de la terminal y de los plugins omz.
# Agradecimientos 🎁
A todos los que me habéis comentado como tenéis vuestra configuración: Miki, Sergio, Ruben, Javi, Alex, Victor, etc
[Manu](https://vergaracarmona.es)