Starship: 全新的跨 Shell Prompt 主題

Starship: 全新的跨 Shell Prompt 主題

jimchen5209

前言

各位還記得之前有介紹一系列的終端機自訂嗎?在 Linux 上,我們用了 zsh + oh-my-zsh + powerlevel10k。最近在更新這些工具時發現一件事,如果你們有在 Follow 他們的話應該知道我要說什麼了。沒錯,我要說的就是 powerlevel10k 停更了!

Powerlevel10k 的 Readme
Powerlevel10k 的 Readme

在 Powerlevel10k 的 Readme 的頂部,寫著四行字:

  • 該專案提供非常有限的支援
  • 不會再開發新功能
  • 大多數 BUGS 將不會修正
  • 幫助請求將被忽略

雖然這專案還沒被封存,但基本上不會再有開發動作了。我其實還覺得這主題挺好看的,但我也有想過要換個主題轉換一下風格,同時「接受」這個事實,尋找了許多不同的主題,正好在 Reddit 上看到 Starship,同時另一位作者也分享了這工具,就決定嘗試一下,發現其實不錯用,就來分享一下。

所以 Starship 是什麼?

根據 Starship 官方繁中文件

適合任何 shell 的最小、極速、無限客製化的提示字元!

  • 效率: 很快 – 非常非常 快! 🚀
  • 客製化: 全方面設定你的提示字元。
  • 通用性: 適用於任何 Shell 以及作業系統。
  • 智慧: 一目了然地顯示相關資訊。
  • 豐富的功能: 支援所有你喜歡的工具。
  • 易用: 安裝快速 – 幾分鐘內即可開始使用。

Starship 是一個輕量、快速、且提供高自訂性的命令行提示(Prompt)主題,使用 Rust 語言撰寫,支援大部分主流的 Shell,包括 Powershellbashzsh 還有 fish,並支援主流作業系統,包括 Windows、macOS、Linux。另外他也和 Powerlevel 10k 一樣支援 git 提示、程式語言版本提示顯示。

Starship 官方網站

安裝

本次安裝將介紹免系統管理員權限的安裝,並以主流的 Powershell、bash、zsh、fish 為例。

💡 官方預設的安裝方式是安裝到系統中,但我比較偏好安裝在使用者目錄底下,這樣就不需要系統管理員權限就能用了。

⚠️ 本文章之設定需要安裝 NerdFont 3 才能正常顯示。請參考之前的文章安裝或更新字型。不過和以前不一樣的是,這次請使用 NerdFont 字型,不要選擇 NerdFontMono 字型,否則圖示會超級小。

  • Windows
    直接透過 winget 安裝:
    1
    winget install --id Starship.Starship --installer-type zip

    💡 --installer-type zip 將下載 zip 檔案,並透過免安裝應用程式的方式安裝在使用者目錄中。

  • macOS / Linux
    執行以下命令:
    1
    curl -sS https://starship.rs/install.sh | sh -s -- -b ~/.local/bin
    並將 ~/.local/bin 加入 PATH 中
    • bash / zsh
      1
      export PATH="$HOME/.local/bin:$PATH"
    • fish
      1
      set -gx PATH "$HOME/.local/bin" $PATH

Shell 設定

接著在 Shell 中載入 Starship

⚠️ 請記得將其他主題(例如:oh-my-posh、powerlevel10k)從設定檔中移除。

  • Powershell (以 Powershell 7 為例)
    使用文字編輯器(例如:VSCode)開啟 PowerShell 設定檔
    1
    code $profile
    加上以下命令
    1
    Invoke-Expression (&starship init powershell)
  • bash
    ~/.bashrc 中加上以下命令
    1
    eval "$(starship init bash)"
  • zsh
    ~/.zshrc 中加上以下命令
    1
    eval "$(starship init zsh)"
    關於 oh-my-zsh

    經實測 starship 可以和 oh-my-zsh 同時執行,但建議將 oh-my-zsh 的主題還原為預設值,並將 starship 命令放在 ~/.zshrc 尾端。

    1
    ZSH_THEME="robbyrussell"
  • fish
    ~/.config/fish/config.fish~/.config/fish/conf.d/starship.fish(建議) 加上以下命令
    1
    starship init fish | source
    設定完成後,重開您的終端機應該看到這麼一個簡單的 Prompt,但其實已經啟用了大部分的功能,而圖示預設使用 Emoji。

Starship 預設 Prompt
Starship 預設 Prompt

自訂

接著要來自定這個 Prompt,來發揮 Starship 的(幾乎)所有功能。

套用預先定義的設定

Starship 提供多個樣式供你選擇,你可以在官方文件中挑選你喜歡的樣式,在這邊我以 Nerd Font Symbols 為例。

內建之 Nerd Font 主題
內建之 Nerd Font 主題

點進去之後會跟你說如何套用,並在下方顯示設定檔內容,複製那行命令貼到終端上以套用。

內建之 Nerd Font 主題
內建之 Nerd Font 主題

1
starship preset nerd-font-symbols -o ~/.config/starship.toml

你會發現終端樣式立刻套用了,對的 Starship 會在下次 prompt 立刻顯示新設定檔中的設定,而不需要重新啟動終端機。

