# 打造 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` ![image](https://hackmd.io/_uploads/rkHVT8Rpbx.png) 如果要拍主圖,可以照下面這段指令建立展示環境: ```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)" ```