dotfiles/dot_zshrc.tmpl

204 lines
7.1 KiB
Cheetah
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Source manjaro-zsh-configuration
if [[ -e /usr/share/zsh/manjaro-zsh-config ]]; then
source /usr/share/zsh/manjaro-zsh-config
fi
# 通用顏色文字輸出(要在最前面執行,不然會失效)
[[ -s "/etc/grc.zsh" ]] && source /etc/grc.zsh
# Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.zshrc.
# Initialization code that may require console input (password prompts, [y/n]
# confirmations, etc.) must go above this block; everything else may go below.
if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then
source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
fi
### Added by Zinit's installer
if [[ ! -f $HOME/.local/share/zinit/zinit.git/zinit.zsh ]]; then
print -P "%F{33} %F{220}Installing %F{33}ZDHARMA-CONTINUUM%F{220} Initiative Plugin Manager (%F{33}zdharma-continuum/zinit%F{220})…%f"
command mkdir -p "$HOME/.local/share/zinit" && command chmod g-rwX "$HOME/.local/share/zinit"
command git clone https://github.com/zdharma-continuum/zinit "$HOME/.local/share/zinit/zinit.git" && \
print -P "%F{33} %F{34}Installation successful.%f%b" || \
print -P "%F{160} The clone has failed.%f%b"
fi
source "$HOME/.local/share/zinit/zinit.git/zinit.zsh"
autoload -Uz _zinit
(( ${+_comps} )) && _comps[zinit]=_zinit
# Load a few important annexes, without Turbo
# (this is currently required for annexes)
zinit light-mode for \
zdharma-continuum/zinit-annex-as-monitor \
zdharma-continuum/zinit-annex-bin-gem-node \
zdharma-continuum/zinit-annex-patch-dl \
zdharma-continuum/zinit-annex-rust
### End of Zinit's installer chunk
# zsh 套件四天王
zinit light zsh-users/zsh-completions
zinit light zsh-users/zsh-autosuggestions
zinit light zsh-users/zsh-history-substring-search
zinit light zdharma-continuum/fast-syntax-highlighting
# Oh My Zsh 功能
zinit snippet OMZ::lib/clipboard.zsh
zinit snippet OMZ::lib/history.zsh
zinit snippet OMZP::vscode
zinit snippet OMZ::lib/key-bindings.zsh
zinit snippet OMZ::lib/completion.zsh
zinit snippet OMZ::plugins/sudo/sudo.plugin.zsh
zinit snippet OMZ::lib/theme-and-appearance.zsh
#zinit wait="1" lucid for \
# OMZL::clipboard.zsh \
# OMZL::history.zsh \
# OMZL::key-bindings.zsh \
# OMZL::completion.zsh \
# OMZP::sudo/sudo.plugin.zsh
# # OMZL::git.zsh \
# # OMZP::systemd/systemd.plugin.zsh \
# # OMZP::git/git.plugin.zsh \
# # OMZP::mvn/mvn.plugin.zsh \
# # OMZP::colored-man-pages/colored-man-pages.plugin.zsh
# Powerlevel10k
zinit ice depth=1; zinit light romkatv/powerlevel10k
# To customize prompt, run `p10k configure` or edit ~/.p10k.zsh.
[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh
# 開啟自動補全
setopt AUTO_LIST
setopt AUTO_MENU
setopt MENU_COMPLETE
autoload -U compinit
compinit
# Completion caching
#zstyle ':completion::complete:*' use-cache on
#zstyle ':completion::complete:*' cache-path .zcache
#zstyle ':completion:*:cd:*' ignore-parents parent pwd
#
##Completion Options
#zstyle ':completion:*:match:*' original only
#zstyle ':completion::prefix-1:*' completer _complete
#zstyle ':completion:predict:*' completer _complete
#zstyle ':completion:incremental:*' completer _complete _correct
#zstyle ':completion:*' completer _complete _prefix _correct _prefix _match _approximate
#
## Path Expansion
#zstyle ':completion:*' expand 'yes'
#zstyle ':completion:*' squeeze-shlashes 'yes'
#zstyle ':completion::complete:*' '\\'
#
#zstyle ':completion:*:*:*:default' menu yes select
#zstyle ':completion:*:*:default' force-list always
# Binary release in archive, from GitHub-releases page.
# After automatic unpacking it provides program "fzf".
zi ice from"gh-r" as"program"
zi light junegunn/fzf
# zsh-fzf-history-search
zinit ice lucid wait'0'
zinit light joshskidmore/zsh-fzf-history-search
#bindkey '^T' fzf-completion
#zinit light Aloxaf/fzf-tab
export FZF_DEFAULT_OPTS="--height 40% --layout=reverse --border --preview 'bat --color=always {}' --preview-window '~3'"
# 給自動補齊上色
# Standard style used by default for 'list-colors'
LS_COLORS=${LS_COLORS:-'di=34:ln=35:so=32:pi=33:ex=31:bd=36;01:cd=33;01:su=31;40;07:sg=36;40;07:tw=32;40;07:ow=33;40;07:'}
# apply ls colors
zstyle ':completion:*:default' list-colors ${(s.:.)LS_COLORS}
zstyle ':completion:*:default' list-prompt '%S%M matches%s'
# pretty cd [tab] stuffs
zstyle ':completion:*:directory-stack' list-colors '=(#b) #([0-9]#)*( *)==95=38;5;12'
# highlight case in select
zstyle ':completion:*' menu select
{{ template "sh_common.tmpl" . }}
# overwrite ls
if command -v colorls &> /dev/null; then
alias ls='colorls'
compdef colorls='ls'
source $(dirname $(gem which colorls))/tab_complete.sh
elif command -v eza &> /dev/null; then
zinit ice as"completion"
zinit snippet https://github.com/eza-community/eza/blob/main/completions/zsh/_eza
alias ls='eza --color=always --icons=always'
#zinit light 'eza-community/eza'
fi
# Floorp 支援 Firefox參數補齊
compdef floorp='firefox'
# 開啟檔案總管快速鍵 alt+e
if command -v xdg-open &> /dev/null; then
bindkey -s '^[e' 'xdg-open "$PWD" 2> /dev/null\n'
elif [ "$(uname -s)" = 'Darwin' ]; then
bindkey -s '^[e' 'open "$PWD" 2> /dev/null\n'
fi
# bindkey -s '^E' 'gnome-terminal --working-directory="$PWD" -- zsh\n'
# Install ruby¬
# Based on "`brew --prefix ruby`/bin"¬
export PATH="/usr/local/opt/ruby/bin:$PATH
# Based on "`gem environment gemdir`/bin"¬
export PATH="/usr/local/lib/ruby/gems/3.3.0/bin:$PATH
export PATH="$HOME/.local/share/gem/ruby/3.3.0/bin:$PATH"
# Fix ython3 to python Path on macOS
if [ "$(uname -s)" = 'Darwin' ]; then
export PATH=/usr/local/opt/python/libexec/bin:$PATH
fi
# Created by `pipx` on 2023-01-30 19:57:14
export PATH="$PATH:$HOME/.local/bin"
# GoLang Path
export PATH="$PATH:$HOME/go/bin"
# iterm2
test -e "${HOME}/.iterm2_shell_integration.zsh" && source "${HOME}/.iterm2_shell_integration.zsh"
# 圖片顯示
# 既然即使加入判斷後還是「進入函數定義段落且噴錯」那就代表zsh 在解析 .zshrc 時,在到達 if 邏輯前,就已經知道 imgcat 是 alias並因此直接報錯這是因為
# ⚠️ 在 zsh 中,如果你寫 function_name() 這種形式,然後這個名稱之前被定義為 alias會在 parse 階段直接錯誤,不會等到 if 判斷。
# 解決方式:延遲定義(用 eval 避開 parser
# 你需要避免 zsh 在 parse 階段就看到 imgcat() 的寫法。可以這樣寫,透過 eval 延遲定義函數內容:
if ! alias imgcat &>/dev/null && ! functions imgcat &>/dev/null && command -v magick &>/dev/null; then
eval '
imgcat() {
if [[ -z "$1" ]]; then
echo "❌ 請指定圖片檔案例如imgcat ~/Pictures/foo.png"
return 1
fi
magick "$1" -geometry 800x480 sixel:-
}'
fi
zinit light mass8326/zsh-chezmoi
# 自動補上 noglob 並禁用 Zsh 的 globbing 解析
function git_pushmulti() {
# 手動處理方括號或括號內容,並進行推送
local remotes="$1"
local branches="$2"
remotes="${remotes//\[/\"[\"}"
remotes="${remotes//\]/\"]\"}"
branches="${branches//\[/\"[\"}"
branches="${branches//\]/\"]\"}"
# 執行 git pushmulti
noglob git pushmulti "$remotes" "$branches"
}