Starship pro Widláky

Starship je cross-shell prompt napsaný v Rustu co vám obohatí váš shell. Jak to může vypadat se dozvíte hned na úvodní stránce projektu.

The minimal, blazing-fast, and infinitely customizable prompt for any shell!

Starship je multiplatformní a multi-shellový, ale tady se budeme zabývat instalací pro cmd na windows.

Samotnou instalaci můžete provést několika způsoby. Prvním způsobem je stažení klasického msička z githubu starshipu a normálně ho nainstalovat. Nebo můžete být víc cool a použít Winget. Winget je pokus Microsoftu o "balíčkovací systém" přes příkazovou řádku. Někdo by si mohl říct že to bude jako Debianí apt nebo Fedorácký yum. Ne. Jediné co to udělá, je to, že stáhne msi soubor a spustí ho. 🙂

winget install --id Starship.Starship

Po úspěšné instalaci je nutné stáhnout Clink. Jelikož cmd je trochu prehistorie, potřebuje obohatit ještě o trošku více. Clink přinese do cmd opravdové doplňování a historii.

Clink combines the native Windows shell cmd.exe with the powerful command line editing features of the GNU Readline library, which provides rich completion, history, and line-editing capabilities. Readline is best known for its use in the Unix shell Bash, the standard shell for Mac OS X and many Linux distributions.

Ze stránek projektu stáhněte a nainstalujte poslední verzi Clinku.

Jak tohle budete mít, tak je potřeba vytvořit soubor starship.lua, který umístíte do %LocalAppData%\clink\. Obsahem souboru bude následující:

load(io.popen('starship init cmd'):read("*a"))()

Teď když spustíte čerstvé cmd, tak uvidíte následující.

Nebo něco takového. (v prvním případě je to přes Microsoft Terminál, v druhém případě je to čisté cmd)

Tak to už vám běží Starship. 🙂 Ale furt to nevypadá tak pěkně jako na stránkách Starshipu.

V první řadě je potřeba doinstalovat font a to Nerd Font.

Tady to bude trochu divočejší. Potřebujeme vybrat font, který bude umět zobrazení různých symbolů jako vidíme na obrázku výše.

Pokud používám Windows Terminal aplikaci, nainstaloval jsem a mám nastavený font Caskaydia Cove Nerd Font. Respektive CaskaydiaCove Nerd Font Mono.

Blbé je, že klasické cmd ho neumí použít. Pro tento případ jsem použil font 3270 Nerd Font a v cmd ho nastavil. (ttf soubory)

Potvrďte, změní se font konzole. Zároveň se už korektně zobrazí základní preset Starshipu a uvidíte zelenou tučnou špidlatou závorku evokující šipku doprava. 🙂

Tohle ale ještě furt není to co chceme. Teď ještě potřebujeme nějaký pěkný preset. Můžeme použít Bracketed Segments.

Instalaci provedeme přes cmd.

starship preset bracketed-segments > %userprofile%/.config/starship.toml

Spusťte nové cmd a když půjdete někam, kde může něco zajímavého říct, tak to zobrazí v nainstalovaném presetu. V mém případě jsem spustil cmd v Java Scriptovém projejktu.

Pro klasické cmd:

Pro cmd přes Windows Terminal:

Příkazová řádka mě informuje, že se nacházím ve větvi master a verze nodejs je 16. Co vám bude kontextově napovídáno je nakonfigurováno ve starship.toml, který jsme vytvářeli výše.

[aws]
format = '\[[$symbol($profile)(\($region\))(\[$duration\])]($style)\]'

[bun]
format = '\[[$symbol($version)]($style)\]'

[c]
format = '\[[$symbol($version(-$name))]($style)\]'

[cmake]
format = '\[[$symbol($version)]($style)\]'

[cmd_duration]
format = '\[[⏱ $duration]($style)\]'

[cobol]
format = '\[[$symbol($version)]($style)\]'

[conda]
format = '\[[$symbol$environment]($style)\]'

[crystal]
format = '\[[$symbol($version)]($style)\]'

[daml]
format = '\[[$symbol($version)]($style)\]'

