8 puntos por GN⁺ 2025-06-25 | 2 comentarios | Compartir por WhatsApp
  • Starship es un proyecto open source de prompt con ligereza, alto rendimiento y flexibilidad para usarse en distintos entornos de shell
  • Ofrece amplia compatibilidad con la mayoría de las shells principales, como Bash, Zsh, Fish, Powershell y Tcsh
  • Se puede configurar y aplicar agregando fácilmente scripts de inicialización para cada shell
  • Está escrito en Rust, lo que garantiza velocidad y seguridad, y se distribuye como un binario único
  • Se puede personalizar hasta en los detalles más mínimos
  • Permite mantener un entorno común en múltiples plataformas como Android, BSD, Linux, macOS y Windows, mejorando la productividad y la facilidad de uso

Proyecto open source Starship

  • Starship es una herramienta de prompt que ofrece al mismo tiempo rendimiento y personalización, y puede usarse en distintos sistemas operativos y shells
  • Frente a prompts tradicionales más pesados, se distingue por su rápida capacidad de respuesta y bajo consumo de recursos, además de un alto nivel de personalización que ayuda a mejorar la productividad de desarrollo

Cómo configurarlo en cada entorno de shell

  • Bash:
    • Agregar el código eval "$(starship init bash)" al final del archivo ~/.bashrc
  • Fish:
    • Agregar starship init fish | source al final del archivo ~/.config/fish/config.fish
  • Zsh:
    • Agregar el código eval "$(starship init zsh)" al final del archivo ~/.zshrc
  • Powershell:
    • Agregar Invoke-Expression (&starship init powershell) al archivo Microsoft.PowerShell_profile.ps1
    • La ubicación del archivo de perfil de PowerShell se puede comprobar con la variable $PROFILE
  • Ion:
    • Escribir el código eval $(starship init ion) en el archivo ~/.config/ion/initrc
  • Elvish:
    • Solo compatible con la versión v0.18 o superior
    • Agregar el código eval (starship init elvish) al archivo ~/.elvish/rc.elv
  • Tcsh:
    • Escribir el código eval \starship init tcsh`` en el archivo ~/.tcshrc
  • Nushell:
    • Solo compatible con v0.96 o superior; la forma de configuración podría cambiar en el futuro
    • La ruta del archivo de configuración se puede comprobar con el comando $nu.config-path
    • Aplicarlo en esa ruta con el código starship init nu | save -f ...
  • Xonsh:
    • Escribir execx($(starship init xonsh)) al final del archivo ~/.xonshrc
  • Cmd (requiere Clink):
    • Requiere Clink v1.2.30 o superior
    • Crear el archivo starship.lua y guardarlo en el directorio de scripts de Clink
    • Dentro, agregar el código load(io.popen('starship init cmd'):read("*a"))()

2 comentarios

 
tujuc 2025-06-25

