Personalización de terminal desde 0 en MacOS y Linux
Publicado el 30 de enero de 2026
¡Hola! En este artículo explicaré cómo personalizar una terminal de Linux y MacOS, al igual que mostrando algunas configuraciones ya hechas por el autor de este artículo (JesDev12U) Esta configuración funciona tanto para sistemas Linux como MacOS (Windows únicamente mediante WSL ya que PowerShell maneja otro tipo de archivos, los cuales no vamos a revisar en este artículo).
Este artículo estará enfocado en poner una terminal “tuneada” a mi manera, aunque también te puedes animar a buscar muchas más formas ya que la que encontrarás en este artículo no es la única manera.
En este artículo encontrarás:
- Instalar y configurar Kitty.
- Cambiar de Bash a ZSH.
- Instalar y configurar Starship.
- Instalar temas para Starship.
- Instalar plugins para ZSH.
- Instalar utilidades de terminal.
Resultado final
Así se verá tu terminal si sigues este artículo:

Kitty
Kitty es un emulador de shell muy famoso, destaca por su velocidad, renderizado gráfico y su gran capacidad de personalización. Hay demasiados emuladores de shell que también los puedes usar para personalizar tu terminal (Ghostty, xterm, Alacritty, etc.).
Es muy sencillo instalar Kitty, para ello se puede lograr mediante los siguientes pasos abriendo la terminal que tenga por defecto tu dispositivo según corresponda:
Instalación en Linux
ArchLinux y derivados
sudo pacman -S kitty
Debian y derivados
sudo apt install kitty
Fedora y derivados
sudo dnf install kitty
Instalación en MacOS
MacOS no tiene por defecto un gestor de paquetes como los que tienen las distribuciones de Linux, sin embargo, hay una opción de código abierto (no oficial de Apple) llamada Homebrew, el cual su propósito es el mismo que los gestores de paquetes de las distribuciones Linux: brindar la instalación, actualización y gestión de software de línea de comandos y aplicaciones en MacOS. No es forzoso contar con Homebrew, sin embargo, te lo recomiendo altamente ya que hace que la instalación y la gestión de software sea mucho mejor controlada por el usuario que lo que te brinda Apple por defecto.
En este artículo, haremos la instalación mediante Homebrew, si gustas hacer la instalación de otra manera, te recomiendo darte una vuelta a la documentación de Kitty
Para instalarlo, se hace de la siguiente manera:
brew install --cask kitty
Personalización de Kitty
Una vez instalado Kitty, ahora toca hacer una personalización bonita. Por defecto, Kitty será una simple ventana “sin chiste”, sin embargo, el toque debemos darlo nosotros.
Vamos a empezar instalando una Nerd Font, después un tema de colores y por último un archivo de configuración para colocar la fuente instalada y atajos de teclado que pueden servir.
Instalación de la fuente
¿Por qué una Nerd Font? Estas fuentes son recomendadas debido a que tienen buena compatibilidad con caracteres Unicode y de glyphs. No son las únicas fuentes que cuentan con esto, sin embargo son las más usadas.
Hay un montón de variedades de las Nerd Fonts, puedes revisar la gran variedad y elegir la que te guste aquí.
En este artículo, ocuparemos la fuente Iosevka Nerd Font; esta fuente tiene dos variaciones, una que es simplemente Iosevka y otra la cual es IosevkaTerm Nerd Font, la última es la que tiene mejor compatibilidad con la terminal. Te recomiendo instalar las dos ya que la primera te puede servir para personalizar Visual Studio Code.
Para instalarla en Linux, dependerá si la distribución cuenta con el paquete de la fuente, si cuenta con el paquete, simplemente la instalas con tu gestor de paquetes, pero si no cuenta con el paquete, no te preocupes, haremos la instalación manual de esta.
Linux
No importa en qué distribución estés, el procedimiento es el mismo.
# Descarga de la fuente Iosevka
curl -sS https://github.com/ryanoasis/nerd-fonts/releases/download/v3.4.0/Iosevka.zip -o ~/Iosevka.zip
# Descarga de la fuente IosevkaTerm
curl -sS https://github.com/ryanoasis/nerd-fonts/releases/download/v3.4.0/IosevkaTerm.zip -o ~/IosevkaTerm.zip
# Instalación global (recomendada)
mkdir -p /usr/local/share/fonts/Iosevka
mkdir -p /usr/local/share/fonts/IosevkaTerm
unzip ~/Iosevka.zip -d /usr/local/share/fonts/Iosevka
unzip ~/IosevkaTerm.zip -d /usr/local/share/fonts/IosevkaTerm
# Limpieza de archivos
rm ~/Iosevka.zip
rm ~/IosevkaTerm.zip
# Ejecutamos fc-cache -fv para avisarle al sistema que hay nuevas fuentes disponibles
fc-cache -fv
# Una vez terminada la instalación, verificamos su correcta instalación
fc-list | grep -i "Iosevka"
# Si se ve un output con Iosevka y IosevkaTerm, las fuentes ya están instaladas, si no las ves, prueba reiniciando tu sistema
MacOS
En MacOS, el procedimiento es un poco más simple que en Linux, Homebrew ya cuenta con los paquetes para las fuentes, por lo que aplicaremos esa instalación:
# Para Iosevka Nerd Font
brew install --cask font-iosevka-nerd-font
# Para Iosevka Term Nerd Font
brew install --cask font-iosevka-term-nerd-font
Personalización de colores
La forma sencilla de colocar un tema de colores, es usando lo siguiente:
kitty +kitten themes
Ese comando da una interfaz limpia en el que puedes seleccionar la paleta de colores que te agrade, en mi caso, yo ocupo la de Dark Pastel
Si gustas poner tu propia paleta de colores, es necesario crear un archivo de configuración para Kitty, este archivo se lee por usuario y se debe encontrar en la siguiente ruta: ~/.config/kitty/kitty.conf dentro de ese archivo, puedes colocar tu paleta de colores, aunque también puede ir otras configuraciones, las cuales vamos a colocar algunas más adelante. Pero con lo anterior, puedes usar la paleta que quieras.
Archivo de configuración
El archivo de configuración funciona como un “mapeo” de todas nuestras preferencias que Kitty tomará en cuenta y aplicará en la terminal.
No me quiero extender mucho con la funcionalidad de cada configuración, para eso, te recomiendo revisar la documentación de las configuraciones de Kitty.
Si no quieres revisar la documentación y quieres algo rápido, te comparto mi configuración de Kitty. Si deseas ocupar otra, mucha gente comparte sus configuraciones en grupos de Reddit y en dotfiles en repositorios de GitHub, ya que es una personalización personal y adaptada a tu forma de trabajo.
Al principio de mi archivo de configuración, estoy aplicando la fuente que instalamos, IosevkaTerm Nerd Font junto con su tamaño de fuente y demás configuraciones.
Otra sección que considero importante, es el mapeo de keyboard shortcuts; Kitty cuenta con shortcuts por defecto, sin embargo, yo los personalicé a mi manera, la cual se observará más adelante.
Una vez copiando el archivo a la ruta ~/.config/kitty/kitty.conf ¡Hemos terminado! Tu Kitty tendrá bonitos colores y se verá “tuneada” y lista para usar shortcuts.
MacOS
# Font
font_family family="IosevkaTerm Nerd Font"
font_size 24
bold_font auto
italic_font auto
bold_italic_font auto
# Cursors
cursor #F2D5CF
cursor_text_color #303446
cursor_shape beam
cursor_underline_thickness 2
cursor_blink_interval -1
cursor_stop_blinking_after 15
# Scrollback
scrollback_lines 2000
# Mouse
url_color #F2D5CF
copy_on_select yes
default_pointer_shape beam
pointer_shape_when_dragging beam
mouse_map middle release ungrabbed paste_from_selection
# Performance
repaint_delay 6
input_delay 1
sync_to_monitor no
# Window layout
remember_window_size yes
#initial_window_width 1500
#initial_window_height 500
enabled_layouts *
window_resize_step_cells 1
window_resize_step_lines 1
window_border_width 1
draw_minimal_borders yes
window_margin_width 0
single_window_margin_width -1
window_padding_width 1
single_window_padding_width -1
placement_strategy center
active_border_color #BABBF1
inactive_border_color #737994
bell_border_color #E5C890
hide_window_decorations no
resize_debounce_time 0.05
confirm_os_window_close 0
#wayland_titlebar_color background
# Tab bar
tab_bar_edge bottom
tab_bar_margin_width 0.0
tab_bar_margin_height 0.0 0.0
tab_bar_style powerline
tab_bar_align left
tab_bar_min_tabs 2
tab_switch_strategy previous
tab_fade 0.25 0.5 0.75 1
tab_title_template "❯ {title}"
active_tab_foreground #232634
active_tab_background #CA9EE6
inactive_tab_foreground #C6D0F5
inactive_tab_background #292C3C
tab_bar_background #232634
# Color scheme
#foreground #C6D0F5
#background #303446
#selection_foreground #000010
#selection_background #6d9ece
background_opacity 0.8
background_blur 1
#mark1_foreground #303446
#mark1_background #BABBF1
#mark2_foreground #303446
#mark2_background #CA9EE6
#mark3_foreground #303446
#mark3_background #85C1DC
#color0 #51576D
#color8 #626880
#color1 #E78284
#color9 #E78284
#color2 #A6D189
#color10 #A6D189
#color3 #E5C890
#color11 #E5C890
#color4 #8CAAEE
#color12 #8CAAEE
#color5 #F4B8E4
#color13 #F4B8E4
#color6 #81C8BE
#color14 #81C8BE
#color7 #B5BFE2
#color15 #A5ADCE
# Advanced
allow_remote_control yes
# Keyboard shortcuts
#clear_all_shortcuts yes
map alt+c copy_to_clipboard
map alt+v paste_from_clipboard
map alt+enter new_window
map alt+w close_window
map ctrl+tab next_window
map alt+tab previous_window
map alt+r start_resizing_window
map alt+right next_tab
map alt+left previous_tab
map alt+t new_tab
#map alt+q close_tab
map alt+up move_tab_forward
map alt+down move_tab_backward
map ctrl+n set_tab_title
map alt+l next_layout
map alt+kp_add change_font_size all +2.0
map alt+kp_subtract change_font_size all -2.0
map alt+backspace change_font_size all 0
map alt+f5 load_config_file
Shortcuts Kitty MacOS
| Shortcut | Acción |
|---|---|
| ⌥ | ⌘ + C | Copia el contenido seleccionado al portapapeles |
| ⌥ | ⌘ + V | Pega el contenido desde el portapapeles |
| ⌥ | ⌘ + Enter | Nueva ventana, es decir, nueva terminal sobre la misma tab |
| ⌥ + W | Cierra la ventana |
| ⌃ + Tab | Redirección del cursor a la ventana siguiente |
| ⌥ + Tab | Redirección del cursor a la ventana anterior |
| ⌥ | ⌘ + R | Redimensión de la ventana |
| ⌥ | ⌘ + T | Nueva tab |
| ⌥ + ← | Tab de la izquierda |
| ⌥ + → | Tab de la derecha |
| ⌥ + ↑ | Mover la tab hacia adelante |
| ⌥ + ↓ | Mover la tab hacia atrás |
| ⌃ + N | Cambiar título de la tab |
| ⌥ + L | Cambia la posición de las ventanas |
| ⌥ + + | Sube la fuente +2 píxeles, solo funciona con el + de teclado numérico |
| ⌥ + - | Baja la fuente -2 píxeles, solo funciona con el - de teclado numérico |
| ⌥ + Backspace | Resetea la fuente al de la configuración |
| ⌥ + F5 | Hot Reload de la configuración |
Linux
# Fonts
font_family IosevkaTerm Nerd Font
bold_font auto
italic_font auto
bold_italic_font auto
font_size 13
# Cursors
cursor #F2D5CF
cursor_text_color #303446
cursor_shape beam
cursor_underline_thickness 2
cursor_blink_interval -1
cursor_stop_blinking_after 15
# Scrollback
scrollback_lines 2000
# Mouse
url_color #F2D5CF
copy_on_select yes
default_pointer_shape beam
pointer_shape_when_dragging beam
mouse_map middle release ungrabbed paste_from_selection
# Performance
repaint_delay 6
input_delay 1
sync_to_monitor no
# Window layout
remember_window_size yes
initial_window_width 2000
initial_window_height 800
enabled_layouts *
window_resize_step_cells 1
window_resize_step_lines 1
window_border_width 1
draw_minimal_borders yes
window_margin_width 0
single_window_margin_width -1
window_padding_width 1
single_window_padding_width -1
placement_strategy center
active_border_color #BABBF1
inactive_border_color #737994
bell_border_color #E5C890
#linux_display_server x11
hide_window_decorations no
resize_debounce_time 0.05
confirm_os_window_close 0
#wayland_titlebar_color background
# Tab bar
tab_bar_edge bottom
tab_bar_margin_width 0.0
tab_bar_margin_height 0.0 0.0
tab_bar_style powerline
tab_bar_align left
tab_bar_min_tabs 2
tab_switch_strategy previous
tab_fade 0.25 0.5 0.75 1
tab_title_template "❯ {title}"
active_tab_foreground #232634
active_tab_background #CA9EE6
inactive_tab_foreground #C6D0F5
inactive_tab_background #292C3C
tab_bar_background #232634
# Color scheme
#foreground #C6D0F5
#background #303446
#selection_foreground #000010
#selection_background #6d9ece
background_opacity 0.8
background_blur 0
#mark1_foreground #303446
#mark1_background #BABBF1
#mark2_foreground #303446
#mark2_background #CA9EE6
#mark3_foreground #303446
#mark3_background #85C1DC
#color0 #51576D
#color8 #626880
#color1 #E78284
#color9 #E78284
#color2 #A6D189
#color10 #A6D189
#color3 #E5C890
#color11 #E5C890
#color4 #8CAAEE
#color12 #8CAAEE
#color5 #F4B8E4
#color13 #F4B8E4
#color6 #81C8BE
#color14 #81C8BE
#color7 #B5BFE2
#color15 #A5ADCE
# Advanced
allow_remote_control yes
# Keyboard shortcuts
clear_all_shortcuts yes
map alt+c copy_to_clipboard
map alt+v paste_from_clipboard
map alt+enter new_window
map alt+w close_window
map ctrl+tab next_window
map alt+tab previous_window
map alt+r start_resizing_window
map alt+right next_tab
map alt+left previous_tab
map alt+t new_tab
map alt+q close_tab
map alt+up move_tab_forward
map alt+down move_tab_backward
map alt+n set_tab_title
map alt+l next_layout
map alt+kp_add change_font_size all +2.0
map alt+kp_subtract change_font_size all -2.0
map alt+backspace change_font_size all 0
map alt+f5 load_config_file
El mapeo no cambia mucho en comparación a la configuración de MacOS. Yo lo hice así debido a que en MacOS el equivalente de la tecla Alt es ⌥, pero ya depende de cada uno.
Shortcuts Kitty Linux
| Shortcut | Acción |
|---|---|
| Alt + C | Copia el contenido seleccionado al portapapeles |
| Alt + V | Pega el contenido desde el portapapeles |
| Alt + Enter | Nueva ventana, es decir, nueva terminal sobre la misma tab |
| Alt + W | Cierra la ventana |
| Ctrl + Tab | Redirección del cursor a la ventana siguiente |
| Alt + Tab | Redirección del cursor a la ventana anterior (se rompe un poco por el Alt + Tab nativo de sistema). |
| Alt + R | Redimensión de la ventana |
| Alt + T | Nueva tab |
| Alt + Q | Cierra la tab |
| Alt + ← | Tab de la izquierda |
| Alt + → | Tab de la derecha |
| Alt + ↑ | Mover la tab hacia adelante |
| Alt + ↓ | Mover la tab hacia atrás |
| Alt + N | Cambiar título de la tab |
| Alt + L | Cambia la posición de las ventanas |
| Alt + + | Sube la fuente +2 píxeles, solo funciona con el + de teclado numérico |
| Alt + - | Baja la fuente -2 píxeles, solo funciona con el - de teclado numérico |
| Alt + Backspace | Resetea la fuente al de la configuración |
| Alt + F5 | Hot Reload de la configuración |
Bash a Zsh
¿Por qué Zsh?
Zsh se prefiere sobre Bash principalmente por ofrecer una experiencia interactiva superior, mayor comodidad y personalización avanzada, lo que aumenta la productividad del usuario. Aunque Bash es ideal para scripts estandarizados y alta fiabilidad, Zsh destaca por su completado de tabulación inteligente, corrección ortográfica de comandos y compatibilidad con plugins.
Bash también se puede personalizar, sin embargo, considero que Zsh tiene muchas más opciones de personalización y también estoy muy acostumbrado a usarlo. Otra opción muy buena es Fish.
Instalación en Linux
ArchLinux y derivados
sudo pacman -S zsh
Debian y derivados
sudo apt install zsh
Fedora y derivados
sudo dnf install zsh
Instalación en MacOS
Nota: Desde la versión Catalina del 2019, Zsh es la shell predeterminada de MacOS, por lo que no es necesario instalar algo ni configurar, ya que esta ya está por defecto.
brew install zsh
Cambio de Shell
El cambio de shell es el mismo comando tanto para Linux como para MacOS Nota: Desde la versión Catalina del 2019, Zsh es la shell predeterminada de MacOS, por lo que no es necesario instalar algo ni configurar, ya que esta ya está por defecto.
chsh -s $(which zsh)
Después de aplicar ese comando, reiniciamos nuestro equipo y ¡Listo! Ya tenemos Zsh para nuestro usuario.
Starship
¿Qué es Starship?
Starship es un prompt (indicador de comandos) de terminal altamente personalizable, rápido y ligero, compatible con múltiples shells como Bash, Zsh, Fish y PowerShell. Escrito en Rust, permite mostrar información relevante del entorno de trabajo (como ramas Git, versiones de lenguaje) de manera minimalista y unificada.
Es mi favorito, aunque también otra buena opción es Oh My Zsh. De mi parte, es mejor Starship ya que con solo un archivo de configuración, puedes hacer una personalización muy completa de tu terminal de forma rápida y sencilla.
Instalación
A diferencia de lo que hemos instalado en este artículo, Starship no se instala mediante un gestor de paquetes, sino que mediante su script de instalación. Puedes revisar su guía si deseas instalarlo de otra forma (compilandolo tú mismo o con un gestor de paquetes específico).
La instalación será exactamente igual tanto en Linux como en MacOS
curl -sS https://starship.rs/install.sh | sh
Una vez instalado, añadimos la invocación de Starship en nuestra configuración de Zsh en ~/.zshrc
echo "eval \"\$(starship init zsh)\"" >> ${ZSOTDIR:-$HOME}/.zshrc
Temas para Starship
Starship ofrece un tema muy bonito y sencillo, el cual si te gusta, lo puedes seguir usando sin mayor tema, pues la terminal en este punto del artículo, ya estará personalizada.
Sin embargo, lo malo de su tema, es que ocupa emojis, cosa que a mí en lo absoluto, no me agrada del todo. Por lo que toca hacer nuestro propio tema.
Recomiendo mucho que si quieres fabricar tu tema desde 0, le eches un vistazo a la documentación de configuración de Starship. Pero si no te quieres complicar la vida, recomiendo que le eches un vistazo a esta discusión del repositorio de GitHub de Starshipen el cual muchas personas compartieron sus temas para que solo copies y pegues su configuración.
Otra forma de instalar temas, es mediante x-cmd, el cual es un toolkit que ofrece muchas herramientas y configuraciones, parecido a un gestor de paquetes pero enfocado a tools para programas, uno de los tools que ofrece es el de Starship, el cual tiene varios temas (no muchos) para Starship. Si te gusta mucho como se ve Starship y solo quieres remover los emojis, hay un tema llamado Nerd Font Symbols. Puedes revisar en profundidad ese apartado de Starship en su documentación
En este artículo, nos enfocaremos en instalar nuestro propio tema, para ello, tenemos que crear el archivo ~/.config/starship.toml
Y dentro de ese archivo, colocaremos todo nuestro tema, el cual lo puedes tomar de la discusión de GitHub que mencioné arriba, o bien, puedes tomar la mía.
# ============================================
# 1. FORMATO GLOBAL
# ============================================
add_newline = true
palette = 'cyberdream'
# Estructura visual:
# ┌──( | usuario )─[ dir ] git node rust ...
# └──$
format = """
[┌──\\(](bold overlay1)\
$os\
[|](bold overlay1)\
$username\
[\\)─\\[](bold overlay1)\
$directory\
[\\]](bold overlay1)\
$git_branch\
$git_status\
$package\
$c\
$cmake\
$cobol\
$daml\
$dart\
$deno\
$dotnet\
$elixir\
$elm\
$erlang\
$golang\
$guix_shell\
$haskell\
$haxe\
$helm\
$java\
$julia\
$kotlin\
$gradle\
$lua\
$nim\
$nodejs\
$ocaml\
$opa\
$perl\
$php\
$pulumi\
$purescript\
$python\
$raku\
$rlang\
$red\
$ruby\
$rust\
$scala\
$solidity\
$swift\
$terraform\
$vlang\
$vagrant\
$zig\
$buf\
$nix_shell\
$conda\
$meson\
$spack\
$memory_usage\
$aws\
$gcloud\
$openstack\
$azure\
$env_var\
$crystal\
$custom\
$sudo\
$docker_context\
${custom.hackthebox}\
$cmd_duration\
\n$character\
"""
# ============================================
# 2. COLORES (Cyberdream)
# ============================================
[palettes.cyberdream]
text = '#c7cfff'
overlay1 = '#404A63'
color_fg0 = '#c7cfff'
color_bg0 = '#0a0e14'
color_blue = '#5ea1ff'
color_green = '#5eff6c'
color_orange = '#ffb65e'
color_red = '#ff6e5e'
color_yellow = '#f1ff5e'
color_pink = '#ff5ea0'
color_purple = '#bd5eff'
color_aqua = '#5ef1ff'
# ============================================
# 3. IDENTIDAD Y OS
# ============================================
[os]
disabled = false
style = "bold white"
format = '$symbol'
[os.symbols]
Alpaquita = " "
Alpine = " "
AlmaLinux = " "
Amazon = " "
Android = " "
AOSC = " "
Arch = " "
Artix = " "
CachyOS = " "
CentOS = " "
Debian = " "
DragonFly = " "
Emscripten = " "
EndeavourOS = " "
Fedora = " "
FreeBSD = " "
Garuda = " "
Gentoo = " "
HardenedBSD = " "
Illumos = " "
Kali = " "
Linux = " "
Mabox = " "
Macos = " "
Manjaro = " "
Mariner = " "
MidnightBSD = " "
Mint = " "
NetBSD = " "
NixOS = " "
Nobara = " "
OpenBSD = " "
openSUSE = " "
OracleLinux = " "
Pop = " "
Raspbian = " "
Redhat = " "
RedHatEnterprise = " "
RockyLinux = " "
Redox = " "
Solus = " "
SUSE = " "
Ubuntu = " "
Unknown = " "
Void = " "
Windows = " "
[username]
disabled = false
style_user = 'bold color_blue'
style_root = 'bold color_red'
format = '[$user]($style)'
show_always = true
[hostname]
disabled = true
[directory]
style = "bold color_purple"
format = '[$path]($style)'
truncation_length = 3
truncation_symbol = "…/"
read_only = " "
# ============================================
# 4. GIT
# ============================================
[git_branch]
symbol = " "
style = "bold color_pink"
format = ' [](bold color_aqua) [$symbol$branch]($style)'
[git_status]
style = "bold color_red"
ahead = "⇡${count}"
behind = "⇣${count}"
diverged = "⇕⇡${ahead_count}⇣${behind_count}"
conflicted = "conflicto"
up_to_date = ""
format = '( [\[$all_status$ahead_behind\]]($style))'
# ============================================
# 5. LENGUAJES (Formato Unificado)
# ============================================
[aws]
symbol = " "
format = ' [](bold color_aqua) [$symbol($profile )]($style)'
[buf]
symbol = " "
format = ' [](bold color_aqua) [$symbol($version)]($style)'
[bun]
symbol = " "
format = ' [](bold color_aqua) [$symbol($version)]($style)'
[c]
symbol = " "
format = ' [](bold color_aqua) [$symbol($version)]($style)'
[cpp]
symbol = " "
format = ' [](bold color_aqua) [$symbol($version)]($style)'
[cmake]
symbol = " "
format = ' [](bold color_aqua) [$symbol($version)]($style)'
[cobol]
symbol = "⚙️ "
format = ' [](bold color_aqua) [$symbol($version)]($style)'
[conda]
symbol = " "
format = ' [](bold color_aqua) [$symbol$environment]($style)'
[crystal]
symbol = " "
format = ' [](bold color_aqua) [$symbol($version)]($style)'
[dart]
symbol = " "
format = ' [](bold color_aqua) [$symbol($version)]($style)'
[deno]
symbol = " "
format = ' [](bold color_aqua) [$symbol($version)]($style)'
[docker_context]
symbol = " "
format = ' [](bold color_aqua) [$symbol$context]($style)'
[dotnet]
symbol = " "
format = ' [](bold color_aqua) [$symbol($version)]($style)'
[elixir]
symbol = " "
format = ' [](bold color_aqua) [$symbol($version)]($style)'
[elm]
symbol = " "
format = ' [](bold color_aqua) [$symbol($version)]($style)'
[erlang]
symbol = " "
format = ' [](bold color_aqua) [$symbol($version)]($style)'
[gcloud]
symbol = " "
format = ' [](bold color_aqua) [$symbol($profile )]($style)'
[golang]
symbol = " "
format = ' [](bold color_aqua) [$symbol($version)]($style)'
[gradle]
symbol = " "
format = ' [](bold color_aqua) [$symbol($version)]($style)'
[guix_shell]
symbol = " "
format = ' [](bold color_aqua) [$symbol]($style)'
[haskell]
symbol = " "
format = ' [](bold color_aqua) [$symbol($version)]($style)'
[haxe]
symbol = " "
format = ' [](bold color_aqua) [$symbol($version)]($style)'
[helm]
symbol = "⎈ "
format = ' [](bold color_aqua) [$symbol($version)]($style)'
[java]
symbol = " "
format = ' [](bold color_aqua) [$symbol($version)]($style)'
[julia]
symbol = " "
format = ' [](bold color_aqua) [$symbol($version)]($style)'
[kotlin]
symbol = " "
format = ' [](bold color_aqua) [$symbol($version)]($style)'
[lua]
symbol = " "
format = ' [](bold color_aqua) [$symbol($version)]($style)'
[memory_usage]
symbol = " "
format = ' [](bold color_aqua) [$symbol$ram]($style)'
[meson]
symbol = " "
format = ' [](bold color_aqua) [$symbol($version)]($style)'
[nim]
symbol = " "
format = ' [](bold color_aqua) [$symbol($version)]($style)'
[nix_shell]
symbol = " "
format = ' [](bold color_aqua) [$symbol]($style)'
[nodejs]
symbol = " "
format = ' [](bold color_aqua) [$symbol($version)]($style)'
[ocaml]
symbol = " "
format = ' [](bold color_aqua) [$symbol($version)]($style)'
[opa]
symbol = " "
format = ' [](bold color_aqua) [$symbol($version)]($style)'
[package]
symbol = " "
format = ' [](bold color_aqua) [$symbol$version]($style)'
[perl]
symbol = " "
format = ' [](bold color_aqua) [$symbol($version)]($style)'
[php]
symbol = " "
format = ' [](bold color_aqua) [$symbol($version)]($style)'
[pulumi]
symbol = " "
format = ' [](bold color_aqua) [$symbol($version)]($style)'
[purescript]
symbol = "⇔ "
format = ' [](bold color_aqua) [$symbol($version)]($style)'
[python]
symbol = " "
format = ' [](bold color_aqua) [$symbol($version)]($style)'
[raku]
symbol = "R "
format = ' [](bold color_aqua) [$symbol($version)]($style)'
[rlang]
symbol = " "
format = ' [](bold color_aqua) [$symbol($version)]($style)'
[red]
symbol = "🔺 "
format = ' [](bold color_aqua) [$symbol($version)]($style)'
[ruby]
symbol = " "
format = ' [](bold color_aqua) [$symbol($version)]($style)'
[rust]
symbol = " "
format = ' [](bold color_aqua) [$symbol($version)]($style)'
[scala]
symbol = " "
format = ' [](bold color_aqua) [$symbol($version)]($style)'
[solidity]
symbol = "⟠ "
format = ' [](bold color_aqua) [$symbol($version)]($style)'
[swift]
symbol = " "
format = ' [](bold color_aqua) [$symbol($version)]($style)'
[terraform]
symbol = " "
format = ' [](bold color_aqua) [$symbol$version]($style)'
[vlang]
symbol = "V "
format = ' [](bold color_aqua) [$symbol($version)]($style)'
[vagrant]
symbol = "⍱ "
format = ' [](bold color_aqua) [$symbol($version)]($style)'
[zig]
symbol = " "
format = ' [](bold color_aqua) [$symbol($version)]($style)'
# ============================================
# 6. FINAL
# ============================================
[cmd_duration]
min_time = 1000
show_milliseconds = false
format = ' [» $duration](italic fg:color_yellow)'
[character]
format = """
[└──](bold overlay1)$symbol """
success_symbol = '[\$](bold color_green)'
error_symbol = '[\$](bold color_red)'
[custom.hackthebox]
description = "Muestra la IP de la VPN de HTB"
command = "ip addr show tun0 | grep 'inet ' | awk '{print $2}' | cut -d/ -f1"
when = "ip link show tun0"
symbol = " "
style = "bold green"
format = "[ $symbol($output )]($style)"
Me basé mucho en la terminal de Kali Linux, solo que hecha a mi manera.
¡Solo con eso bastará para tener tu Starship completamente personalizado a tu manera!
Plugins para Zsh
¿Para qué sirven?
Los plugins de Zsh sirven para mejorar la productividad, personalizar la apariencia y ampliar las funcionalidades de la terminal, facilitando tareas como el autocompletado, resaltado de sintaxis y la gestión de git. Se integran principalmente a través de frameworks como Oh My Zsh o Starship para automatizar comandos, añadir alias y hacer el flujo de trabajo más visual y eficiente.
No instalo muchos plugins, pero los que considero indispensables son:
- autosuggestions: Plugin que recuerda los comandos que haz usado y te permite autocompletar simplemente oprimiendo la tecla de la flecha derecha →
- syntax-highlighting: Plugin que ilumina los comandos y te da a saber con facilidad si tecleaste bien o no un comando, por defecto, si lo tecleas bien, te lo da en color verde, caso contrario, color rojo, al igual que te subraya las URLs y los paths, dandote cuenta con facilidad en el caso de los paths, si existen o no
- fzf-tab: Plugin que utiliza la utilidad fzf para mostrar los archivos y directorios de forma bonita. Por defecto, al oprimir la tecla Tab cuando estamos teclado un comando, un archivo o directorio, la shell nos muestra el contenido en texto plano ¡Sin chiste y sin colores! fzf-tab hace que eso se vea bonito y mejor visto.
La instalación es exactamente igual tanto en Linux como en MacOS.
Plugins
Autosuggestions
Para instalarlo, seguiremos los siguientes pasos:
- Clona el repositorio:
git clone https://github.com/zsh-users/zsh-autosuggestions ~/.zsh/zsh-autosuggestions
Puedes cambiar el destino al que quieras. Yo utilizo ~/.zsh/zsh-autosuggestions
- Añade la invocación a la configuración de Zsh
echo "source ~/.zsh/zsh-autosuggestions/zsh-autosuggestions.zsh" >> ${ZSOTDIR:-$HOME}/.zshrc
Los comandos los saqué en: https://gist.github.com/ikrishagarwal/d6a406d1b00bb637834c88a162bdbce6 créditos al respectivo autor
Syntax Highlighting
Para instalarlo, seguiremos los siguientes pasos
- Clona el repositorio
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ~/.zsh/zsh-syntax-highlighting
- Añade la invocación a la configuración de Zsh
echo "source ~/.zsh/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh" >> ${ZDOTDIR:-$HOME}/.zshrc
Nota: En Linux, si ves Systemd en la terminal y quieres quitarlo, aplica esto:
mkdir -p ~/.config && printf "[container]\ndisabled = true" >> ~/.config/starship.toml
Los comandos los saqué en: https://gist.github.com/ikrishagarwal/d6a406d1b00bb637834c88a162bdbce6 créditos al respectivo autor
fzf-tab
- Instala fzf (si no lo tienes)
Para MacOS
brew install fzf
Para ArchLinux y derivados
sudo pacman -S fzf
Para Debian y derivados
sudo apt install fzf
Para Fedora y derivados
sudo dnf install fzf
- Clona el repositorio
git clone https://github.com/Aloxaf/fzf-tab.git ~/.zsh/fzf-tab
- Añade la invocación a la configuración de Zsh
echo "source ~/.zsh/fzf-tab/fzf-tab.plugin.zsh" >> ${ZSOTDIR:-$HOME}/.zshrc
Con esto ¡Hemos terminado! tu terminal ya se verá bonita, ya está agarrando forma.
Utilidades de terminal
Las utilidades son muy importantes, nos ayudan a facilitar nuestra tarea y hacer que la personalización no solo se quede en Kitty y en Starship, sino que también en programas comunes tanto de Linux como de MacOS.
Yo recomiendo instalar las siguientes utilidades:
- Bat: Un cat con esteroides y tuneado.
- Atuin: Permite mejor control del historial de comandos.
- fzf: Es un programa interactivo para filtrar cualquier tipo de lista, archivos, historial de comandos, procesos, hostnames, bookmarks, commits de git, etc.
- eza: Un ls y más. Con opción a personalización.
Empecemos instalando…
Bat

