# ── PATH ──
export PATH="$HOME/go/bin:$HOME/.bun/bin:$PATH"

# ── 默认编辑器与分页器 ──
export EDITOR=nvim
export VISUAL=nvim
export PAGER=less
export MANPAGER="sh -c 'col -bx | bat -l man -p'"

# ── Shell 选项 ──
setopt AUTO_CD              # 输目录名直接 cd
setopt INTERACTIVE_COMMENTS # 允许交互式 # 注释
setopt NO_BEEP              # 关蜂鸣

# ── 补全系统（必须在 fzf-tab 之前）──
# 每天重建一次 zcompdump，其余启动直接复用，节省启动时间
autoload -Uz compinit
if [[ -n ~/.zcompdump(#qN.mh+24) ]]; then
    compinit
else
    compinit -C
fi

# ── 外部插件 ──
source /usr/share/zsh/plugins/fzf-tab-git/fzf-tab.plugin.zsh
source /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh
source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh  # 必须最后

# ── 双击 ESC 自动加 sudo ──
sudo-command-line() {
    [[ -z $BUFFER ]] && zle up-history
    [[ $BUFFER != sudo\ * ]] && BUFFER="sudo $BUFFER"
    zle end-of-line
}
zle -N sudo-command-line
bindkey '\e\e' sudo-command-line

# ── Ctrl+Space 接受自动建议 ──
bindkey '^ ' autosuggest-accept

# ── FZF 默认行为（fd 联动 + 现代 UI）──
export FZF_DEFAULT_OPTS='--height=50% --layout=reverse --border --preview-window=right:60%'
export FZF_DEFAULT_COMMAND='fd --type f --hidden --follow --exclude .git'
export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND"
export FZF_ALT_C_COMMAND='fd --type d --hidden --follow --exclude .git'

# ── 工具初始化（顺序重要）──
eval "$(starship init zsh)"
eval "$(zoxide init --cmd cd zsh)"   # cd 直接被 zoxide 接管，cdi 自动可用
eval "$(mise activate zsh)"
eval "$(direnv hook zsh)"
eval "$(fzf --zsh)"         # Ctrl+T 搜文件, Alt+C 搜目录
eval "$(atuin init zsh)"    # 必须在 fzf 之后，接管 Ctrl+R

# ── 别名 ──
# 导航
alias ..="cd .."
alias ...="cd ../.."

# 文件列表（公共参数提取，DRY）
_EZA_BASE=(--icons --group-directories-first --git)
alias ls="eza ${_EZA_BASE}"
alias ll="eza -la ${_EZA_BASE}"
alias la="eza -a ${_EZA_BASE}"
alias lt="eza --tree --level=2 ${_EZA_BASE}"

# 工具
alias cat="bat --paging=never"
alias rm="gomi"
alias lg="lazygit"
alias vi="nvim"
alias x="ouch decompress"   # 万能解压（zip/tar/gz/bz2/xz/zst/7z/rar）

# 网络
alias http="xh"

# ── yazi wrapper：退出时自动 cd 到最后目录 ──
function yy() {
    local tmp="$(mktemp -t "yazi-cwd.XXXXXX")" cwd
    yazi "$@" --cwd-file="$tmp"
    if cwd="$(command cat -- "$tmp")" && [[ -n "$cwd" && "$cwd" != "$PWD" ]]; then
        builtin cd -- "$cwd"
    fi
    command rm -f -- "$tmp"
}

# ── WSL 剪贴板 ──
if [[ -n "$WSL_DISTRO_NAME" ]]; then
    alias pbcopy="clip.exe"
    alias pbpaste="powershell.exe -noprofile -c Get-Clipboard"
fi

# ── Local ──
[[ -f ~/.zshrc.local ]] && source ~/.zshrc.local
