8 puan yazan GN⁺ 2025-06-25 | 2 yorum | WhatsApp'ta paylaş
  • Starship, çeşitli kabuk ortamlarında kullanılabilen hafif, yüksek performanslı ve esnek bir açık kaynak prompt projesidir
  • Bash, Zsh, Fish, Powershell, Tcsh gibi başlıca kabukların çoğunu destekleyen geniş uyumluluk sunar
  • Her kabuk için başlatma betiğini kolayca ekleyerek yapılandırma ve uygulama yapılabilir
  • Rust ile yazılmıştır; yüksek hız ve güvenlik sağlar, tek bir ikili dosya olarak sunulur
  • En küçük ayrıntısına kadar özelleştirilebilir
  • Android, BSD, Linux, macOS, Windows gibi çeşitli platformlarda ortak ortam yapılandırmasını destekleyerek üretkenlik ve kullanım kolaylığı sunar

Starship açık kaynak projesi

  • Starship, performans ve özelleştirmeyi aynı anda sunan bir prompt aracıdır; çeşitli işletim sistemleri ve kabuklarda kullanılabilir
  • Mevcut ağır promptlarla karşılaştırıldığında hızlı tepki süresi ve düşük kaynak kullanımı ile öne çıkar; yüksek özelleştirilebilirliği sayesinde geliştirici üretkenliğini artırmaya yardımcı olur

Her kabuk ortamında yapılandırma yöntemi

  • Bash:
    • ~/.bashrc dosyasının sonuna eval "$(starship init bash)" kodunu ekleyin
  • Fish:
    • ~/.config/fish/config.fish dosyasının sonuna starship init fish | source ekleyin
  • Zsh:
    • ~/.zshrc dosyasının sonuna eval "$(starship init zsh)" kodunu ekleyin
  • Powershell:
    • Microsoft.PowerShell_profile.ps1 dosyasına Invoke-Expression (&starship init powershell) ekleyin
    • PowerShell profil dosyasının konumu $PROFILE değişkeniyle kontrol edilebilir
  • Ion:
    • ~/.config/ion/initrc dosyasına eval $(starship init ion) kodunu girin
  • Elvish:
    • Yalnızca v0.18 ve üzeri sürümler desteklenir
    • ~/.elvish/rc.elv dosyasına eval (starship init elvish) kodunu ekleyin
  • Tcsh:
    • ~/.tcshrc dosyasına eval \starship init tcsh`` kodunu girin
  • Nushell:
    • Yalnızca v0.96 ve üzeri desteklenir; yapılandırma yönteminin ileride değişme ihtimali vardır
    • Yapılandırma dosyası yolu $nu.config-path komutuyla kontrol edilebilir
    • İlgili yola starship init nu | save -f ... koduyla uygulanır
  • Xonsh:
    • ~/.xonshrc dosyasının sonuna execx($(starship init xonsh)) kodunu girin
  • Cmd (Clink gerekir):
    • Clink v1.2.30 ve üzeri gerekir
    • starship.lua dosyasını oluşturup Clink betik dizinine kaydedin
    • İçine load(io.popen('starship init cmd'):read("*a"))() kodunu ekleyin

2 yorum

 
tujuc 2025-06-25

