Zsh y OhMyZsh

Configuración de Zsh y OhMyZsh en Ubuntu, además, implementación de plugins y personalización del prompt con el tema powerlevel10k.

📋Tabla de contenido

🌅Introducción

Instalación y configuración de Zsh, OhMyZsh y personalización del prompt.

🌍Enlaces de interés

📌Instalación de Zsh

Zsh es un shell de línea de comandos para sistemas Unix que extiende las funcionalidades del Bourne Shell (sh) con características avanzadas como autocompletado inteligente, corrección de errores de tipeo, soporte para plugins y temas, y una gran personalización.

Desde la terminal de Ubuntu:

Actualiza los paquetes del sistema

sudo apt update && sudo apt upgrade -y

Instala Zsh

sudo apt install zsh -y

Verifica la instalación de Zsh

zsh --version

Actualiza el shell por defecto

chsh -s $(which zsh)

Cierra el terminal y vuelve a abrir Ubuntu (Deberia abrir zsh por defecto)

📌Instalación de plugins (zsh-autosuggestions)

El plugin zsh-autosuggestions es una extensión para el shell Zsh que sugiere comandos automáticamente mientras escribes, basándose en tu historial de comandos. Cuando sugiere un comando basta con pulsar la tecla de dirección derecha (➡️) para realizar el autocompletado.

Instala el plugins

git clone https://github.com/zsh-users/zsh-autosuggestions.git $ZSH_CUSTOM/plugins/zsh-autosuggestions

Abre la configuración de Zsh

nano ~/.zshrc

Actualiza la configuración de Zsh para admitir el plugin

# Busca esta línea: 
plugins=(git)
# Agrega el plugin a la lista
plugins=(git zsh-autosuggestions)

Aplica los cambios

source ~/.zshrc

📌Instalación de OhMyZsh y el tema Powerlevel10k

OhMyZsh es una colección de configuraciones, temas y complementos para Zsh que mejora la experiencia en la línea de comandos, haciéndola más productiva, personalizable y atractiva visualmente.

Instala OhMyZsh

sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

Instala un tema (Powerlevel10k)

Más temas para OhMyZsh

git clone --depth=1 https://github.com/romkatv/powerlevel10k.git \
  ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k

Edita el tema por defecto de OhMyZsh, abre el fichero de configuración de Zsh

nano ~/.zshrc

Modifica la siguiente línea

# esto:
ZSH_THEME="robbyrussell"
# por esto:
ZSH_THEME="powerlevel10k/powerlevel10k"

Aplica los cambios

source ~/.zshrc

Configura el tema a tu gusto.

📌Personalización del prompt

Para personalizar el prompt puede ser interesante consultar los códigos de colores disponibles y emojis.

Para hacer un campo personalizado para el prompt se definen funciones cuyo nombre debe comenzar por prompt_*, en este ejemplo, definiremos funciones para mostrar el nombre de usuario con el del host y el directorio actual, ambos con emojis.

Abre el fichero de configuración del tema (Powerlevel10k)

nano ~/.p10k.zsh

Inserta al final el siguiente contenido

# ╭────────────────────────────────────────────────────────────╮
# │ Custom segment: 🤖 user@host                               │
# ╰────────────────────────────────────────────────────────────╯
function prompt_my_userhost() {
  local user=$USER
  local host=$(hostname)
  local icon="🤖" 
  p10k segment -f 178 -t "$icon $user@$host" 
  }
# ╭────────────────────────────────────────────────────────────╮
# │ Custom segment: 📂 dir_name                                │
# ╰────────────────────────────────────────────────────────────╯
function prompt_my_dir() {
  local dir_name="${PWD##*/}"
  p10k segment -f 39 -t "📂 $dir_name"
}

Busca la siguiente directiva dentro de la configuración del tema y agrega los campos personalizados

typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENT
(
  # os_icon               # os identifier                            
  my_userhost             # user@host                  
  my_dir                  # custom current directory             
  # dir                     # current directory                         
  vcs                     # git status                                            
  prompt_char             # prompt symbol                                  
)  

Puedes personalizar la sección del control de versiones, por ejemplo, agregar un emoji (🌿) junto al nombre de la rama

typeset -g POWERLEVEL9K_VCS_BRANCH_ICON='🌿 '

También puedes cambiar el icono y el color del prompt de shell

typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIINS_CONTENT_EXPANSION='$'
# Para cambiar los colores busca las directivas que correspondan al siguiente patrón
typeset -g POWERLEVEL9K_PROMPT_CHAR_*

Guarda el fichero y aplica los cambios

source ~/.p10k.zsh

📌Cambiar la terminal por defecto en vscode

Ctrl + Shift + P
Terminal: Select Default Profile

📌Alias de OhMyZsh

OhMyZsh proporciona una lista amplia de alias, mayormente para trabajar con git o para trabajar con directorios, consulta la lista completa una vez instalado con alias y para consultar directamente que hace un alias which $ALIAS

Estos son algunos ejemplos:

# Alias para el sistema
_='sudo '
1='cd -1'
2='cd -2'
...
9='cd -9'
l='ls -lah'
la='ls -lAh'
ll='ls -lh'
ls='ls --color=tty'
lsa='ls -lah'
md='mkdir -p'
rd=rmdir
# Alias para git
g=git
ga='git add'
gb='git branch'
gbD='git branch --delete --force'
gcf='git config --list'
gcmsg='git commit --message'
gd='git diff'
gf='git fetch'
ggpush='git push origin "$(git_current_branch)"'
glo='git log --oneline --decorate'
glog='git log --oneline --decorate --graph'
gp='git push'
grhh='git reset --hard'
grm='git rm'
gst='git status'

📌Actualizar Zsh y OhMyZsh

# Actualizar Zsh
sudo apt update && sudo apt upgrade zsh
# Actualizar OhMyZsh
omz update

📌Desinstalar Zsh

# Desinstalar Zsh
sudo apt --purge remove zsh
# Configurar por defecto la shell bash de Ubuntu
chsh -s `which bash`