[dart]
format = '\[[$symbol($version)]($style)\]'

[deno]
format = '\[[$symbol($version)]($style)\]'

[docker_context]
format = '\[[$symbol$context]($style)\]'

[dotnet]
format = '\[[$symbol($version)(? $tfm)]($style)\]'

[elixir]
format = '\[[$symbol($version \(OTP $otp_version\))]($style)\]'

[elm]
format = '\[[$symbol($version)]($style)\]'

[erlang]
format = '\[[$symbol($version)]($style)\]'

[gcloud]
format = '\[[$symbol$account(@$domain)(\($region\))]($style)\]'

[git_branch]
format = '\[[$symbol$branch]($style)\]'

[git_status]
format = '([\[$all_status$ahead_behind\]]($style))'

[golang]
format = '\[[$symbol($version)]($style)\]'

[haskell]
format = '\[[$symbol($version)]($style)\]'

[helm]
format = '\[[$symbol($version)]($style)\]'

[hg_branch]
format = '\[[$symbol$branch]($style)\]'

[java]
format = '\[[$symbol($version)]($style)\]'

[julia]
format = '\[[$symbol($version)]($style)\]'

[kotlin]
format = '\[[$symbol($version)]($style)\]'

[kubernetes]
format = '\[[$symbol$context( \($namespace\))]($style)\]'

[lua]
format = '\[[$symbol($version)]($style)\]'

[memory_usage]
format = '\[$symbol[$ram( | $swap)]($style)\]'

[nim]
format = '\[[$symbol($version)]($style)\]'

[nix_shell]
format = '\[[$symbol$state( \($name\))]($style)\]'

[nodejs]
format = '\[[$symbol($version)]($style)\]'

[ocaml]
format = '\[[$symbol($version)(\($switch_indicator$switch_name\))]($style)\]'

[openstack]
format = '\[[$symbol$cloud(\($project\))]($style)\]'

[package]
format = '\[[$symbol$version]($style)\]'

[pulumi]
format = '\[[$symbol$stack]($style)\]'

[purescript]
format = '\[[$symbol($version)]($style)\]'

[python]
format = '\[[${symbol}${pyenv_prefix}(${version})(\($virtualenv\))]($style)\]'

[raku]
format = '\[[$symbol($version-$vm_version)]($style)\]'

[red]
format = '\[[$symbol($version)]($style)\]'

[ruby]
format = '\[[$symbol($version)]($style)\]'

[rust]
format = '\[[$symbol($version)]($style)\]'

[scala]
format = '\[[$symbol($version)]($style)\]'

[spack]
format = '\[[$symbol$environment]($style)\]'

[sudo]
format = '\[[as $symbol]\]'

[swift]
format = '\[[$symbol($version)]($style)\]'

[terraform]
format = '\[[$symbol$workspace]($style)\]'

[time]
format = '\[[$time]($style)\]'

[username]
format = '\[[$user]($style)\]'

[vagrant]
format = '\[[$symbol($version)]($style)\]'

[vlang]
format = '\[[$symbol($version)]($style)\]'

[zig]
format = '\[[$symbol($version)]($style)\]'

Tak a teď vám funguje Starship na Windows. 🙂


Pokud používáte PowerShell nemusíte instalovat Clink. Fonty pořešíte úplně stejně. V PowerShellu si vypíšete, kde se má nacházet konfigurační soubor.

echo $PROFILE

Dostanete něco ve smyslu ...\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1. Pokud soubor neexistuje, tak ho vytvořte a do něj přidejte a uložte:

Invoke-Expression (&starship init powershell)

Spusťte nový PowerShell. Možná na vás vyskočí chyba running scripts is disabled on this system. To bude asi nějaká bezpečnost nebo co. 🙂 Abychom se toho zbavili, musíme pustit PowerShell jako správce a spustit následující příkaz:

Set-ExecutionPolicy Unrestricted

Jak moc je to "velká bezpečnost díra" si musí každý zhodnotit sám.

Restartujeme PowerShell. Pokud už máme nastavené odpovídající písmo a jsme například v nodejs projektu, uvidíme opět kontextové informace.

Loading