Yıllardır çok iyi kullandığım bir şeyin burada paylaşılması hoş geldi :)
Zsh teması olarak sunulduğu zamandan beri kullanıyordum... hahaha

 
GN⁺ 2025-06-25
Hacker News görüşü
  • Ben maksimalist promptları seven bir kullanıcıyım ve geliştirme makinesi kurulumlarında Starship ile birlikte Shell Bling Ubuntu kurulumunu sık kullanıyorum
    Ama bu tarz herkese uygun değil
    Yalnızca en yoğun bilgileri eklemek istiyorsanız, promptta sadece göründüğü zamanı ve son komutun çalışma süresini göstermeyi öneririm
    Sadece bu iki bilgi bile neyin ne zaman olduğunu kolayca anlamayı sağlar ve sonradan debug ya da kayıt tutma açısından büyük avantaj sunar
    Bu yaklaşım, Michael W. Lucas'ın 『Networking for System Administrators』 kitabından aldığım bir ipucu; ağ temellerini öğrenmek isteyen geliştiricilere bu kitabı da sık öneririm
    Nerd puanı artırmak istiyorsanız zamanı UNIX epoch'a göre saniye cinsinden gösterin
    Böylece zaman farkı hesaplamak çok kolay olur
    Shell Bling Ubuntu repo bağlantısına bakabilirsiniz

    • nushell'de bu bilgiler zaten varsayılan olarak geliyor
      Geçmişte(history) komutun başlangıç zaman damgası, çalışma süresi, geçerli dizin, çıkış durumu gibi ayrıntıları görebiliyorsunuz
      Komutlar arasındaki zaman farkını göstermenin yanı sıra komutun kendi çalışma süresini de doğrudan gösterdiği için çok kullanışlı

    • Prompt özelleştirmesini neredeyse hiç yapmadım
      Çünkü emacs kullanıyorsanız istediğiniz bilgilerin çoğunu editörde zaten görebiliyorsunuz
      Yalnızca pair programming gibi başkalarına göstermem gerektiğinde Starship kuruyorum; ayrıca ayrı bir terminal uygulaması açıp kendi ayarlarımı göstermeme de gerek kalmıyor

    • Önceki komutun exit code'unu da benzer nedenlerle çok faydalı bir bilgi olarak görüyorum

    • Geçerli saati insanın kolay okuyacağı bir formatta göstermek de epey yardımcı oluyor
      Bir de önceki komutun çıkış durumu 0 değilse yani başarısız olduysa bunu göstermek debug açısından faydalı

    • Benim için yalnızca geçerli dizin bilgisi yeterli
      Son komutun başarılı ya da başarısız olmasına göre prompt renginin değişmesi yeterli
      Ek bilgileri gerekince ayrıca bakarım

  • Starship kullanıcılarının yaş dağılımını merak ediyorum
    Benim için zaman geçtikçe prompt özelleştirmesine olan ilgi ciddi biçimde azaldı
    Promptu ne kadar ince ayarlarsanız ayarlayın, görünen bilginin %90'ı zamanın %90'ında gereksiz geliyor sonucuna vardım
    Hatta fazla bilgi görsel gürültüye dönüşüyor ve beyin onu yok saymaya başlıyor; sonunda orada olduğunu bile unutuyorsunuz
    Gerçekten önemli bilgilerde ise promptun sınırları var; örneğin değişmiş bir Git branch'i olduğunu görmek hangi dosyaların değiştiğini söylemiyor, dolayısıyla yine ek komut çalıştırmanız gerekiyor

    • 20 yılı aşkın geliştirme deneyimim var
      Promptta Git bilgisinin olmasını çok faydalı buluyorum
      İnce ayrıntıları vermese de commit edilmemiş değişiklikler ya da unutulmuş stash'ler olduğunu hatırlatması güzel
      Starship ilgimi çektiği için hemen kurdum ama araç sürümü gösterimi gibi kısımlar bana fazla gürültülü geldi ve sonunda kaldırdım
      Komut zamanlaması veya başarı/başarısızlık durumu gibi seçenekler hoştu ama karmaşık özel yapılandırmayı yönetmenin zahmetine kıyasla getirisi azdı

    • Sektörde 25 yıldan fazla deneyimi olan biri olarak gösterişli yeni araçları pek kullanmam
      Eskiden <pre><code>export PS1="[\033[1;32m][\t \u@\h \w]\$[\033[0m]"</code></pre> gibi zamanı, kendi hesabımı, bağlandığım host'u ve geçerli yolu gösteren çok basit bir PS1 kullanırdım
      Daha gelişmiş promptları da defalarca denedim ama neredeyse hiç yardımcı olmadılar
      Şu anda birkaç yıldır Starship'i memnuniyetle kullanıyorum
      Yalnızca ihtiyacım olan bilgileri en aza indirecek şekilde özelleştirdim; çok hızlı ve rahat kullanılıyor

    • Prompt özelleştirmemdeki en faydalı parçalardan biri bir önceki komutun exit status'unu göstermesi
      Bazen komut hiçbir hata mesajı vermeden başarısız oluyor; böyle durumlarda başarısızlık göstergesi önemli bir sinyal
      Ama normalde gürültü olmasın diye sadece başarısız olduğunda gösteriyorum
      Örnek: <pre><code>» true » false (last command returned 1.)</code></pre>
      Signal ile sonlandıysa bunu da çevirip gösteriyorum; mesela "last command exited on SIGSEGV"
      Tersine, program hata mesajı yazdırsa bile başarı koduyla çıkarsa yine faydalı oluyor

    • On yıllarca UNIX kullanmış "very senior" bir kullanıcı olarak Starship'in minimal mode'unu temiz bulduğum için tercih ediyorum
      Geçmişte yıllarca çeşitli zsh ayarlarıyla uğraştım ama şimdi neredeyse hiç zahmet yok
      Eğer Starship kullanıcılarının hepsinin JavaScript'te emoji yağdıran yeni nesil insanlar olacağını varsayıyorsanız, benim gibi birinin de olduğunu söylemiş olayım

    • Daha geniş açıdan bakınca bu durum tüm bilişim ortamına uygulanabiliyor
      Gençken Gentoo ile işletim sistemimi kendim kurar, CPU optimizasyon bayraklarına, pencere yöneticisine, bashrc alias ve function'larına, prompta kadar her şeye takılırdım
      Bu tür optimizasyonlarla uğraşmak gelişim sürecinde gerçekten faydalı bir deneyimdi
      Ahşap işçiliğine benzetirsek, başlangıçta zamanın çoğunu aletler ve küçük numaralar yapıp bunları iyileştirerek geçirirsiniz; bir noktadan sonra ise odağı gerçek işe çevirirsiniz
      Hâlâ Linux'u seviyorum ama yoğun hayatta verim ve kusursuzluk peşinde koşmaktansa "iş"i öncelediğim için artık sadece Debian ve KDE ile varsayılan ortamı kullanıyorum

  • Gereksiz süsleri ya da aşırı bilgiyi sevmediğim için minimal bir terminal ortamını tercih ediyorum
    Ama Starship gerektiğinde bağlamı iyi gösteriyor ve ayrıntılı biçimde özelleştirilebiliyor
    Varsayılan promptum yalnızca geçerli dizini, saati ve bir % işaretini gösteriyor
    Belirli environment variable'lar ayarlıysa(KUBECONFIG, OS_CLOUD vb.) buna uygun bilgileri de ekliyor
    Go, Python gibi dil sürümlerini de kullanım bağlamına göre otomatik gösteriyor
    Starship bunu gerçekten çok kolay hale getiriyor ve karmaşık zsh eklenti kurulumları olmadan, minimum ek yükle çalışıyor
    Özellikle evalcache ile birlikte kullanınca başlangıç hızı da çok iyi oluyor

  • Bir Starship hayranı olarak birkaç yorum
    Rust ile güvenli ve hızlı biçimde geliştirilmiş olması ve derlenmiş bir binary sunması sayesinde performansı, Python tabanlı powerline'dan, shell script tabanlı ohmybash'ten, zshell tabanlı ohmyzsh ve spaceship'ten çok daha iyi
    zsh, bash, sh, fish desteği zaten var; ayrıca MS Windows CMD ve Powershell'i de destekliyor
    Tüm sistemlerdeki promptları tek bir config dosyasıyla yönetebilmek neredeyse benzersiz
    Bilgi fazla gelirse kolayca sadeleştirebiliyor, ikonları da kapatabiliyorsunuz
    Yaklaşık 100 modülle özelleştirmenin sınırı neredeyse yok

  • Starship'in neden "minimal" diye pazarlandığını anlamıyorum
    Gerçekte çok çeşitli özelliği var ve insanların fiilen kullandığı şey de her türlü süsle dolu dev promptlar
    Ben şöyle çok basit kullanıyorum

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

    Gerçekten minimal bir şey istiyorsanız böyle bir özelleştirme çatısına zaten ihtiyacınız yok

    • Diğer shell ve promptlarla kıyaslandığında Starship'in yapılandırma dosyasının, karmaşıklık artsa bile, oldukça sezgisel kalması bir avantaj

    • Tüm özellikleri devre dışı bırakabilirsiniz
      Ben şu anda buna benzer minimal bir yapı kullanıyorum

      <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>
    • Starship sonuçta minimal kullanılabilir ama özünde mümkün olduğunca çok bilgi ve içerik taşıyabilen maksimalist bir prompt
      Bence bunu kabul etmek iyi olur

    • Ben bundan da ince bir ok kullanıyorum

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

      Temiz, sade ve minimal bir çözüm

  • Özelleştirilebilir olmakla maksimalizmin karıştırılmasına şaşırıyorum
    Varsayılan ayarlar biraz abartılı olabilir ama isterseniz istediğiniz kadar sadeleştirebilirsiniz
    Ben birden fazla AWS ortamında ve çeşitli runtime'larda çalışıyorum; prompttaki bağlam bilgisi gerçekten çok yardımcı oluyor
    Şahsen uzun zamandır her zaman Starship + Nushell ikilisini kullanıyorum

  • Bir kez kurduktan sonra artık dokunmak gerekmediği için seviyorum
    Shell'in node 20 mi 22 mi kullandığını, rust'ın stable mı nightly mi olduğunu anında görmek istiyorum
    Bunları ek iş çıkarmadan hemen gösterdiği için memnunum

  • Starship'le doğrudan ilgili değil ama zsh promptunda Enter'a bastığımda imlecin bir anlığına satırın başına gidip "flash" yapması beni rahatsız ediyor
    Ultra-fast promptlarda daha az fark ediliyor ama promptta en ufak bir işlem bile olsa bu durum çok belirginleşiyor
    Bunu çeşitli terminallerde(gnome-terminal, wezterm, kitty, alacritty, xterm) aynı şekilde gözlemledim
    Bu sorun yalnızca urxvt terminalinde olmuyor
    Video ile tekrar üretim bağlantısına bakabilirsiniz
    Bu flash etkisinin nedenini ve nasıl kaçınılabileceğini merak ediyorum

  • git status gibi pek de gerekli olmayan bilgileri prompt her render edildiğinde, örneğin her 100ms'de bir kontrol etmek görünmeyen bir verim kaybına yol açıyor
    Terminal tepki veren bir hafıza aracı olmalı; gereksiz süse dönüşen şeylerden kaçınılmalı
    Kod çalıştırma hızını önemserken kendi yazma gecikmemize karşı fazla hoşgörülü olmamız sorunlu

    • Starship gerçekten çok hızlı
      Gerekli veriyi toplaması yalnızca birkaç ms sürüyor ve hangi bilgilerin çıkarılacağını kolayca kontrol edebiliyorsunuz
      Şimdiye kadar kullandığım diğer araçlarda uzun hissedilen gecikmeler yüzünden hep rahatsız olurdum ama Starship'te fark belirgin biçimde hissediliyor

    • İnsanların hissettiği 100ms ile CPU optimizasyonundaki 100ms tamamen farklı şeyler
      Bence promptun git branch ya da durum göstermek için 100ms harcamasıyla akışın bozulduğunu söylemek, benim komutu elle yazarken harcadığım daha uzun süreyle kıyaslanmalı
      Uygun düzeydeki kullanım kolaylığı için birkaç ms'lik maliyet fazlasıyla kabul edilebilir
      Sonuçta mesele kullanım kolaylığı ile minimalizm arasında denge kurmak
      Aşırı minimalizm de aşırı süsleme de verimsizliğe yol açabilir

    • Bu gecikme beni rahatsız ettiği için kitty terminalini patch'leyip Starship promptunu vim ya da emacs'teki gibi alttaki bir status bar'a, yani modeline taşıyarak kullanıyorum
      Modeline asenkron güncellendiği için prompt tepkisi çok hızlı oluyor
      Dezavantajı, kitty'yi kendiniz patch'lemek zorunda olmanız ve benim bunu kişisel Linux ortamım dışında test etmemiş olmam
      İlgili patch projesi bağlantısına bakabilirsiniz

    • Prompt araçlarının, bir TUI gibi, prompt çıktısını tamamen verdikten sonra bile prompt alanını asenkron biçimde güncelleyip düzenlemesi mümkün mü diye merak ediyorum; örneğin kubectl, git, aws cli bilgilerini 200ms sonra eklemesi gibi
      Böyle olursa kullanıcı beklemeden hemen sonraki komutu yazabilir ve ek bilgiler sonradan doğal şekilde görünebilir

    • Kod çalıştırmayı optimize etmekten çok, kullandığımız katmanlar çoğaldıkça prompt giriş gecikmesini optimize etmenin pratikte daha zor hale geliyor olmasından şüpheleniyorum

  • Resmî web sitesine gittiğimde neden Starship kullanmam gerektiğine dair net bir açıklama göremedim
    Son dönemdeki prompt özelleştirmem şu bilgileri tek bakışta gösteriyor

    <pre><code>- son komutun sonucu(renk: yeşil, kırmızı, mor)
  • user@host:currentDirectory
  • (repo içindeyse) mevcut branch ve git status özeti, arka plan işleri</code></pre>
    Son komut başarılıysa yeşil, başarısızsa kırmızı, kesintiye uğradıysa mor gösteriyorum
    Belki onların hedef kullanıcısı ben olabilirim ama ana sayfa bana neden kullanmam gerektiğini ve neyi iyileştirdiğini net biçimde anlatamadı