Cómo Configurar Starship Prompt con Fish Shell

Guía paso a paso para instalar y configurar Starship prompt en Fish Shell, con temas preconfigurados, módulos personalizados y configuración de Nerd Fonts.

Cómo Configurar Starship Prompt con Fish Shell

Starship es un prompt multi-shell escrito en Rust. Funciona con Fish, Zsh, Bash, PowerShell y otros, así que puedes usar la misma configuración de prompt sin importar en qué shell estés. Lo he estado usando con Fish Shell y se complementan bien. Starship es rápido, la configuración es un solo archivo TOML, y te muestra la información que realmente necesitas (rama de git, versiones de lenguajes, duración del comando) sin saturar el prompt.

Anteriormente escribí una guía sobre Starship con Ghostty y Zsh. La configuración con Fish sigue los mismos principios, pero la línea de inicialización va en un archivo de configuración diferente.

Requisitos previos

Necesitas tener Fish Shell instalado. Si aún no lo tienes, sigue mi guía de instalación de Fish Shell para Ubuntu.

También necesitas una Nerd Font. Starship usa glifos especiales para los iconos, y sin una Nerd Font aparecen como cuadros rotos.

Instalar una Nerd Font

Recomiendo MesloLGS Nerd Font. En Ubuntu:

# Descargar e instalar
mkdir -p ~/.local/share/fonts
cd ~/.local/share/fonts
curl -fLO https://github.com/ryanoasis/nerd-fonts/releases/latest/download/Meslo.tar.xz
tar -xf Meslo.tar.xz
fc-cache -fv

En macOS con Homebrew:

brew install font-meslo-lg-nerd-font

Después de instalarla, configura la fuente en los ajustes de tu emulador de terminal. En Ghostty, agrega esto a tu configuración:

font-family = MesloLGS Nerd Font

Para otros terminales (WezTerm, Alacritty, kitty, etc.), consulta su documentación para la opción de configuración de fuentes.

Instalar Starship

El método de instalación recomendado:

curl -sS https://starship.rs/install.sh | sh

O usa un gestor de paquetes:

# Ubuntu/Debian (via snap)
snap install starship

# macOS
brew install starship

# Cargo
cargo install starship --locked

Verificar:

starship --version

Agregar Starship a Fish

Agrega una línea a tu configuración de Fish:

# ~/.config/fish/config.fish
starship init fish | source

Eso es todo. Abre una nueva terminal o ejecuta source ~/.config/fish/config.fish y deberías ver el prompt de Starship.

El orden importa

Coloca la línea starship init fish | source al final de tu config.fish, después de cualquier otra configuración. Esto asegura que Starship cargue de último y pueda configurar el prompt correctamente.

Elegir un preset

Starship incluye varios presets que cambian la apariencia de tu prompt. Puedes verlos en starship.rs/presets.

Aplicar un preset:

starship preset tokyo-night -o ~/.config/starship.toml

Presets populares:

  • Tokyo Night — tema oscuro con tonos púrpura/azul
  • Catppuccin — tema con colores pastel, varias variantes (Mocha, Macchiato, Latte)
  • Nerd Font Symbols — reemplaza etiquetas de texto con iconos de Nerd Font
  • Bracketed Segments — envuelve cada módulo entre corchetes
  • Plain Text — sin caracteres especiales, funciona sin Nerd Fonts

Prueba varios. El comando de preset sobrescribe tu starship.toml, así que haz una copia de seguridad de cualquier configuración personalizada antes.

Configurar Starship

Starship lee su configuración de ~/.config/starship.toml. Si el archivo no existe, Starship usa valores por defecto razonables.

Esta es una configuración práctica que muestra información relevante sin saturar:

# ~/.config/starship.toml

# Configuración general
format = """
$directory\
$git_branch\
$git_status\
$nodejs\
$python\
$rust\
$golang\
$docker_context\
$cmd_duration\
$line_break\
$character"""

# No agregar línea en blanco entre prompts
add_newline = false

[directory]
truncation_length = 3
truncate_to_repo = true

[git_branch]
format = "[$symbol$branch]($style) "
symbol = " "

[git_status]
format = '([$all_status$ahead_behind]($style) )'

[nodejs]
format = "[$symbol($version)]($style) "
symbol = " "

[python]
format = "[$symbol($version)]($style) "
symbol = " "

