- 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
Yıllardır çok iyi kullandığım bir şeyin burada paylaşılması hoş geldi :)
Zsh teması olarak sunulduğu zamandan beri kullanıyordum... hahaha
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
<pre><code>: ▶</code></pre>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
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
<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>Ben şu anda buna benzer minimal bir yapı kullanıyorum
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
<pre><code>- son komutun sonucu(renk: yeşil, kırmızı, mor)Son dönemdeki prompt özelleştirmem şu bilgileri tek bakışta gösteriyor
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ı