logo
Secciones

Entradas del blog


Instalar ZSH | Fedora 43

28

Imagen 1

Introducción

En este tutorial veremos cómo instalar y configurar ZSH en Fedora 43, utilizando Oh My Zsh, el tema Powerlevel10k y algunos plugins que mejoran el autocompletado, el resaltado de sintaxis, el historial y la experiencia general al utilizar la terminal.

La guía parte de una instalación limpia y utiliza los repositorios y métodos de instalación actuales. También se incluyen los paquetes previos, las tipografías recomendadas para Powerlevel10k y una configuración base de ~/.zshrc.

¿Qué es ZSH?

Z shell, o simplemente ZSH, es un intérprete de comandos para sistemas operativos tipo Unix, como GNU/Linux y BSD. Está diseñado tanto para uso interactivo como para scripting y contiene características avanzadas de autocompletado, historial, expansión de comandos y personalización.

ZSH incorpora características presentes en otras shells como Bash, Ksh y Tcsh, además de funciones propias. Una de sus mayores ventajas es la facilidad con la que puede extenderse mediante frameworks, temas y plugins.

¿Qué es Oh My Zsh?

Oh My Zsh es un framework de código abierto para administrar la configuración de ZSH. Incluye una gran cantidad de plugins, funciones, aliases y temas que permiten ampliar las capacidades de la shell sin tener que configurar todo manualmente.

¿Qué es Powerlevel10k?

Powerlevel10k es un tema para ZSH enfocado en velocidad, flexibilidad y personalización. Puede mostrar información como el directorio actual, estado de Git, códigos de salida, versiones de lenguajes y otros datos directamente en el prompt.

Advertencia: Powerlevel10k continúa funcionando y puede instalarse actualmente, pero el proyecto tiene soporte muy limitado. Su autor indica que no hay nuevas características en desarrollo, la mayoría de errores no serán corregidos y las solicitudes de ayuda serán ignoradas. Esto no impide utilizarlo, pero es importante conocer el estado actual del proyecto antes de adoptarlo.

Imagen 2

Tema Powerlevel10k:

Imagen 3

Paquetes y dependencias previas

Antes de instalar Oh My Zsh y Powerlevel10k, instalaremos ZSH, Git, Curl y las herramientas necesarias para cambiar la shell del usuario.

sudo dnf install zsh git curl util-linux

Podemos comprobar la versión instalada de ZSH:

zsh --version

Instalar Oh My Zsh

Para instalar Oh My Zsh utilizaremos el instalador oficial:

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

Si el instalador no cambia automáticamente la shell predeterminada, podemos hacerlo manualmente con:

chsh -s "$(command -v zsh)"

Después de cambiar la shell, cerrar sesión y volver a iniciar para que el cambio se aplique completamente. También se puede comprobar la shell configurada con:

echo $SHELL

Instalar Powerlevel10k

Powerlevel10k se instala dentro del directorio de temas personalizados de Oh My Zsh. Utilizaremos el repositorio oficial:

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

En esta configuración cargaremos Powerlevel10k manualmente desde ~/.zshrc, por lo que dejaremos ZSH_THEME="" y añadiremos posteriormente la ruta del tema.

Instalar tipografías MesloLGS NF

Powerlevel10k puede funcionar con las fuentes del sistema, pero para disponer de todos los símbolos, iconos y estilos se recomienda utilizar MesloLGS NF, una Nerd Font preparada para Powerlevel10k.

El proyecto distribuye cuatro archivos TTF: Regular, Bold, Italic y Bold Italic. En Fedora podemos instalarlos para nuestro usuario dentro de ~/.local/share/fonts.

mkdir -p ~/.local/share/fonts

curl -fLo ~/.local/share/fonts/MesloLGS-NF-Regular.ttf \
"https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/MesloLGS%20NF%20Regular.ttf"

curl -fLo ~/.local/share/fonts/MesloLGS-NF-Bold.ttf \
"https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/MesloLGS%20NF%20Bold.ttf"

curl -fLo ~/.local/share/fonts/MesloLGS-NF-Italic.ttf \
"https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/MesloLGS%20NF%20Italic.ttf"

curl -fLo ~/.local/share/fonts/MesloLGS-NF-Bold-Italic.ttf \
"https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/MesloLGS%20NF%20Bold%20Italic.ttf"

