# 打造 Ubuntu / Debian / WSL 通用的 Kali-inspired ZSH 終端機
## 前言
這是一套受 Kali 終端機啟發的 ZSH 配置,保留清楚的雙行提示符與醒目的 Git 狀態顯示,同時整理成 Ubuntu、Debian 與 WSL 都適合日常使用的版本。
預設使用 `@` 作為 user/host 分隔符,畫面比較穩定、不突兀;如果想更接近 Kali 風格,也可以一行切換成 `㉿`。
## 安裝
安裝必要套件:
```bash
sudo apt update
sudo apt install -y zsh git curl ca-certificates
```
推薦安裝的輔助工具:
```bash
sudo apt install -y fzf ripgrep fd-find bat tree unzip jq zoxide
```
這些輔助工具不是硬依賴;沒安裝時 `.zshrc` 不會壞,只是少掉對應 alias 或整合功能。
安裝 ZSH 插件:
```bash
mkdir -p ~/.zsh/plugins
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git \
~/.zsh/plugins/zsh-syntax-highlighting
git clone https://github.com/zsh-users/zsh-autosuggestions.git \
~/.zsh/plugins/zsh-autosuggestions
```
備份原本設定:
```bash
cp ~/.zshrc ~/.zshrc.bak.$(date +%Y%m%d%H%M%S)
```
下載並套用 `.zshrc`:
```bash
curl -fsSL https://gist.githubusercontent.com/MeowXiaoXiang/24eff0dc3c4dda276e74d79c83f39aa9/raw/bed3ebbbea500b6e69a607d0aece8cd00d4804a5/.zshrc -o ~/.zshrc
zsh -n ~/.zshrc
```
如果你已經把檔案下載到目前資料夾,也可以手動複製:
```bash
cp .zshrc ~/.zshrc
zsh -n ~/.zshrc
```
切換預設 shell:
```bash
chsh -s "$(command -v zsh)"
```
重新開啟終端機後生效。
## 截圖演示
這份 prompt 可以展示:
- Git 分支與狀態
- Python venv
- 錯誤碼 `exit:1`
- 慢指令耗時,例如 `4s`

如果要拍主圖,可以照下面這段指令建立展示環境:
```bash
deactivate 2>/dev/null || true
cd ~
rm -rf ~/zshrc_demo
mkdir -p ~/zshrc_demo
cd ~/zshrc_demo
git init
git checkout -b demo
touch hello.py draft.md
git add hello.py
git status --short
python3 -m venv .venv
source .venv/bin/activate
false
sleep 4
```
`sleep 4` 結束後截圖,畫面應該會包含:
```text
demo +?
.venv
exit:1
4s
```
截圖完成後清理:
```bash
deactivate 2>/dev/null || true
cd ~
rm -rf ~/zshrc_demo
```
## 補充內容
### 主要功能
- 雙行提示符,清楚顯示使用者、主機、路徑、時間
- Git 分支與狀態顯示:dirty、staged、untracked、stash、ahead/behind
- Git 狀態 timeout,避免大型 repo 讓 prompt 卡住
- Python venv / Conda / Pipenv 環境提示
- 命令耗時提示
- 錯誤碼提示
- WSL 路徑縮短
- zsh-autosuggestions 與 zsh-syntax-highlighting
- fzf、ripgrep、fd、bat、zoxide 等實用工具整合
- 支援 `~/.zsh_aliases` 與 `~/.zsh_local`
### 推薦工具用途
| 套件 | 指令 | 用途 | 簡單例子 |
|---|---|---|---|
| `fzf` | `fzf` | 互動式模糊搜尋 | `Ctrl+R` 搜尋歷史 |
| `ripgrep` | `rg` | 高速文字搜尋 | `rg "TODO"` |
| `fd-find` | `fdfind` / `fd` | 高速檔案搜尋 | `fd zshrc` |
| `bat` | `batcat` / `bcat` | 帶語法高亮的檔案檢視 | `bcat ~/.zshrc` |
| `tree` | `tree` | 顯示目錄樹 | `tree -L 2` |
| `unzip` | `unzip` | 解壓 ZIP 檔 | `unzip file.zip` |
| `jq` | `jq` | 格式化與查詢 JSON | `cat data.json \| jq .` |
| `zoxide` | `z` | 智慧跳目錄 | `z project` |
### Git 狀態符號
| 符號 | 意義 |
|---|---|
| `*` | 工作區有修改 |
| `+` | 暫存區有內容 |
| `?` | 有未追蹤檔案 |
| `$` | 有 stash |
| `↑1` | 本地比遠端多 1 個 commit |
| `↓1` | 本地比遠端少 1 個 commit |
### 符號設定
預設:
```zsh
PROMPT_HOST_SYMBOL="@"
```
Kali 風格:
```zsh
PROMPT_HOST_SYMBOL="㉿"
```
其他可嘗試:
```zsh
PROMPT_HOST_SYMBOL="λ"
PROMPT_HOST_SYMBOL="◆"
PROMPT_HOST_SYMBOL="◉"
```
### 個人設定
可以另外建立:
```bash
touch ~/.zsh_aliases ~/.zsh_local
```
用途建議:
```text
~/.zsh_aliases 放個人 alias
~/.zsh_local 放機器專屬 PATH、環境變數、工具初始化
```
### FAQ
#### 沒有安裝推薦工具會壞掉嗎?
不會。這份 `.zshrc` 會自動偵測工具是否存在;沒有安裝時,只是不載入對應功能。
#### 為什麼不預設使用 `㉿`?
`㉿` 很有 Kali 味,但不同字型顯示差異很大,也有明顯品牌感。這份設定預設用 `@`,更適合 Ubuntu、Debian 和 WSL 長期使用。
#### 如何還原?
還原備份:
```bash
cp ~/.zshrc.bak.YYYYMMDDHHMMSS ~/.zshrc
```
或暫時回到 bash:
```bash
chsh -s "$(command -v bash)"
```