Qué curioso ver publicado algo que llevo años usando bien :)
Lo uso desde cuando se ofrecía como tema de Zsh... jajajaja

 
GN⁺ 2025-06-25
Opinión de Hacker News
  • Soy un usuario al que le gustan los prompts maximalistas, y uso con frecuencia la instalación de Shell Bling Ubuntu mediante Starship al preparar máquinas de desarrollo
    Aun así, este estilo no es para todo el mundo
    Si quieres agregar solo la información más densa y útil, recomiendo mostrar únicamente la hora en que apareció el prompt y la duración de ejecución del último comando
    Con solo esos dos datos es fácil entender qué pasó y cuándo, y más adelante da grandes ventajas para depuración o gestión de registros
    Este enfoque es un tip que saqué de Networking for System Administrators de Michael W. Lucas, y también suelo recomendar ese libro a desarrolladores que quieren aprender fundamentos de redes
    Si quieres ganar más puntos nerd, muestra la hora en segundos desde la época UNIX
    Eso tiene la ventaja de que calcular deltas de tiempo se vuelve muy fácil
    Consulta el repo de Shell Bling Ubuntu

    • En nushell este tipo de información viene por defecto
      En el historial (history) puedes ver detalles como la marca de tiempo de inicio del comando, tiempo de ejecución, directorio actual, estado de salida, etc.
      Es muy conveniente porque no solo muestra la diferencia de tiempo entre ejecuciones, sino también el tiempo de ejecución del comando en sí

    • Casi nunca he personalizado el prompt
      Si usas emacs, ya puedes ver en el editor toda la información que quieres
      Solo configuro Starship cuando tengo que mostrarlo a otras personas, como en programación en pareja, y dejo abierta una app de terminal aparte para no tener que enseñar mi configuración

    • El exit code del comando anterior también es información muy útil por razones parecidas a las de arriba

    • Mostrar la hora actual en un formato fácil de leer para humanos también ayuda bastante
      Y si el estado de salida del comando anterior no fue 0 (o sea, si falló), mostrarlo ayuda para depurar

    • Para mí basta con la información del directorio actual
      Solo hace falta cambiar el color del prompt según el último comando haya tenido éxito o no
      La información adicional se puede consultar aparte cuando haga falta

  • Me da curiosidad conocer la distribución por edades de los usuarios de Starship
    Personalmente, con el tiempo he perdido mucho interés en personalizar prompts
    Llegué a la conclusión de que, por más elaborado que esté, el 90% de la información que muestra un prompt es innecesaria el 90% del tiempo
    De hecho, demasiada información se siente como ruido visual y al final el cerebro la ignora, hasta el punto de olvidar que esa información está ahí
    La información realmente importante tiene límites en un prompt; por ejemplo, que te indique que cambió la rama de Git no te dice qué archivos cambiaron, así que al final igual necesitas ejecutar otro comando

    • Tengo más de 20 años de experiencia desarrollando
      Me resulta muy útil tener información de Git en el prompt
      No te da todos los detalles finos, pero está bueno que te recuerde que hay cambios sin commitear o algún stash olvidado
      Starship me pareció interesante y lo instalé de inmediato, pero partes como mostrar versiones de herramientas me parecieron demasiado ruidosas y al final lo desinstalé
      Opciones como el tiempo de los comandos o el estado de éxito/fracaso me gustaron, pero lo que dejaba no compensaba el esfuerzo de mantener una configuración compleja

    • Como senior con más de 25 años en la industria, no suelo usar herramientas modernas muy vistosas
      Antes usaba un PS1 muy simple que mostraba apenas la hora, mi cuenta, el host al que estaba conectado y la ruta actual, como <pre><code>export PS1="[\033[1;32m][\t \u@\h \w]\$[\033[0m]"</code></pre>
      Probé varios prompts más sofisticados, pero casi no me ayudaron
      Ahora llevo varios años usando Starship sin problema
      Lo personalicé para que muestre solo lo necesario, y así lo uso de forma muy rápida y cómoda

    • Una de las partes más útiles de mi personalización del prompt es mostrar el exit status del comando anterior
      A veces un comando falla sin mostrar ningún mensaje de error, así que tener un indicador de fallo es una gran señal
      Eso sí, para que no sea ruido, solo lo muestro cuando falla
      Ejemplo: <pre><code>» true » false (last command returned 1.)</code></pre>
      Si terminó por una señal (signal), también lo traduzco y muestro, algo como "last command exited on SIGSEGV"
      También es útil al revés, cuando un programa imprime mensajes de error pero termina con código de éxito

    • Como usuario "very senior" con décadas de experiencia usando UNIX, prefiero el modo minimal de Starship porque se ve limpio
      En el pasado sufrí durante años con varias configuraciones de zsh, pero ahora casi no hay molestias
      Si esperabas que los usuarios de Starship fueran pura gente nueva de JavaScript abusando de los emoji, aquí tienes un ejemplo contrario como yo

    • Viéndolo más ampliamente, es un fenómeno que aplica a todo el entorno de cómputo
      De joven me obsesionaba con armar mi propio sistema con Gentoo, flags de optimización para CPU, gestor de ventanas, alias y funciones del bashrc, e incluso el prompt
      Ese trabajo de optimización en sí mismo fue una experiencia bastante útil como parte del crecimiento
      Si lo comparas con la carpintería, cuando eres principiante pasas la mayor parte del tiempo fabricando y afinando herramientas o trucos; en algún momento, el enfoque cambia hacia el trabajo real
      Todavía me gusta Linux, pero con la realidad de andar ocupado ahora priorizo el “trabajo” más que la eficiencia o el acabado, así que simplemente uso Debian y KDE como entorno base

  • No me gustan los adornos innecesarios ni el exceso de información, así que prefiero un entorno de terminal minimalista
    Pero Starship muestra bien el contexto cuando hace falta y permite una personalización muy detallada
    Mi prompt por defecto solo muestra el directorio actual, la hora y un %
    Si ciertas variables de entorno (KUBECONFIG, OS_CLOUD, etc.) están definidas, entonces también incluye esa información según corresponda
    Versiones de lenguajes como Go o Python también se muestran automáticamente según el contexto de uso
    Starship hace que este tipo de configuración sea realmente fácil, y funciona tal cual con una sobrecarga mínima, sin tener que armar una configuración compleja de plugins de zsh
    Especialmente si lo usas junto con evalcache, la velocidad de inicialización también es muy rápida

  • Como fan de Starship, algunos comentarios
    El hecho de que esté desarrollado en Rust de forma segura y rápida, y que sea un binario compilado, hace que el rendimiento sea mucho mejor que el de powerline basado en Python, ohmybash basado en scripts de shell, ohmyzsh basado en zshell y spaceship
    Obviamente soporta zsh, bash, sh y fish, pero también MS Windows CMD y Powershell
    Poder administrar el prompt de todos los sistemas con un solo archivo de configuración es algo casi único
    Si hay demasiada información, se puede simplificar fácilmente, y también se pueden desactivar los íconos
    Con cerca de 100 módulos, prácticamente no hay límite para la personalización

  • No entiendo por qué Starship se promociona como “minimal”
    En realidad tiene muchísimas funciones, y cuando ves cómo se usa en la práctica suelen ser prompts enormes llenos de adornos
    Yo lo uso así de simple

    <pre><code>: ▶</code></pre>

    Si de verdad quieres algo minimalista, no necesitas a fuerza un framework de personalización como este

    • Frente a otros shells y prompts, una ventaja de Starship es que su archivo de configuración sigue siendo bastante intuitivo incluso cuando aumenta la complejidad

    • Puedes desactivar todas las funciones
      Yo ahora uso una configuración minimalista con esta pinta

      <pre><code>format = """ $username\ $hostname\ $shlvl\ $directory\ $git_branch\ $git_commit\ $git_state\ $git_metrics\ $git_status\ $package\ $python\ $rust\ $env_var\ $custom\ $cmd_duration\ $jobs\ $time\ $status\ $shell\ $character"""</code></pre>
    • Al final, Starship sí puede usarse de forma minimalista, pero en esencia es un prompt maximalista que puede incluir la mayor cantidad posible de información y contenido
      Creo que estaría bien reconocer ese punto

    • Yo uso una flecha todavía más delgada

      <pre><code>PROMPT='%{%F{red}%}%~ %{%F{yellow}%}% › %{%F{reset_color}%}%'</code></pre>

      Se ve limpio, simple y minimalista

  • Me sorprende ver reacciones que confunden la capacidad de personalización con maximalismo
    Los valores por defecto son algo excesivos, pero puedes recortarlos tanto como quieras
    Yo trabajo con varios entornos de AWS y distintos runtimes, y la información de contexto en el prompt sí me ayuda bastante en la práctica
    Personalmente llevo mucho tiempo usando la combinación de Starship + Nushell

  • Me gusta porque se instala una sola vez y luego ya no hace falta tocarlo
    Yo quiero ver de inmediato si el shell está en node 20 o 22, o si rust está en stable o nightly
    Me deja ver todo eso sin trabajo extra, y por eso me satisface

  • Sin relación directa con Starship, me molesta un fenómeno en el prompt de zsh donde al presionar Enter el cursor se mueve momentáneamente al inicio de la línea y se produce un “flash”
    Con prompts ultra-rápidos se nota menos, pero si el prompt hace aunque sea un poco de trabajo, el efecto se ve mucho
    Lo he observado igual en varias terminales (gnome-terminal, wezterm, kitty, alacritty, xterm)
    La única donde no ocurre es en la terminal urxvt
    Consulta la reproducción en video
    Me da curiosidad saber la causa de este efecto de flash y cómo evitarlo

  • Si haces que el prompt consulte información poco útil como git status cada vez que se renderiza, aunque sea cada 100 ms, eso termina causando una pérdida invisible de productividad
    La terminal debería ser una herramienta de memoria reactiva, y habría que evitar que se convierta en adorno innecesario
    El problema es que nos preocupamos por la velocidad de ejecución del código, pero somos tolerantes con la latencia al escribir

    • Starship es realmente rápido
      Solo tarda unos pocos ms en recopilar los datos necesarios, y es fácil controlar qué información extraer
      Con otras herramientas que he usado antes siempre me molestaban los retrasos notorios, pero con Starship la diferencia se siente clarísima

    • Los 100 ms que percibe una persona y los 100 ms de optimización de CPU son cosas totalmente distintas
      Yo me pongo a pensar qué conviene más optimizar: si que el prompt tarde 100 ms en mostrar la rama o el estado de git y eso rompa el “flow”, o que yo tarde más en escribir directamente el comando
      Unos cuantos ms dedicados a funciones de conveniencia razonables valen totalmente la pena
      Al final se trata de encontrar un punto de equilibrio entre comodidad y minimalismo
      Tanto el minimalismo extremo como el exceso de adornos pueden terminar siendo ineficientes

    • Como me molestaba esa latencia, parcheé la terminal kitty para mover el prompt de Starship a una barra de estado inferior, como la modeline de vim o emacs
      La modeline se actualiza de forma asíncrona, así que la respuesta del prompt es muy rápida
      La desventaja es que hay que parchear kitty manualmente, y no lo he podido probar fuera de mi entorno Linux personal
      Consulta el proyecto de parche relacionado

    • Me pregunto si sería posible que una herramienta de prompt, al estilo de una TUI, modifique de forma asíncrona el área del prompt incluso después de haber devuelto por completo la salida del prompt (por ejemplo, que kubectl, git o aws cli agreguen información 200 ms después)
      Así el usuario podría empezar a escribir el siguiente comando sin esperar, y la información adicional aparecería después de manera natural

    • A veces pienso que, más que optimizar la ejecución del código, el problema es que al aumentar la cantidad de capas (layer) que usamos se vuelve más difícil optimizar la latencia de entrada del prompt

  • Al entrar al sitio oficial sentí que faltaba una explicación clara de por qué debería usar Starship
    Mi personalización reciente del prompt muestra de un vistazo lo siguiente

    <pre><code>- resultado del último comando (color: verde, rojo, morado)
  • user@host:currentDirectory
  • (si estoy dentro de un repo) rama actual y resumen de git status, trabajos en segundo plano</code></pre>
    Si el último comando tuvo éxito lo muestra en verde, si falló en rojo y si fue interrumpido en morado
    Yo podría ser su usuario objetivo, pero en la página principal no me queda claro el “por qué” usarlo ni qué mejora concreta ofrece