[rust]
format = "[$symbol($version)]($style) "
symbol = " "

[golang]
format = "[$symbol($version)]($style) "
symbol = " "

[docker_context]
format = "[$symbol$context]($style) "
symbol = " "

[cmd_duration]
min_time = 2_000
format = "[$duration]($style) "

[character]
success_symbol = "[❯](green)"
error_symbol = "[❯](red)"

Qué hace cada sección

format controla qué módulos aparecen y en qué orden. Solo se muestran los módulos listados aquí.

directory muestra la ruta actual. truncation_length = 3 significa que ves como máximo 3 directorios padre. truncate_to_repo = true muestra la ruta completa desde la raíz del repositorio git.

git_branch y git_status muestran el nombre de tu rama y si tienes cambios sin confirmar, conteos de adelante/atrás, etc.

Módulos de lenguajes (nodejs, python, rust, golang) solo aparecen cuando estás en un proyecto que usa ese lenguaje. Lo detectan buscando archivos como package.json, pyproject.toml, Cargo.toml y similares.

cmd_duration muestra cuánto tardó el último comando, pero solo si tardó más de 2 segundos. Útil para detectar comandos lentos.

character muestra un verde en caso de éxito y un rojo después de un comando fallido.

Starship vs Tide

Si usas Fish, tienes dos buenas opciones de prompt:

StarshipTide
Funciona conFish, Zsh, Bash, etc.Solo Fish
ConfiguraciónArchivo TOMLAsistente interactivo
Renderizado asíncronoNo (pero lo suficientemente rápido)
InstalaciónBinario separadoPlugin de Fisher
Necesita Nerd FontSí (para la mayoría de presets)
PersonalizaciónEditar starship.tomltide configure + variables

Elige Starship si usas múltiples shells y quieres una sola configuración de prompt, o si prefieres editar un archivo de configuración directamente.

Elige Tide si solo usas Fish y quieres renderizado asíncrono con una configuración basada en asistente. Instala Tide con Fisher:

fisher install IlanCosman/tide@v6
tide configure

Hablo de Tide y otras herramientas de Fish en los mejores plugins y herramientas para Fish Shell. Para una comparación completa de todas las opciones de prompt para Fish incluyendo Tide, Pure e Hydro, consulta mi guía de temas y prompts de Fish Shell.

Ambas son buenas opciones. Yo uso Starship porque a veces trabajo con Zsh o Bash en otras máquinas y quiero el mismo prompt en todas partes.

Configuración avanzada

Prompt del lado derecho

Starship soporta un prompt derecho que aparece en el borde derecho de tu terminal:

# En starship.toml
right_format = """$time"""

[time]
disabled = false
format = "[$time]($style)"
time_format = "%H:%M"

Esto muestra la hora actual en el lado derecho. El soporte de prompt derecho de Fish funciona bien con esto.

Módulos personalizados

Puedes definir módulos personalizados que ejecutan comandos de shell:

[custom.fish_version]
command = "fish --version | string split ' ' | tail -1"
when = "true"
format = "[fish $output]($style) "
style = "cyan"

Esto mostraría tu versión de Fish en el prompt. Útil para depuración o para mostrar información específica del proyecto.

Configuración por directorio

Starship no tiene configuración por directorio, pero puedes lograr algo similar con el sistema conf.d de Fish. Crea una función que establezca STARSHIP_CONFIG según el directorio actual:

# ~/.config/fish/conf.d/starship-dir.fish
function __check_starship_config --on-variable PWD
    if test -f .starship.toml
        set -gx STARSHIP_CONFIG (pwd)/.starship.toml
    else
        set -e STARSHIP_CONFIG
    end
end

Ahora cualquier directorio con un archivo .starship.toml usará esa configuración en lugar de la global.

Solución de problemas

Los iconos aparecen como cuadros o signos de interrogación. Necesitas una Nerd Font instalada y seleccionada en tu terminal. Revisa la sección de requisitos previos más arriba.

El prompt va lento. Starship generalmente es rápido, pero algunos módulos (particularmente git status en repositorios muy grandes) pueden ser lentos. Desactívalos:

[git_status]
disabled = true

Starship no carga. Asegúrate de que starship init fish | source esté en tu config.fish y que starship esté en tu $PATH. Ejecuta which starship para verificar.

Lectura adicional