Utilidad muy buena para ver el contenido de archivos, parecido a cat, solo que cat los muestra en texto plano, esta utilidad en vez de mostrarlos en texto plano, hace uso de una paleta de colores y de la utilidad less.
Instalación
Para instalarla es muy sencillo
MacOS
brew install bat
ArchLinux y derivados
# Ojo, a veces ArchLinux no te da el paquete less, entonces también hay que instalarlo
sudo pacman -S bat less
Debian y derivados
En Debian y derivados, no existe bat en los repositorios oficiales, por lo que la instalación deberá ser manual.
# Arquitectura amd64 | x86-64
curl -sS https://github.com/sharkdp/bat/releases/download/v0.26.1/bat_0.26.1_amd64.deb -o ~/bat.deb
# Arquitectura arm64
curl -sS https://github.com/sharkdp/bat/releases/download/v0.26.1/bat_0.26.1_arm64.deb -o ~/bat.deb
# Instalación mediante apt
sudo apt install ~/bat.deb
# Una vez instalado, hacemos la limpieza
rm ~/bat.deb
Fedora y derivados
sudo dnf install bat
Configuración
Una vez instalado, toca meterle un tema. Por defecto, ocupa como tema Monokai Extended
Para ver los temas disponibles, ejecuta:
bat --list-themes
Si alguno te gustó, lo puedes cambiar creando un archivo de configuración en ~/.config/bat/config. En ese archivo debe estar todas las posibles configuraciones que se le puede colocar a bat, eso se puede verificar en el repositorio de bat.
Nosotros no le moveremos mucho a ese archivo, simplemente colocaremos el nombre del tema que nos agradó. Si quieres ocupar un tema de pago u otro tema externo a los que cuenta bat, los temas deben tener la extensión .tmTheme. En mi caso, ocupo el tema de Dracula Pro. Al ser un tema de pago, es necesario hacer la carga manual del tema, si cuentas con el mismo tema, son los temas que se encuentran en la carpeta sublime (si, bat ocupa los mismos temas de Sublime Text).
A continuación, muestro la secuencia de pasos a seguir para instalar un tema personalizado para bat, en este caso, ocupando Dracula Pro
# Creamos el directorio donde se situarán los temas
mkdir -p "$(bat --config-dir)/themes"
# Copiamos los temas externos, en este caso, de Dracula Pro
cp -r ~/Archive/themes/sublime/*.tmTheme "$(bat --config-dir)/themes"
# Construimos el cache de bat para que detecte nuestro tema
bat cache --build
Al hacer esto, cuando se vuelva a ejecutar:
bat --list-themes
Aparecerá el tema que hemos colocado, entonces, en ese momento, ya podremos colocar el tema que nos agradó en el archivo de configuración, en mi caso, agrego el de Dracula Pro (Van Helsing):
echo '--theme="Dracula Pro (Van Helsing)"' > "$(bat --config-dir)/config"
Ojo: El nombre debe ser exactamente el mismo que muestra bat cuando listamos sus temas
Por último, para poder hacer un “verdadero” reemplazo de cat, vamos a agregar un alias a nuestra configuración de Zsh:
echo "alias cat='bat'" >> ~/.zshrc
¡Y listo! Ya tendremos totalmente implementado nuestro reemplazo de cat!
Atuin

Atuin nos permite una mejor gestión del historial de comandos de nuestro usuario, por si queremos reutilizar un comando y no sabemos cómo iba el comando.
Instalación
Atuin tiene dos versiones, una CLI y otra Desktop, nosotros ocuparemos la de CLI
MacOS
brew install atuin
Linux
La mejor forma de instalar Atuin es mediante cargo, utilidad de Rust para poder compilar Atuin.
- Primero, debemos instalar todo lo necesario de Rust, ahí es donde se incluye cargo:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
- Después, compilamos Atuin (cargo se traerá el paquete automáticamente):
cargo install atuin
- Una vez instalado, agregamos la inicialización en Zsh
echo '. "$HOME/.atuin/bin/env"' >> ~/.zshrc
echo 'eval "$(atuin init zsh)"' >> ~/.zshrc
¡Y listo! Ya estaría instalado, para empezar a usarlo, solo basta con presionar hacia arriba ↑ y aparecerá.
Configuración
Se puede configurar, yo no lo suelo hacer, pero si tú quieres hacerlo, te recomiendo echarle un vistazo a la documentación de Atuin.
fzf

fzf es una utilidad que nos permite listar y filtrar cualquier cosa, útil cuando queremos buscar algo.
Instalación
Si haz estado siguiendo todo el artículo, no hace falta que vuelvas a instalar la utilidad
Para MacOS
brew install fzf
Para ArchLinux y derivados
sudo pacman -S fzf
Para Debian y derivados
sudo apt install fzf
Para Fedora y derivados
sudo dnf install fzf
Configuración
Aquí hay algo interesante ¡Puedes integrar fzf con bat para mejor visualización de los archivos! Realmente puedes hacer muchísimas cosas con fzf, te recomiendo que revises la documentación de fzf para más información, misma que se encuentra en su repositorio de GitHub.
Nosotros lo que haremos es solamente mejorar la previsualización de archivos, para ello solo basta con agregar el siguiente alias a nuestra configuración de Zsh
echo 'alias fzf="fzf --preview=\'bat --color=always -pp {}\'"' >> ~/.zshrc
Y simplemente con ejecutar fzf en la terminal, ¡tendremos una asombrosa visualización de archivos integrada con nuestra configuración de bat!
eza

eza es una versión mejorada de ls, permite personalizar lo que ls muestra por defecto, aunque también hace una mejora para el comando tree
Instalación
Su instalación se realiza de la siguiente manera:
MacOS
brew install eza
ArchLinux y derivados
sudo pacman -S eza
Debian y derivados
sudo apt install eza
Fedora y derivados
A partir de Fedora 42, eza ya no está disponible en dnf, por lo que lo mejor es instalarlo por cargo de Rust:
cargo install eza
Configuración
Puedes cambiar el tema de eza, para ello puedes revisar este apartado del repositorio de GitHub de eza. A mí me gusta dejar eza como viene por defecto, por lo que ese apartado no lo veremos en este artículo.
Por último, para hacer el verdadero “reemplazo” de ls y de tree, debemos agregar estos alias en nuestra configuración de Zsh
echo "alias ls='eza --icons'" >> ~/.zshrc
echo "alias tree='eza -T'" >> ~/.zshrc
¡Y listo! ya tendremos nuestra versión moderna de listar cosas y de ver archivos.
¡Eso fue todo por este artículo! El resultado final es una terminal completa, “tuneada” y muy completa para usar a diario. ¡Espero y les haya gustado!