套用內建之 Nerd Font 主題
套用內建之 Nerd Font 主題

自定義設定

如果還是覺得不滿意的話(就是我),可以開啟設定檔進一步自訂,Starship 的設定檔放在 ~/.config/starship.toml,使用文字編輯器(例如:VSCode)開啟。

1
code ~/.config/starship.toml

你可能會發現設定檔中出現了方框,這是因為缺少字型所致。

此時將編輯器字型也改成 NerdFont 即可正常顯示

在此讀者可以根據自己的喜好,參考官方文件進行修改,因為設定很多,我就不在這邊贅述。
另外如果需要更換 icon,可以到 Nerd Font 官網尋找你喜歡的圖示並複製到設定檔中。

筆者設定檔分享

筆者終端提示 - 一般環境
筆者終端提示 - 一般環境

筆者終端提示 - ssh
筆者終端提示 - ssh

設定檔是根據 Nerd Font Symbols 修改,主要改動內容:

  • 調整物件位置,讓次要狀態在右邊,作業系統圖示在第二排
  • 新增目錄圖示
  • 在偵測到 bun 時不顯示 Node.js 內容
  • 啟用作業系統模組
  • 啟用命令狀態模組並更新圖示
  • 啟用時鐘模組
  • 更新容器圖示
starship.toml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
format = """$all\
$fill \
$jobs\
$battery\
$status\
$container\
$shell\
$time\
$line_break\
$os\
$character"""

[aws]
symbol = " "

[buf]
symbol = " "

[c]
symbol = " "

[conda]
symbol = " "

[crystal]
symbol = " "

[dart]
symbol = " "

[directory]
read_only = " 󰌾"
format = '[󰝰 $path]($style)[$read_only]($read_only_style) '
style = 'bold #0087af'
truncation_symbol = '.../'

[docker_context]
symbol = " "

[elixir]
symbol = " "

[elm]
symbol = " "

[fennel]
symbol = " "

[fossil_branch]
symbol = " "

[git_branch]
symbol = " "

[golang]
symbol = " "

[guix_shell]
symbol = " "

[haskell]
symbol = " "

[haxe]
symbol = " "

[hg_branch]
symbol = " "

[hostname]
ssh_symbol = " "

[java]
symbol = " "

[julia]
symbol = " "

[kotlin]
symbol = " "

[lua]
symbol = " "

[memory_usage]
symbol = "󰍛 "

[meson]
symbol = "󰔷 "

[nim]
symbol = "󰆥 "

[nix_shell]
symbol = " "

[nodejs]
symbol = " "
detect_files = ['package.json', '.node-version', '!bun.lockb', '!bunfig.toml']

[ocaml]
symbol = " "

[os]
disabled = false
style = "white"

[os.symbols]
Alpaquita = " "
Alpine = " "
AlmaLinux = " "
Amazon = " "
Android = " "
Arch = " "
Artix = " "
CentOS = " "
Debian = " "
DragonFly = " "
Emscripten = " "
EndeavourOS = " "
Fedora = " "
FreeBSD = " "
Garuda = "󰛓 "
Gentoo = " "
HardenedBSD = "󰞌 "
Illumos = "󰈸 "
Kali = " "
Linux = " "
Mabox = " "
Macos = " "
Manjaro = " "
Mariner = " "
MidnightBSD = " "
Mint = " "
NetBSD = " "
NixOS = " "
OpenBSD = "󰈺 "
openSUSE = " "
OracleLinux = "󰌷 "
Pop = " "
Raspbian = " "
Redhat = " "
RedHatEnterprise = " "
RockyLinux = " "
Redox = "󰀘 "
Solus = "󰠳 "
SUSE = " "
Ubuntu = " "
Unknown = " "
Void = " "
Windows = "󰍲 "

[package]
symbol = "󰏗 "

[perl]
symbol = " "

[php]
symbol = " "

[pijul_channel]
symbol = " "

[python]
symbol = " "

[rlang]
symbol = "󰟔 "

[ruby]
symbol = " "

[rust]
symbol = "󱘗 "

[scala]
symbol = " "

[swift]
symbol = " "

[zig]
symbol = " "

[status]
disabled = false
pipestatus = true
symbol = ' '
not_executable_symbol = ' '
not_found_symbol = ' '
sigint_symbol = ' '
signal_symbol = ' '

[time]
disabled = false
format = '[ $time]($style) '
style = 'bold yellow'

[container]
symbol = ''

後記

我改用 Starship 一陣子了,發現還不錯用,資訊給的很足,還跨主流的作業系統和 shell,而且還發現速度有提升,可能是因為他是 rust。之後我改用 fish 又發現速度更為提升了,之後我會再分享我使用 fish 的筆記。
最後,讓我們在永遠懷念一次 powerlevel10k。

  • Title: Starship: 全新的跨 Shell Prompt 主題
  • Author: jimchen5209
  • Created at : 2024-10-09 21:27:53
  • Updated at : 2024-11-27 14:50:30
  • Link: https://blog.lce-lab.dev/2024/10/09/Starship-全新的跨-Shell-Prompt-主題/
  • License: This work is licensed under CC BY-NC-SA 4.0.