# ========================================== # 0. Oh My Zsh # ========================================== export ZSH="$HOME/.oh-my-zsh" # 补全由 Warp AI 接管(Cmd+I) plugins=(git) # compinit 缓存:把 zcompdump 放 XDG_CACHE_HOME 下,跨账号/多场景稳态 0ms autoload -U compinit if [[ -n "${XDG_CACHE_HOME:-}" ]]; then ZSH_COMPDUMP="${XDG_CACHE_HOME}/zsh/zcompcache-${ZSH_VERSION}" else ZSH_COMPDUMP="${HOME}/.cache/zsh/zcompcache-${ZSH_VERSION}" fi mkdir -p "${ZSH_COMPDUMP:h}" source $ZSH/oh-my-zsh.sh # 手写精简 PROMPT:不依赖 OMZ 主题系统(bira 框架引入 ~150ms) # Warp 自己渲染 block status;这一行只是终端顶部提示符 PROMPT='%F{cyan}%~%f %# ' PROMPT_EOL_MARKER='' # ========================================== # 1. 环境变量 # ========================================== # --- Homebrew(TUNA API + USTC Bottle)--- export HOMEBREW_API_DOMAIN="https://mirrors.tuna.tsinghua.edu.cn/homebrew-bottles/api" export HOMEBREW_BOTTLE_DOMAIN="https://mirrors.ustc.edu.cn/homebrew-bottles" export HOMEBREW_NO_AUTO_UPDATE=1 export HOMEBREW_NO_INSTALL_CLEANUP=1 # --- 编辑器与显示 --- export EDITOR='nvim' export CLICOLOR='Yes' export LSCOLORS='CxfxcxdxbxegedabagGxGx' export BAT_THEME="TwoDark" export NODE_VERSION=$(/opt/homebrew/bin/node -v) # --- Node.js 二进制下载(USTC 镜像)--- export NODEJS_ORG_MIRROR="https://mirrors.ustc.edu.cn/node" export NVM_NODEJS_ORG_MIRROR="$NODEJS_ORG_MIRROR" export FNM_NODE_DIST_MIRROR="$NODEJS_ORG_MIRROR" export N_NODE_MIRROR="$NODEJS_ORG_MIRROR" # --- Docker --- export DOCKER_BUILDKIT=1 export DOCKER_CONTENT_TRUST=1 # --- 代理(大写小写都设,覆盖 npm/Maven/Gradle/cURL 等只认一种的工具)--- # export all_proxy="http://127.0.0.1:7890" # export http_proxy="http://127.0.0.1:7890" # export https_proxy="http://127.0.0.1:7890" # export ALL_PROXY="http://127.0.0.1:7890" # export HTTP_PROXY="http://127.0.0.1:7890" # export HTTPS_PROXY="http://127.0.0.1:7890" # --- 代理排除名单(本机 / 私有网段 / .local 不走代理,不加 .cn 以免海外服务走国内 CDN)--- export no_proxy="localhost,127.0.0.1,::1,.local,192.168.0.0/16,10.0.0.0/8,172.16.0.0/12" export NO_PROXY="$no_proxy" # --- LLM API 地址(非密钥)--- export GROK_BASE_URL="https://nexus.itssx.com/api/grok" # --- 敏感凭据/密钥(隔离在 ~/secrets.env,权限 600)--- if [ -f "$HOME/secrets.env" ]; then source "$HOME/secrets.env" fi # --- Python / 包管理(腾讯云镜像)--- export UV_DEFAULT_INDEX="https://mirrors.cloud.tencent.com/pypi/simple/" # --- CODEX 自动批准(去交互)--- export CODEX_NO_PROMPT=1 export CODEX_ALLOW_ALL=1 export CODEX_SKIP_CONFIRM=1 export CODEX_AUTO_APPROVE=1 # ========================================== # 2. 路径设置 # ========================================== typeset -U path path=( $HOME/.local/bin $HOME/bin $HOME/.mimocode/bin /opt/homebrew/bin /opt/homebrew/sbin /usr/local/bin /usr/bin /bin /usr/sbin /sbin $HOME/.lmstudio/bin $HOME/.codeium/windsurf/bin $HOME/.antigravity/antigravity/bin $HOME/.opencode/bin $HOME/.minimax/bin $HOME/.grok/bin /opt/homebrew/Cellar/poppler ) export PATH # ========================================== # 3. 外部集成 # ========================================== alias bearcli="/Applications/Bear.app/Contents/MacOS/bearcli" ___MY_VMOPTIONS_SHELL_FILE="${HOME}/.jetbrains.vmoptions.sh"; if [ -f "${___MY_VMOPTIONS_SHELL_FILE}" ]; then . "${___MY_VMOPTIONS_SHELL_FILE}"; fi [ -f "$HOME/.local/bin/env" ] && . "$HOME/.local/bin/env" [ -f ~/.config/nvim/zsh_padding.zsh ] && source ~/.config/nvim/zsh_padding.zsh # ========================================== # 4. 补全系统 # ========================================== fpath=(/Users/dyx/.docker/completions $fpath) if [[ -d "/opt/homebrew/share/zsh/site-functions" ]]; then fpath=("/opt/homebrew/share/zsh/site-functions" $fpath) fi # ========================================== # 5. 工具集成 # ========================================== if command -v zoxide > /dev/null; then eval "$(zoxide init zsh)" alias z='__zoxide_z' alias zi='__zoxide_zi' fi [ -f ~/.fzf.zsh ] && source ~/.fzf.zsh # ========================================== # 6. 自定义函数 # ========================================== # --- 配置目录跳转 --- cvs() { cd '/Users/dyx/Library/Application Support/Code/User'; } ccl() { cd '/Users/dyx/.claude' && nvim; } ccx() { cd '/Users/dyx/.codex' && nvim; } cge() { cd '/Users/dyx/.gemini' && nvim; } cvm() { cd /Users/dyx/.config/nvim; } ok() { source ~/.zshrc && clear; } vsh() { nvim ~/.zshrc; } Vsh() { nvim ~/.zshrc; } # --- Python 虚拟环境激活 --- acc() { local project_dir="/Users/dyx/Code/Agent" local venv="${project_dir}/.venv" if (( $# > 0 )); then print -u2 "acc 只进入项目并激活虚拟环境;请使用 uv add --active <包名> 管理依赖。" return 2 fi cd "${project_dir}" || return 1 source "${venv}/bin/activate" || return 1 } # --- Python uv 依赖自动导出 --- if [ -f "/Users/dyx/ai_coding_rules/scripts/uv-auto-export.sh" ]; then source "/Users/dyx/ai_coding_rules/scripts/uv-auto-export.sh" fi # --- VSCode 打开 --- codef() { local file="$1" [ -f "$file" ] && command code "$(dirname "$file")" --goto "$file" || command code "$@" } # --- Chrome 调试模式 --- sel() { /Applications/Google\ Chrome2.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222 --user-data-dir="/Users/dyx/Code/selenium_data" } # --- SSH 快捷方式(shell 代理变量对 ssh 无效,要禁代理请改 ~/.ssh/config 的 ProxyCommand)--- ss() { if [ $# -eq 0 ]; then ssh txy else lazyssh "$@" fi } ssc() { if [ $# -eq 0 ]; then ssh ssc else lazyssh "$@" fi } # --- Docker 容器展示 --- _dkps_format() { TAB=$(printf '\t') docker ps "$@" --format "table {{.ID}}${TAB}{{.Names}}${TAB}{{.Status}}${TAB}{{.Image}}${TAB}{{.Ports}}" \ | perl -pe 's/\[::\]:[^\t,]*//g; s/:::[^\t,]*//g; s/0\.0\.0\.0://g; s/->/-/g; s/\/tcp//g; s/\/udp//g; s/,\s*,/,/g; s/^\s*,\s*//; s/,\s*$//' \ | awk 'NR==1 {print $0} NR>1 {if ($0 ~ /Up/) printf "\033[1;35m%s\033[0m\n", $0; else print $0}' \ | column -t -s "$TAB" } dkps() { _dkps_format; } dkpsa() { _dkps_format -a; } dkpsaa() { docker ps -a --format "{{.Names}}\t{{.Status}}\t{{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Command}}\t{{.RunningFor}}" | awk -F"\t" '{ if ($1 == "" || $1 ~ /^-+$/) next; print "------------------------------" if ($2 ~ /Up/) { printf "\033[1;35mNames:\033[0m \033[1;35m%s\033[0m\n", $1 printf "\033[1;33mStatus:\033[0m \033[1;33m%s\033[0m\n", $2 printf "\033[1;34mID:\033[0m \033[1;34m%s\033[0m\n", $3 printf "\033[1;32mImage:\033[0m \033[1;32m%s\033[0m\n", $4 printf "\033[1;36mPorts:\033[0m \033[1;36m%s\033[0m\n", $5 } else { printf "\033[1;35mNames:\033[0m %s\n", $1 printf "\033[1;33mStatus:\033[0m %s\n", $2 printf "\033[1;34mID:\033[0m %s\n", $3 printf "\033[1;32mImage:\033[0m %s\n", $4 printf "\033[1;36mPorts:\033[0m %s\n", $5 } printf "\033[1;37mCommand:\033[0m %s\n", $6 printf "\033[1;37mCreated:\033[0m %s\n", $7 } END {print "------------------------------"}' } # --- Docker 全面清理 --- dkrmaa() { pkill -f 'docker build' 2>/dev/null || true docker builder prune -af docker ps -aq | xargs -r docker rm -f docker images -q | xargs -r docker rmi -f docker volume ls -q | xargs -r docker volume rm docker system prune -a --volumes } # ========================================== # 7. 别名 # ========================================== # --- 基础命令 --- alias Ok='ok' alias cl="clear" alias Cl="clear" alias cll="reset" alias py="python" alias ipy="ipython" alias mn="tldr" alias vi="nvim" alias vim="nvim" alias neovim="nvim" # --- 文件查看 --- alias cc="bat" # --- eza(现代 ls 增强)--- if command -v eza > /dev/null; then alias ls='eza --icons --group-directories-first' alias l='ls' alias ll='eza -lh --icons --git --group-directories-first --header' alias la='eza -aH --icons --group-directories-first' alias lt='eza --tree --level=2 --icons' alias ld='eza -D --icons' alias lD='eza -lhD --icons' else alias ls='ls --color=auto' alias ll='ls -lh' alias la='ls -A' alias lt='tree -d -L 2' fi # --- 目录跳转 --- alias cw="cd /Users/dyx/Code/Cloud_Web" alias zw="cd /Users/dyx/Code/Cloud_Web" alias cja="cd /Users/dyx/Library/CloudStorage/OneDrive-个人/0.Mac/Jetbrains激活" alias vis="nvim sftp://txy//www/wwwroot/" # --- Git --- alias gs="lazygit status" alias gss="git status --short --branch" alias gst="git status -s" alias gsu="git status -uall -s" alias ga="git add -A" alias ad="git add -A" alias gcm="git commit" alias gp="git pull" alias gpll="git pull" alias gpsh="git push" alias gck="git checkout" alias gcg="git checkout" alias gsw="git switch" alias gcw="git switch" alias gcwc="git switch -c" alias gb="git branch" alias gbr="git branch" alias gbra="git branch -a" alias gbrd="git branch -d" alias gmer="git merge" alias gl="git log --oneline --all" alias gll="git log --all" alias glg="git log --oneline --graph --decorate --all" alias gla="git log --name-status --oneline" alias glf="git log --name-status --oneline" alias glfs="git ls-files" alias gsh="git show" alias gf="git diff | bat --paging=always" alias gff="git diff" alias gre="git reset" alias grs="git reset" alias grt="git restore" alias grf="git reflog" alias gsthl="git stash list --date=iso" alias gsth="git stash" alias gini="git init" alias gfc="git fetch" alias ge='scp -P ${BACKUP_SERVER_PORT:-222} ${BACKUP_SERVER_HOST:-root@42.193.15.117}:/www/wwwroot/mySite/db.sqlite3 /Users/dyx/Code/mySite/' # --- Docker --- alias dk="docker" alias dkr="docker run" alias dkrv="docker run -v" alias dkrd="docker run -d" alias dkrdi="docker run -d -i" alias dkrdv="docker run -d -v" alias dkri="docker run -it" alias dkriv="docker run -it -v" alias dkrm="docker rm" alias dkec="docker exec" alias dkst="docker start" alias dkstp="docker stop" alias dkstpa="docker ps -q | xargs -r docker stop" alias dkrst="docker restart" alias dkdf="docker diff" alias dkim="docker image" alias dkims="docker images" alias dkima="docker images" alias dkrmi="docker rmi" alias dkpl="docker pull" alias dkpll="docker pull" alias dkpsh="docker push" alias dkbd="docker image build" alias dkhs="docker history" alias dksy="docker system" alias dkrmia='docker images -q | xargs -r docker rmi -f' alias dkrmca='docker ps -aq | xargs -r docker rm -f' alias dkrmva='docker volume ls -q | xargs -r docker volume rm' alias dkrmfa="docker system prune -a --volumes" alias dkvs='docker volume ls' alias kl="/Users/dyx/Documents/my_scripts/kill_port.sh" # --- AI 工具 --- alias oc='opencode' alias ca="claude --dangerously-skip-permissions" alias mo="mimo" alias claude="claude --dangerously-skip-permissions" #alias codex="codex --dangerously-bypass-approvals-and-sandbox" #alias cx="codex --dangerously-bypass-approvals-and-sandbox" #alias co="codex --dangerously-bypass-approvals-and-sandbox" alias gemini="gemini --approval-mode=yolo" alias ge="gemini --approval-mode=yolo" alias codex-api='~/bin/codex-api' _dsh_open() { open -na "/Users/dyx/Applications/Edge Apps.localized/DeepSeek Harness.app" "http://127.0.0.1:3080" >/dev/null 2>&1; } _dsh_wait_and_open() { local i=0 while [ $i -lt 300 ]; do if lsof -nP -iTCP:3080 -sTCP:LISTEN >/dev/null 2>&1 \ && curl --noproxy "*" --max-time 1 -s -o /dev/null http://127.0.0.1:3080 2>/dev/null; then _dsh_open return 0 fi i=$((i+1)) sleep 0.3 done echo "dsh: port 3080 not ready after 90s, see ~/.dsh/dsh-web.log" >&2 return 1 } dsh() { if lsof -nP -iTCP:3080 -sTCP:LISTEN >/dev/null 2>&1; then _dsh_open return 0 fi mkdir -p ~/.dsh nohup node /Users/dyx/deepseek-harness/apps/cli/lib/bin.js web \ > ~/.dsh/dsh-web.log 2>&1 /dev/null nohup bash -c '_dsh_wait_and_open' >/dev/null 2>&1 /dev/null } dshh() { local pids pids=$(lsof -nP -iTCP:3080 -sTCP:LISTEN -t 2>/dev/null) if [ -z "$pids" ]; then echo "dshh: no process listening on 3080" return 0 fi echo "dshh: stopping dsh (pid: $pids)" kill $pids 2>/dev/null local i=0 while [ $i -lt 30 ] && lsof -nP -iTCP:3080 -sTCP:LISTEN >/dev/null 2>&1; do i=$((i+1)); sleep 0.3 done if lsof -nP -iTCP:3080 -sTCP:LISTEN >/dev/null 2>&1; then echo "dshh: force killing (pid: $pids)" kill -9 $pids 2>/dev/null fi } # --- Django --- alias cls='echo "yes" | /Users/dyx/Code/0.python-venv/mySite-django5.0-py3.12/bin/python /Users/dyx/Code/mySite/manage.py collectstatic' # --- 自动化脚本 --- alias bcp='/Users/dyx/Documents/my_scripts/backup.sh' alias clf='/Users/dyx/Documents/my_scripts/clean_ds.sh' alias mm='/Users/dyx/Documents/my_scripts/menu.sh' alias nn='/Users/dyx/Documents/my_scripts/rename_wallpapers.sh' alias reload-services='~/Documents/my_scripts/menu.sh --reload' # --- 文件搜索 --- alias se='/Users/dyx/Documents/my_scripts/search.py' alias se-turbo='/Users/dyx/Documents/my_scripts/search.py --max-size 50' alias se-fast='/Users/dyx/Documents/my_scripts/search.py --max-size 200' alias se-full='/Users/dyx/Documents/my_scripts/search.py --max-size 5000' # ========================================== # 8. Warp 适配 # ========================================== # Warp 自动注入 OSC 133 prompt 标记 + AI 补全(Cmd+I) # - 不需要 source Warp shell integration;Warp 应用进程接管 # - Launch configs 来自 ~/.warp/launch_configurations/*.yaml,无需 .zshrc 加载 # - 当前无补全插件;Warp AI 提供 # Ctrl + D 清除光标前内容 bindkey '^D' backward-kill-line # --- 工具路径与环境变量已统一归档到分区 1(环境变量)与分区 2(路径设置)--- # Added by MiniMax Code export PATH="/Users/dyx/.minimax/bin:$PATH" export PATH="/Users/dyx/.local/bin:$PATH" # Added by Deck.app # Added by cua-driver-rs installer — see https://github.com/trycua/cua export PATH="/Users/dyx/.local/bin:$PATH" # Added by cua-driver-rs installer — see https://github.com/trycua/cua export PATH="/Users/dyx/.local/bin:$PATH"