- 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
Qué curioso ver publicado algo que llevo años usando bien :)
Lo uso desde cuando se ofrecía como tema de Zsh... jajajaja
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 codedel comando anterior también es información muy útil por razones parecidas a las de arribaMostrar 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
stasholvidadoStarship 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
PS1muy 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 statusdel comando anteriorA 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 promptEse 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 correspondaVersiones 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”
<pre><code>: ▶</code></pre>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
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
<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>Yo ahora uso una configuración minimalista con esta pinta
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
stableonightlyMe 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
urxvtConsulta 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 statuscada vez que se renderiza, aunque sea cada 100 ms, eso termina causando una pérdida invisible de productividadLa 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,gitoaws cliagreguen 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 promptAl entrar al sitio oficial sentí que faltaba una explicación clara de por qué debería usar Starship
<pre><code>- resultado del último comando (color: verde, rojo, morado)Mi personalización reciente del prompt muestra de un vistazo lo siguiente
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