Files
dotfiles/.zshrc

165 lines
4.4 KiB
Bash
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.
# Powerlevel10k instant prompt. Keep near the top of ~/.zshrc.
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
# Environment
path=(~/.local/bin $path)
typeset -x XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}"
typeset -g POWERLEVEL9K_INSTANT_PROMPT=quiet
# Shell options
setopt correct
setopt interactive_comments
# Load zinit and OMZ libs
load_omz_lib() {
local i
for i in theme-and-appearance.zsh git.zsh prompt_info_functions.zsh history.zsh; do
zinit snippet "OMZL::${i}"
done
for i in completion.zsh key-bindings.zsh; do
zinit ice lucid wait="1"
zinit snippet "OMZL::${i}"
done
}
load_zinit_compinit_function() {
zpcompinit
zpcdreplay
}
# Install zinit manually (official way) with GitHub proxy for China mainland
ZINIT_HOME="${XDG_DATA_HOME:-${HOME}/.local/share}/zinit/zinit.git"
[[ ! -d "${ZINIT_HOME}" ]] && mkdir -p "$(dirname "${ZINIT_HOME}")"
[[ ! -d "${ZINIT_HOME}/.git" ]] && git clone https://gh-proxy.org/https://github.com/zdharma-continuum/zinit.git "${ZINIT_HOME}"
source "${ZINIT_HOME}/zinit.zsh"
load_omz_lib
# Theme: Powerlevel10k
zinit ice depth=1
zinit light romkatv/powerlevel10k
skip_global_compinit=1
load_zinit_compinit_function
# Plugins (zinit official style)
# command-not-found: command missing 时提示可安装的软件包
if [[ -e /usr/lib/command-not-found ]]; then
zinit ice lucid wait="0"
zinit snippet OMZP::command-not-found
fi
# colored-man-pages: man 页面彩色高亮
zinit ice lucid wait="3"
zinit snippet OMZP::colored-man-pages
# fast-syntax-highlighting: 命令行语法高亮
zinit ice wait lucid atinit"ZINIT[COMPINIT_OPTS]=-C; zicompinit; zicdreplay"
zinit light zdharma-continuum/fast-syntax-highlighting
# zsh-autosuggestions: 基于历史记录的命令自动建议
zinit ice wait lucid atload"_zsh_autosuggest_start"
zinit light zsh-users/zsh-autosuggestions
# sudo: 双击 ESC 为当前命令加 sudo 前缀
zinit ice lucid wait="2"
zinit snippet OMZP::sudo
# z: 目录访问频率跳转
zinit ice lucid wait="1"
zinit snippet OMZP::z
unsetopt BG_NICE
# git: 提供 git 常用别名与函数
zinit ice lucid wait="1"
zinit snippet OMZP::git
# extract: 一条命令解压多种压缩格式,并加载其补全
zinit ice lucid wait="1"
zinit snippet OMZP::extract
# OMZ kubectl: kubectl 别名、补全与辅助函数
zinit ice lucid wait="1"
zinit snippet OMZP::kubectl
# Powerlevel10k config
[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh
# Aliases
alias ...=../..
alias ....=../../..
alias .....=../../../..
alias ......=../../../../..
alias 1='cd -'
alias 2='cd -2'
alias 3='cd -3'
alias 4='cd -4'
alias 5='cd -5'
alias 6='cd -6'
alias 7='cd -7'
alias 8='cd -8'
alias 9='cd -9'
alias _='sudo '
alias afind='ack -il'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias gc1='git clone --recursive --depth=1'
alias globurl='noglob urlglobber '
alias grep='grep --color=auto'
alias md='mkdir -p'
alias rd='rmdir'
if [[ -n "$(command -v eza)" ]]; then
DISABLE_LS_COLORS=true
alias ls='eza --color=auto'
alias l='eza -lbah --icons=auto'
alias la='eza -labgh --icons=auto'
alias ll='eza -lbg --icons=auto'
alias lt='eza -lTbg --icons=auto'
alias lsa='eza -lbagR --icons=auto'
alias lst='eza -lTabgh --icons=auto'
else
alias ls='ls --color=auto'
alias l='ls -lah'
alias la='ls -lAh'
alias ll='ls -lh'
alias lsa='ls -lah'
alias lst='tree -pCsh'
fi
# yazi: open and jump to last cwd
function y() {
local tmp cwd
tmp="$(mktemp -t yazi-cwd.XXXXXX)"
yazi "$@" --cwd-file="$tmp"
cwd="$(cat -- "$tmp")"
if [[ -n "$cwd" && "$cwd" != "$PWD" ]]; then
builtin cd -- "$cwd"
fi
rm -f -- "$tmp"
}
# uv: Python package manager自动补全
if (( $+commands[uv] )); then
eval "$(uv generate-shell-completion zsh)"
fi
# 快速开关代理(添加到 ~/.bashrc
alias proxy-on='export http_proxy=http://127.0.0.1:7890 https_proxy=http://127.0.0.1:7890'
alias proxy-off='unset http_proxy https_proxy'
# Required packages
# - zsh
# - git
# - zinit
# - powerlevel10k
# - eza (optional, for modern ls aliases)
# - tree (optional, fallback for lst alias)
# - ack (optional, for afind alias)
# - yazi (terminal file manager)
# - uv (Python package manager)
# - kubectl (for OMZ kubectl plugin)
# - command-not-found (optional, distro package name may vary)
# - bat or batcat (optional, if you later add bat aliases)