8 pontos por GN⁺ 2025-06-25 | 2 comentários | Compartilhar no WhatsApp
  • Starship é um projeto open source de prompt com leveza, alto desempenho e flexibilidade para uso em diversos ambientes de shell
  • Oferece ampla compatibilidade com a maioria dos principais shells, incluindo Bash, Zsh, Fish, Powershell e Tcsh
  • Pode ser configurado e aplicado de forma simples adicionando scripts de inicialização para cada shell
  • Escrito em Rust, garante velocidade e segurança, sendo distribuído como um binário único
  • Permite personalização até nos menores detalhes
  • Suporta uma configuração de ambiente comum em várias plataformas, como Android, BSD, Linux, macOS e Windows, melhorando a produtividade e a facilidade de uso

Projeto open source Starship

  • Starship é uma ferramenta de prompt que combina desempenho e personalização, podendo ser usada em diversos sistemas operacionais e shells
  • Em comparação com prompts tradicionais mais pesados, destaca-se pela resposta rápida e pelo baixo uso de recursos, além de ajudar a aumentar a produtividade de desenvolvimento com seu alto nível de personalização

Como configurar em cada ambiente de shell

  • Bash:
    • Adicione o código eval "$(starship init bash)" ao final do arquivo ~/.bashrc
  • Fish:
    • Adicione starship init fish | source ao final do arquivo ~/.config/fish/config.fish
  • Zsh:
    • Adicione o código eval "$(starship init zsh)" ao final do arquivo ~/.zshrc
  • Powershell:
    • Adicione Invoke-Expression (&starship init powershell) ao arquivo Microsoft.PowerShell_profile.ps1
    • É possível verificar a localização do arquivo de perfil do PowerShell pela variável $PROFILE
  • Ion:
    • Insira o código eval $(starship init ion) no arquivo ~/.config/ion/initrc
  • Elvish:
    • Compatível apenas com a versão v0.18 ou superior
    • Adicione o código eval (starship init elvish) ao arquivo ~/.elvish/rc.elv
  • Tcsh:
    • Insira o código eval \starship init tcsh`` no arquivo ~/.tcshrc
  • Nushell:
    • Compatível apenas com a versão v0.96 ou superior, e o método de configuração poderá mudar futuramente
    • O caminho do arquivo de configuração pode ser verificado com o comando $nu.config-path
    • Aplique no caminho correspondente com o código starship init nu | save -f ...
  • Xonsh:
    • Insira o código execx($(starship init xonsh)) ao final do arquivo ~/.xonshrc
  • Cmd (requer Clink):
    • Requer Clink v1.2.30 ou superior
    • Crie o arquivo starship.lua e salve-o no diretório de scripts do Clink
    • Dentro dele, adicione o código load(io.popen('starship init cmd'):read("*a"))()

2 comentários

 
tujuc 2025-06-25