fc-cache -fv

Después de instalar las fuentes, abrir las preferencias del emulador de terminal y seleccionar MesloLGS NF o MesloLGS NF Regular como tipografía del perfil. Dependiendo de la terminal utilizada, puede ser necesario cerrarla y volverla a abrir.

Imagen 4

Plugins recomendados

Oh My Zsh ya incluye una gran cantidad de plugins. En este tutorial utilizaremos varios de los que vienen incluidos y añadiremos dos plugins externos.

Plugins incluidos con Oh My Zsh

Los siguientes plugins forman parte de Oh My Zsh, por lo que no es necesario clonarlos o instalarlos individualmente:

git
sudo
systemd
docker
docker-compose
npm
node
laravel
z
extract
colored-man-pages
command-not-found

Algunos de estos plugins solo serán útiles si la herramienta correspondiente está instalada. Por ejemplo, los plugins de Docker, Node, NPM o Laravel no instalan Docker, Node, NPM ni Laravel; únicamente añaden funciones, aliases o autocompletado para esas herramientas.

Plugins externos

También utilizaremos zsh-autosuggestions y zsh-syntax-highlighting. Estos dos plugins no vienen incluidos con Oh My Zsh, por lo que deben instalarse antes de agregarlos al archivo ~/.zshrc.

zsh-autosuggestions muestra sugerencias de comandos a medida que escribimos, utilizando principalmente el historial de la shell.

git clone https://github.com/zsh-users/zsh-autosuggestions "${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/plugins/zsh-autosuggestions"

zsh-syntax-highlighting aplica resaltado de sintaxis mientras escribimos comandos, ayudando a distinguir comandos válidos, rutas, argumentos y errores antes de ejecutarlos.

git clone https://github.com/zsh-users/zsh-syntax-highlighting.git "${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting"

Importante: los plugins externos deben existir en ~/.oh-my-zsh/custom/plugins/ antes de agregarlos a plugins=(...). Si Oh My Zsh intenta cargar un plugin inexistente mostrará el mensaje plugin 'nombre' not found. Si Powerlevel10k tiene habilitado Instant Prompt, esa salida adicional durante el inicio también puede generar la advertencia Console output during zsh initialization detected.

Podemos comprobar que ambos directorios existen:

ls ~/.oh-my-zsh/custom/plugins

Configurar ~/.zshrc

A continuación se muestra una configuración base con Powerlevel10k, los plugins anteriores, historial ampliado y autocompletado. Podemos editar el archivo con el editor de nuestra preferencia:

nano ~/.zshrc

Contenido recomendado:

# Powerlevel10k instant prompt.
# Debe permanecer cerca del inicio de ~/.zshrc.
if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then
  source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
fi

export ZSH="$HOME/.oh-my-zsh"
export PATH="$HOME/.local/bin:$PATH"

# Powerlevel10k se carga manualmente más abajo.
ZSH_THEME=""

plugins=(
  git
  sudo
  systemd
  docker
  docker-compose
  npm
  node
  laravel
  z
  extract
  colored-man-pages
  zsh-autosuggestions
  command-not-found
  zsh-syntax-highlighting
)

source "$ZSH/oh-my-zsh.sh"

# Powerlevel10k
source "${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k/powerlevel10k.zsh-theme"

# Configuración generada por p10k configure.
[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh


# ============================================================
# Historial
# ============================================================

HISTFILE="$HOME/.zsh_history"
HISTSIZE=100000
SAVEHIST=100000

setopt APPEND_HISTORY
setopt SHARE_HISTORY
setopt HIST_IGNORE_ALL_DUPS
setopt HIST_FIND_NO_DUPS
setopt HIST_IGNORE_SPACE
setopt HIST_REDUCE_BLANKS
setopt HIST_VERIFY


# ============================================================
# Autocompletado
# ============================================================

zstyle ':completion:*' menu select
zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}'
zstyle ':completion:*' list-colors "${(s.:.)LS_COLORS}"


# ============================================================
# Alias opcionales
# ============================================================

alias actualizar="sudo dnf upgrade"
alias ll="ls -lah --color=auto"

alias gs="git status"
alias pull="git pull"

alias dps="docker ps"
alias dpa="docker ps -a"
alias ddf="docker system df"
alias dc="docker compose"

