Files
team/.devcontainer/templates/bashrc.tail.sh
T
2026-04-30 16:23:40 +08:00

121 lines
4.2 KiB
Bash

# ============================================================================
# DevContainer .bashrc 追加配置
# 由 Dockerfile 通过 sed 替换占位符后追加到 ~/.bashrc
# ============================================================================
# 本地二进制路径(必须优先于 NVM)
export PATH="$HOME/.local/bin:$PATH"
# NVM 配置
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
# Node.js 镜像配置
export NVM_NODEJS_ORG_MIRROR=https://npmmirror.com/mirrors/node
export npm_config_registry=https://registry.npmmirror.com
export YARN_REGISTRY=https://registry.npmmirror.com
export ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/
# Python/UV 配置
export PATH="{{NODE_PATH}}:{{BIN_PATH}}:$PATH"
export UV_INDEX_URL=https://pypi.tuna.tsinghua.edu.cn/simple
export UV_LINK_MODE=copy
export PYTHONUNBUFFERED=1
alias uv-python='uv run python'
alias uv-pip='uv run pip'
# 语言和区域设置
export LC_ALL=zh_CN.UTF-8
export LC_TIME=zh_CN.UTF-8
export LANG=zh_CN.UTF-8
# 其他配置
export COREPACK_ENABLE_DOWNLOAD_PROMPT=false
export EDITOR=vim
export VISUAL=vim
export LESSCHARSET=utf-8
# Jujutsu (jj) 补全
if command -v jj >/dev/null 2>&1; then
source <(jj util completion bash 2>/dev/null)
fi
# 别名配置
alias ll='ls -alhF --color=auto'
alias date='date "+%F %T %p %A %B"'
export TIME_STYLE='+%Y-%m-%d %H:%M:%S'
# Python 路径
export PYTHONPATH=/workspace:$PYTHONPATH
# NVM IO.js 镜像
export NVM_IOJS_ORG_MIRROR="https://iojs.org/dist"
# Claude Code 启动函数(参数透传至 runcc.sh,支持 -n/--name 走 /rename 持久化)
cc() { {{BIN_PATH}}/runcc.sh "$@"; }
# 模型快捷方式: cc51, cc51 -n 后端, cc -n 后端 51 ...
alias cc45='cc 45'
alias cc45a='cc 45a'
alias cc46='cc 46'
alias cc47='cc 47'
alias cc5='cc 5'
alias cc5t='cc 5t'
alias cc51='cc 51'
# DeepSeek 快捷方式
alias ccds='cc -p deepseek ds'
alias ccdsf='cc -p deepseek dsf'
# tmux pane 级模型继承:从 pane option 读取模型配置(由 runcc.sh 写入)
# 覆盖 session 级环境变量,实现同 session 不同 pane 的模型隔离
if [ -n "${TMUX:-}" ]; then
_model="$(tmux show-option -pv @anthropic_model 2>/dev/null || true)"
if [ -n "$_model" ]; then
export ANTHROPIC_DEFAULT_HAIKU_MODEL="$_model"
export ANTHROPIC_DEFAULT_SONNET_MODEL="$_model"
export ANTHROPIC_DEFAULT_OPUS_MODEL="$_model"
fi
unset _model
fi
# Docker 组提示(仅在需要时显示)
if [ "${DOCKER_ENABLED:-true}" = "true" ] && [ -S /var/run/docker.sock ] && ! groups | grep -q docker; then
export DOCKER_GROUP_REQUIRED=1
fi
# ============================================================================
# VCS 感知提示符(覆盖 devcontainer 默认,支持 jj bookmark 显示)
# ============================================================================
# 在 bashrc 加载时检测 jj 仓库(只需一次,避免每次提示都调用 jj root)
__JJ_REPO=0
if command -v jj >/dev/null 2>&1 && jj root >/dev/null 2>&1; then
__JJ_REPO=1
fi
__vcs_prompt() {
local userpart='`export XIT=$? \
&& [ ! -z "${GITHUB_USER:-}" ] && echo -n "\[\033[0;32m\]@${GITHUB_USER:-} " || echo -n "\[\033[0;32m\]\u " \
&& [ "$XIT" -ne "0" ] && echo -n "\[\033[1;31m\]➜" || echo -n "\[\033[0m\]➜"`'
local vcsbranch='`\
if [ "${__JJ_REPO:-0}" = "1" ]; then \
BRANCH=$(jj bookmark list -r @- 2>/dev/null | sed "s/[*:].*//" | head -1); \
if [ -z "${BRANCH:-}" ]; then \
BRANCH=$(jj log -r "@-" --no-graph -T "change_id.short()" 2>/dev/null); \
fi; \
if [ -n "${BRANCH:-}" ]; then \
echo -n "\[\033[0;36m\](\[\033[1;31m\]${BRANCH}\[\033[0;36m\]) "; \
fi; \
else \
BRANCH="$(git --no-optional-locks symbolic-ref --short HEAD 2>/dev/null || git --no-optional-locks rev-parse --short HEAD 2>/dev/null)"; \
if [ -n "${BRANCH:-}" ]; then \
echo -n "\[\033[0;36m\](\[\033[1;31m\]${BRANCH}\[\033[0;36m\]) "; \
fi; \
fi`'
local lightblue='\[\033[1;34m\]'
local removecolor='\[\033[0m\]'
PS1="${userpart} ${lightblue}\w ${vcsbranch}${removecolor}\$ "
}
__vcs_prompt