É engraçado ver isso aparecer agora, sendo que uso muito bem há anos :)
Uso desde quando era oferecido como tema de Zsh... hahaha

 
GN⁺ 2025-06-25
Opinião do Hacker News
  • Sou um usuário que gosta de prompts maximalistas e costumo usar o Shell Bling Ubuntu com Starship ao montar máquinas de desenvolvimento
    Ainda assim, esse estilo não serve para todo mundo
    Se você quiser adicionar só a informação mais densa possível, recomendo mostrar apenas a hora em que o prompt apareceu e a duração de execução do último comando
    Só com essas duas informações já dá para entender facilmente o que aconteceu e quando, e isso traz grandes vantagens depois para depuração ou manutenção de registros
    Essa abordagem é uma dica tirada de Networking for System Administrators, de Michael W. Lucas, livro que também costumo recomendar para desenvolvedores que querem aprender fundamentos de redes
    Se quiser ganhar ainda mais pontos nerd, mostre a hora em segundos no formato UNIX epoch
    Isso tem a vantagem de tornar muito fácil calcular deltas de tempo
    Veja o repositório Shell Bling Ubuntu

    • No nushell, esse tipo de informação já vem por padrão
      No histórico de execução (history), é possível ver detalhes como timestamp de início do comando, tempo de execução, diretório atual, status de saída e mais
      É muito prático porque ele mostra diretamente não só a diferença de tempo entre execuções, mas também o próprio tempo de execução do comando

    • Quase nunca personalizei o prompt
      Usando emacs, já consigo ver no editor todas as informações que quero
      Só configuro o Starship quando preciso mostrar algo para outra pessoa, como em pair programming, e deixo um aplicativo de terminal separado aberto para não precisar expor minha configuração pessoal

    • O código de saída do comando anterior também é uma informação muito útil, por motivos parecidos com os acima

    • Mostrar a hora atual em um formato legível para humanos também ajuda bastante
      E se o status de saída do comando anterior não for 0 (ou seja, em caso de falha), mostrar isso ajuda na depuração

    • Para mim, só a informação do diretório atual já basta
      Só preciso que a cor do prompt mude conforme o sucesso ou falha do último comando
      Informações extras podem ser consultadas separadamente quando necessário

  • Fiquei curioso sobre a distribuição etária dos usuários do Starship
    Pessoalmente, com o tempo fui perdendo grande interesse em customização de prompt
    Cheguei à conclusão de que, por mais elaborado que seja o prompt, 90% das informações exibidas são desnecessárias em 90% do tempo
    Na prática, informação demais acaba virando ruído visual, e o cérebro passa a ignorá-la, a ponto de você até esquecer que ela está ali
    Informações realmente importantes também têm limite no prompt; por exemplo, um indicador de que houve mudança na branch do Git não diz quais arquivos mudaram, então no fim ainda é preciso rodar comandos adicionais

    • Tenho mais de 20 anos de experiência em desenvolvimento
      Acho muito útil ter informações de Git no prompt
      Não dá para ver todos os detalhes, mas é ótimo para me lembrar de alterações não commitadas ou de um stash esquecido
      O Starship pareceu interessante e instalei na hora, mas coisas como exibição de versão de ferramentas me pareceram barulhentas demais, e no fim desinstalei
      Opções como tempo de comando e status de sucesso/falha eram boas, mas sobrou pouco valor diante do esforço de manter uma configuração customizada complexa

    • Como sênior com mais de 25 anos na área, não costumo usar ferramentas modernas chamativas
      Antigamente eu usava um PS1 bem simples, como <pre><code>export PS1="[\033[1;32m][\t \u@\h \w]\$[\033[0m]"</code></pre>, mostrando só hora, minha conta, host conectado e caminho atual
      Também tentei várias vezes outros prompts mais sofisticados, mas quase nunca ajudavam
      Hoje uso Starship há alguns anos com satisfação
      Personalizei para mostrar só o mínimo necessário, e ele é muito rápido e agradável de usar

    • Uma das partes mais úteis da customização do meu prompt é mostrar o exit status do comando anterior
      Às vezes um comando falha sem mostrar mensagem de erro, então esse indicador de falha é um grande sinal
      Ainda assim, ele só aparece quando houve falha, para não virar ruído no dia a dia
      Exemplo: <pre><code>» true » false (last command returned 1.)</code></pre>
      Se o encerramento ocorreu por sinal (signal), também mostro isso traduzido, como em "last command exited on SIGSEGV"
      Também é útil no caso oposto, quando um programa imprime mensagem de erro mas encerra com código de sucesso

    • Como usuário "very senior" com décadas de experiência em UNIX, prefiro o modo minimal do Starship porque ele é limpo
      No passado sofri durante anos com várias configurações de zsh, mas agora quase não tenho mais trabalho nenhum
      Se você imaginava que todo usuário de Starship fosse da geração nova que exagera em emoji no JavaScript, fica registrado que gente como eu também usa

    • De forma mais ampla, isso vale para o ambiente computacional como um todo
      Quando eu era mais novo, gostava de montar meu próprio sistema com Gentoo, ajustar flags de otimização de CPU, window manager, aliases e funções do bashrc, e até o prompt
      Esse tipo de trabalho de otimização em si acaba sendo uma experiência bastante útil no processo de crescimento
      Numa analogia com marcenaria, no começo você passa a maior parte do tempo criando e refinando ferramentas e truques; em algum momento, porém, o foco muda para o trabalho prático
      Ainda gosto de Linux, mas na correria da vida acabo priorizando o “trabalho” acima de eficiência ou refinamento, então uso Debian e KDE como ambiente padrão

  • Não gosto de enfeites desnecessários nem de excesso de informação, então prefiro um ambiente de terminal minimalista
    Ainda assim, o Starship mostra bem o contexto quando necessário e permite customização detalhada
    Meu prompt padrão mostra apenas diretório atual, hora e um %
    Quando certas variáveis de ambiente (KUBECONFIG, OS_CLOUD etc.) estão definidas, ele também inclui essas informações de forma apropriada
    Versões de linguagens como Go e Python também aparecem automaticamente conforme o contexto de uso
    O Starship facilita muito esse tipo de configuração e funciona com o mínimo de sobrecarga, sem exigir uma composição complicada de plugins de zsh
    Especialmente em conjunto com evalcache, a inicialização também fica muito rápida

  • Como fã do Starship, alguns comentários
    O fato de ser desenvolvido em Rust de forma segura e rápida, e distribuído como binário compilado, faz com que o desempenho seja muito melhor do que alternativas como powerline em Python, ohmybash em shell script, ohmyzsh em zshell e spaceship
    Além de zsh, bash, sh e fish, ele também suporta MS Windows CMD e Powershell
    Ser praticamente o único a permitir gerenciar o prompt de todos os sistemas a partir de um único arquivo de configuração é uma grande vantagem
    Se houver informação demais, é fácil simplificar, e os ícones também podem ser desativados
    Com cerca de 100 módulos, quase não há limite para a customização

  • Não entendo por que fazem marketing do Starship como algo “minimal”
    Na prática, ele tem uma enorme variedade de recursos, e o que se vê em uso são prompts gigantes com todo tipo de enfeite
    Eu uso algo bem simples assim

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

    Se você quer minimalismo de verdade, não precisa necessariamente de um framework de customização como esse

    • Em comparação com outros shells e prompts, o arquivo de configuração do Starship tem a vantagem de continuar bem intuitivo mesmo quando a complexidade aumenta

    • Dá para desativar todos os recursos
      Hoje eu uso uma configuração minimalista nesse estilo

      <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>
    • No fim, dá para usar o Starship de forma minimalista, mas em essência ele é um prompt maximalista, feito para comportar o máximo possível de informação e conteúdo
      Acho que seria bom reconhecer isso

    • Eu uso uma seta ainda mais fina do que essa

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

      Limpo, simples e minimalista

  • Fico surpreso com reações que confundem ser customizável com ser maximalista
    O padrão é um pouco exagerado, mas dá para reduzir o quanto quiser
    Eu trabalho em vários ambientes AWS e com runtimes diversos, então as informações de contexto no prompt realmente me ajudam bastante
    Pessoalmente, uso a combinação Starship + Nushell há muito tempo

  • Gosto porque basta instalar uma vez e depois não preciso mais mexer
    Eu quero ver de imediato se o shell está em node 20 ou 22, se o Rust está em stable ou nightly
    Como ele mostra essas coisas diretamente, sem trabalho extra, fico satisfeito

  • Independentemente do Starship, me incomoda um fenômeno no prompt do zsh em que, ao apertar Enter, o cursor se move momentaneamente para o começo da linha e ocorre um “flash”
    Em prompts ultra-fast isso aparece menos, mas quando o prompt faz qualquer coisinha, esse efeito fica muito visível
    Observei a mesma coisa em vários terminais (gnome-terminal, wezterm, kitty, alacritty, xterm)
    O único em que esse problema não acontece é o urxvt
    Veja a reprodução em vídeo
    Queria entender a causa desse flash e como evitá-lo

  • Se o prompt ficar consultando informações inúteis como git status toda vez que for renderizado, a cada 100 ms, isso acaba virando perda invisível de produtividade
    O terminal deveria ser uma ferramenta de memória responsiva, e é melhor evitar que ele vire adorno desnecessário
    O problema é que a gente se preocupa com velocidade de execução de código, mas acaba sendo tolerante com a latência na própria digitação

    • O Starship é realmente rápido
      Leva só alguns milissegundos para coletar os dados necessários, e é fácil controlar quais informações extrair
      Em outras ferramentas que usei, sempre me incomodava uma demora perceptível, mas com Starship a diferença na sensação de uso é nítida

    • Os 100 ms percebidos por uma pessoa e os 100 ms de otimização de CPU são coisas totalmente diferentes
      Na minha visão, quando o prompt leva 100 ms para mostrar branch ou status do Git, isso afeta mais o “flow” do que o tempo que eu mesmo gasto digitando comandos, então vale pensar no que faz mais sentido otimizar
      Alguns milissegundos gastos com funcionalidades convenientes são perfeitamente aceitáveis
      No fim, trata-se de encontrar um ponto de equilíbrio entre conveniência e minimalismo
      Tanto o minimalismo extremo quanto o excesso de enfeite podem levar à ineficiência

    • Esse atraso me incomodou tanto que eu acabei aplicando um patch no terminal kitty para mover o prompt do Starship para uma status bar inferior, como no vim ou no emacs
      A modeline é atualizada de forma assíncrona, então a resposta do prompt fica muito rápida
      A desvantagem é que é preciso aplicar patch no kitty manualmente, e eu não consegui testar fora do meu ambiente Linux pessoal
      Veja o projeto de patch relacionado

    • Fico curioso se uma ferramenta de prompt poderia funcionar como um TUI e modificar a área do prompt de forma assíncrona mesmo depois de já ter devolvido completamente a saída do prompt — por exemplo, kubectl, Git ou AWS CLI acrescentarem informação 200 ms depois
      Assim, o usuário poderia começar a digitar o próximo comando sem esperar, e as informações adicionais apareceriam naturalmente depois

    • Talvez o problema seja que, mais do que otimização da execução de código, o aumento no número de camadas (layer) que usamos torne de fato mais difícil otimizar a latência de entrada do prompt

  • Quando entrei no site oficial, senti falta de uma explicação clara de por que eu deveria usar Starship
    Minha customização recente de prompt mostra estas informações de relance

    <pre><code>- resultado do último comando (cor: verde, vermelho, roxo)
  • user@host:currentDirectory
  • (dentro de repositório) branch atual, resumo do git status e jobs em segundo plano</code></pre>
    Se o último comando teve sucesso, fica em verde; se falhou, em vermelho; se foi interrompido, em roxo
    Eu posso até ser o público-alvo deles, mas a homepage não me transmite claramente o “porquê” de usar nem quais melhorias concretas isso traria