alias apagar="sudo shutdown -h now"

En esta configuración zsh-syntax-highlighting se deja al final de la lista de plugins. También dejamos ZSH_THEME="" porque Powerlevel10k se carga manualmente mediante source.

Si utilizamos herramientas adicionales podemos agregar aliases o configuraciones propias al final del archivo. Por ejemplo, para Laravel:

alias art="php artisan"

Después de guardar los cambios, reiniciamos ZSH:

exec zsh

Configuración del tema Powerlevel10k

Una vez instalada la tipografía y cargado Powerlevel10k, el asistente de configuración puede iniciar automáticamente al abrir una nueva terminal.

Imagen 5

A partir de aquí se deben leer las indicaciones del asistente y seleccionar los iconos, colores y estilo del prompt según nuestras preferencias.

Si el asistente no se inicia automáticamente, puede ejecutarse manualmente con:

p10k configure

El asistente genera el archivo ~/.p10k.zsh. Si posteriormente queremos cambiar el diseño, podemos ejecutar p10k configure nuevamente las veces que sea necesario.

Imagen 6

Al inicio, Powerlevel10k comprueba si determinados símbolos pueden visualizarse correctamente. Si los símbolos no se muestran como deberían, revisar que MesloLGS NF esté instalada y seleccionada en el perfil de la terminal.

Imagen 7

El asistente continuará preguntando sobre distintos símbolos y estilos. Responder según lo que se visualice en pantalla.

Imagen 8

Durante el proceso comenzaremos a ver una vista previa del prompt. Podemos elegir el estilo que resulte más cómodo para nuestro uso diario.

Imagen 9

Comprobar los plugins

Al escribir comandos utilizados anteriormente, zsh-autosuggestions mostrará sugerencias basadas en el historial. Por su parte, zsh-syntax-highlighting resaltará los comandos mientras se escriben.

También podemos probar el autocompletado de ZSH escribiendo un comando y presionando la tecla TAB, por ejemplo:

git TAB
docker TAB php artisan TAB

La palabra TAB representa la tecla Tabulador; no debe escribirse literalmente.

Comprobar el tiempo de inicio de ZSH

Oh My Zsh y los plugins añaden funciones al inicio de la shell. Podemos medir cuánto tarda en iniciar una sesión interactiva con:

time zsh -i -c exit

El tiempo dependerá del hardware, cantidad de plugins y configuraciones adicionales. Si la terminal tarda demasiado en iniciar, conviene revisar plugins o comandos que se ejecuten automáticamente dentro de ~/.zshrc.

Solución al aviso de Instant Prompt

Powerlevel10k puede mostrar el siguiente aviso:

[WARNING]: Console output during zsh initialization detected.

Este mensaje significa que algún comando está generando salida en pantalla durante la inicialización de ZSH después de cargar el Instant Prompt. Una causa común es agregar a plugins=(...) un plugin que todavía no está instalado.

Por ejemplo, si aparece:

[oh-my-zsh] plugin 'zsh-autosuggestions' not found [oh-my-zsh] plugin 'zsh-syntax-highlighting' not found

instalar primero los plugins correspondientes y reiniciar ZSH. No es recomendable ocultar la advertencia antes de corregir la causa real.

exec zsh

Actualizar los componentes

Oh My Zsh puede actualizarse mediante su mecanismo integrado. Powerlevel10k y los plugins externos instalados mediante Git pueden actualizarse ejecutando git pull dentro de sus respectivos directorios.

git -C "${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k" pull
git -C "${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/plugins/zsh-autosuggestions" pull
git -C "${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting" pull

Al finalizar, la terminal puede verse de la siguiente manera. El resultado exacto dependerá de las opciones seleccionadas durante p10k configure.

Imagen 10

Eso sería todo. Con esta configuración tendremos ZSH, Oh My Zsh, Powerlevel10k, autocompletado, sugerencias basadas en historial y resaltado de sintaxis funcionando en Fedora 43.

Fuentes:

https://github.com/ohmyzsh/ohmyzsh
https://github.com/romkatv/powerlevel10k
https://github.com/zsh-users/zsh-autosuggestions
https://github.com/zsh-users/zsh-syntax-highlighting

Comentarios:

Entradas del blog
Conoce la red social linuxClick
Redes sociales
Accesos directos