diff --git a/.sisyphus/boulder.json b/.sisyphus/boulder.json deleted file mode 100644 index 2c6eb96..0000000 --- a/.sisyphus/boulder.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "active_plan": "/Users/lilithgames/.dotfiles/.sisyphus/plans/dotfiles-migration.md", - "started_at": "2026-03-04T02:43:04.177Z", - "session_ids": ["ses_349531330ffex65VV620eMrnTx"], - "plan_name": "dotfiles-migration", - "worktree_path": "/Users/lilithgames/.dotfiles" -} diff --git a/.sisyphus/plans/dotfiles-migration.md b/.sisyphus/plans/dotfiles-migration.md deleted file mode 100644 index c7202b5..0000000 --- a/.sisyphus/plans/dotfiles-migration.md +++ /dev/null @@ -1,448 +0,0 @@ -# Dotfiles 迁移计划 - -## TL;DR - -> **目标**: 完善 dotfiles 仓库,使其能够通过 Git 同步方式迁移到新 Mac -> -> **核心改进**: -> - 敏感数据排除机制 (.gitignore 完善) -> - Git 配置模板化 (自动提示新机器配置) -> - 增强 setup.sh 脚本 (一键初始化) -> - 完整文档 (README + 迁移指南) -> -> **交付物**: 4 个文件修改/创建 + 1 个文档 -> **预估工作量**: 约 60 分钟 - ---- - -## Context - -### 用户需求确认 -- **新机器**: 全新 Mac (需要完整安装所有工具) -- **敏感数据**: 不迁移,重新配置 (SSH、1Password、Git 签名密钥) -- **迁移方式**: Git 仓库同步 - -### 当前状态分析 - -**已包含配置**: -| 文件 | 说明 | -|------|------| -| `.zshrc` | Shell 配置 (286 行,60+ alias/函数) | -| `.tmux.conf` | tmux 配置 (124 行) | -| `git/config` | ⚠️ 包含真实用户信息 | -| `nvim/` | Neovim 完整配置 (27 Lua 文件) | -| `wezterm/`, `alacritty/`, `ghostty/` | 终端配置 | -| `starship.toml` | Shell 提示符 | -| `Brewfile` | Homebrew 包 (180 行) | -| `setup.sh` | ⚠️ 功能不完整 | - -**问题点**: -1. `git/config` 包含 name/email/signingkey - 需要模板化 -2. `.zshrc` 包含工作函数需要标记区分 -3. `.gitignore` 不够完善 -4. `setup.sh` 缺少完整初始化流程 - ---- - -## Work Objectives - -### 必须完成 -1. **完善 .gitignore** - 添加敏感数据排除模式 -2. **模板化 git/config** - 替换为占位符,添加初始化提示 -3. **增强 setup.sh** - 添加完整的新机器初始化流程 -4. **完善 README.md** - 添加使用说明和迁移指南 - -### 交付定义 -- [ ] `.gitignore` 包含完整的敏感数据排除 -- [ ] `git/config` 模板化,可自动检测并提示配置 -- [ ] `setup.sh` 包含 `init`, `install`, `backup`, `sync` 子命令 -- [ ] `README.md` 包含完整的使用文档 - ---- - -## Execution Strategy - -### 任务依赖关系 - -``` -Wave 1 (基础工作 - 可并行): -├── T1: 完善 .gitignore -├── T2: 模板化 git/config -└── T3: 标记 .zshrc 工作函数 - -Wave 2 (核心功能): -├── T4: 增强 setup.sh 脚本 -└── T5: 创建迁移检查清单 - -Wave 3 (文档): -├── T6: 完善 README.md -└── T7: 创建快速开始指南 - -Wave FINAL: -└── T8: 整体验证和清理 -``` - ---- - -## TODOs - ---- - -- [ ] 1. 完善 .gitignore - - **What to do**: - - 读取现有 `.gitignore` - - 添加敏感数据排除模式: - - SSH: `.ssh/` (已存在) - - 1Password: `.1password/` - - Kubeconfig: `.kube/` - - 环境变量: `*.env`, `.env*` - - 缓存: `__pycache__`, `.cache/`, `node_modules/` - - IDE: `.idea/`, `.vscode/` - - Mac: `.DS_Store`, `*.swp` - - 临时文件: `*.tmp`, `*.log` - - 确保不排除核心配置文件 - - **Must NOT do**: - - 移除已有的有效排除规则 - - 排除核心配置文件 - - **Recommended Agent Profile**: - - **Category**: `quick` - - **Skills**: [] - - Justification: 简单的文件编辑任务 - - **Parallelization**: - - **Can Run In Parallel**: YES - - **Parallel Group**: Wave 1 (with T2, T3) - - **Blocks**: T4 (setup.sh 会使用这些规则) - - **Blocked By**: None - - **Acceptance Criteria**: - - [ ] 新增的排除模式覆盖所有已知敏感路径 - - [ ] 不影响核心配置文件同步 - - [ ] git status 显示合理的未跟踪文件列表 - - **Evidence to Capture**: - - [ ] `.gitignore` 文件 diff - ---- - -- [ ] 2. 模板化 git/config - - **What to do**: - - 读取现有 `git/config` - - 替换真实信息为占位符: - - `user.name` → `YOUR_NAME` - - `user.email` → `YOUR_EMAIL` - - `user.signingkey` → `YOUR_SSH_SIGNING_KEY` - - 添加自动检测和提示脚本: - - 检测是否未配置 - - 提示用户运行配置命令 - - 保持其他有效配置不变 - - **Must NOT do**: - - 破坏现有的 Git 功能配置 - - 移除 diff/merge 工具配置 - - **Recommended Agent Profile**: - - **Category**: `quick` - - **Skills**: [] - - Justification: 简单的模板替换任务 - - **Parallelization**: - - **Can Run In Parallel**: YES - - **Parallel Group**: Wave 1 (with T1, T3) - - **Blocks**: T4 - - **Blocked By**: None - - **Acceptance Criteria**: - - [ ] 真实用户信息被替换为占位符 - - [ ] 添加配置检测逻辑 - - [ ] 脚本可正确检测未配置状态 - - **Evidence to Capture**: - - [ ] `git/config` 文件内容 - ---- - -- [ ] 3. 标记 .zshrc 工作函数 - - **What to do**: - - 读取 `.zshrc` - - 为工作相关函数添加标记注释: - - `klogs`, `bitnami_seal` → Kubernetes 相关 - - `rsync_work`, `replace_remote` → 工作环境相关 - - `git_config_work`, `git_config_play` → 多环境 Git - - 添加"工作函数"区块注释块 - - 在文件头部添加说明 - - **Must NOT do**: - - 修改任何函数逻辑 - - 删除任何功能 - - 改变现有的 alias 行为 - - **Recommended Agent Profile**: - - **Category**: `quick` - - **Skills**: [] - - Justification: 纯注释编辑任务 - - **Parallelization**: - - **Can Run In Parallel**: YES - - **Parallel Group**: Wave 1 (with T1, T2) - - **Blocks**: T4 - - **Blocked By**: None - - **Acceptance Criteria**: - - [ ] 工作函数被清晰标记 - - [ ] 文件头部有说明注释 - - [ ] 逻辑未改变 - - **Evidence to Capture**: - - [ ] `.zshrc` diff 显示新增注释 - ---- - -- [ ] 4. 增强 setup.sh 脚本 - - **What to do**: - - 读取现有 `setup.sh` - - 添加/完善以下函数: - - `init`: 全新系统安装 (Homebrew, Xcode, 基础工具) - - `install`: 安装 dotfiles 软链接 - - `backup`: 导出当前配置到 dotfiles 仓库 - - `sync`: 从 Git 恢复配置 - - `full-recover`: 完整新机器初始化 (init + install) - - 添加参数解析 - - 添加环境检测 - - 添加进度提示 - - 添加回滚能力 - - **Must NOT do**: - - 破坏现有功能 - - 删除现有的 recover 函数 - - **Recommended Agent Profile**: - - **Category**: `unspecified-high` - - **Skills**: [] - - Justification: 需要编写完整的 shell 脚本逻辑 - - **Parallelization**: - - **Can Run In Parallel**: NO - - **Parallel Group**: Wave 2 - - **Blocks**: None - - **Blocked By**: T1, T2, T3 (依赖 .gitignore 完善) - - **Acceptance Criteria**: - - [ ] `setup.sh init` 可执行全新系统安装 - - [ ] `setup.sh install` 可建立软链接 - - [ ] `setup.sh backup` 可导出配置 - - [ ] `setup.sh sync` 可从 Git 恢复 - - [ ] `setup.sh full-recover` 可一键初始化 - - [ ] 脚本有完善的错误处理 - - **Evidence to Capture**: - - [ ] setup.sh 完整内容 - - [ ] 测试脚本可执行性 - ---- - -- [ ] 5. 创建迁移检查清单 - - **What to do**: - - 创建 `CHECKLIST.md` 文件 - - 包含新机器配置检查清单: - - 系统设置 (Xcode, Command Line Tools) - - Homebrew 安装 - - dotfiles 同步 - - 1Password 配置 - - SSH 密钥生成 - - Git 配置 - - Kubernetes 配置 - - 验证步骤 - - 每个项目标记为自动/手动 - - **Must NOT do**: - - 包含实际敏感数据 - - **Recommended Agent Profile**: - - **Category**: `writing` - - **Skills**: [] - - Justification: 文档编写任务 - - **Parallelization**: - - **Can Run In Parallel**: YES - - **Parallel Group**: Wave 2 (with T4) - - **Blocks**: T6 - - **Blocked By**: T1, T2, T3 - - **Acceptance Criteria**: - - [ ] 检查清单覆盖完整迁移流程 - - [ ] 区分自动和手动步骤 - - [ ] 包含验证命令 - - **Evidence to Capture**: - - [ ] CHECKLIST.md 文件 - ---- - -- [ ] 6. 完善 README.md - - **What to do**: - - 读取现有 README.md - - 重写为完整的文档: - - 简介 - - 安装/快速开始 - - 各个组件说明 - - 迁移指南 - - 故障排查 - - 贡献方式 (如果有) - - 包含目录导航 - - **Must NOT do**: - - 破坏现有 README 结构(如果有效) - - **Recommended Agent Profile**: - - **Category**: `writing` - - **Skills**: [] - - Justification: 技术文档编写 - - **Parallelization**: - - **Can Run In Parallel**: NO - - **Parallel Group**: Wave 3 - - **Blocks**: None - - **Blocked By**: T5 (CHECKLIST) - - **Acceptance Criteria**: - - [ ] 包含完整使用说明 - - [ ] 包含迁移步骤 - - [ ] 可读性强 - - **Evidence to Capture**: - - [ ] README.md 更新内容 - ---- - -- [ ] 7. 创建快速开始指南 - - **What to do**: - - 创建 `QUICKSTART.md` 简明指南 - - 包含 3 步快速开始: - 1. 克隆仓库 - 2. 运行初始化 - 3. 配置个人信息 - - 包含最常用的命令 - - **Must NOT do**: - - 包含过多细节 - - **Recommended Agent Profile**: - - **Category**: `writing` - - **Skills**: [] - - Justification: 简单文档 - - **Parallelization**: - - **Can Run In Parallel**: YES - - **Parallel Group**: Wave 3 (with T6) - - **Blocks**: None - - **Blocked By**: T5 - - **Acceptance Criteria**: - - [ ] 3-5 分钟可完成基础配置 - - [ ] 包含所有必要步骤 - - **Evidence to Capture**: - - [ ] QUICKSTART.md 文件 - ---- - -- [ ] 8. 整体验证和清理 - - **What to do**: - - 运行 git status 检查所有变更 - - 验证所有修改的文件语法正确 - - 确保敏感数据未被提交 - - 清理临时文件 - - **Must NOT do**: - - 遗漏任何问题 - - **Recommended Agent Profile**: - - **Category**: `unspecified-low` - - **Skills**: [] - - Justification: 验证性任务 - - **Parallelization**: - - **Can Run In Parallel**: NO - - **Parallel Group**: Wave FINAL - - **Blocks**: None - - **Blocked By**: T1-T7 - - **Acceptance Criteria**: - - [ ] 所有文件变更已保存 - - [ ] 无敏感数据泄漏 - - [ ] 脚本可执行 - - **Evidence to Capture**: - - [ ] git status 输出 - - [ ] 最终文件列表 - ---- - -## Final Verification Wave - -### 验证清单 -- [ ] `.gitignore` 包含所有敏感路径 -- [ ] `git/config` 不包含真实用户信息 -- [ ] `setup.sh` 所有子命令可用 -- [ ] README.md 完整可用 -- [ ] CHECKLIST.md 覆盖完整流程 -- [ ] 无临时文件遗留 - ---- - -## Success Criteria - -### 验证命令 -```bash -# 检查敏感数据排除 -git status --porcelain | grep -E "\.(env|ssh|key)" || echo "No sensitive files staged" - -# 检查脚本可执行 -./setup.sh --help - -# 检查 README -cat README.md | head -20 -``` - -### 交付检查 -- [ ] 所有 TODO 完成 -- [ ] 文档完整 -- [ ] 脚本功能正常 -- [ ] 敏感数据已排除 - ---- - -## Commit Strategy - -单个提交包含所有变更: -- Message: `chore: 完善 dotfiles 迁移功能` -- Files: 所有修改的文件 -- Pre-commit: 无 (dotfiles 仓库特性) - ---- - -## 补充说明 - -### 后续步骤 (用户自行执行) -1. 在新机器上克隆仓库 -2. 运行 `setup.sh full-recover` -3. 配置个人信息 (Git, SSH, 1Password) -4. 验证所有工具正常工作 - -### 需要手动配置的项目 -- Git 用户信息 (name, email, signingkey) -- SSH 密钥 (需要重新生成) -- 1Password SSH agent (需要在新机器上配置) -- Kubeconfig (工作相关,不包含在 dotfiles 中) -- 特定工作环境的 alias 和函数 \ No newline at end of file diff --git a/.zshrc b/.zshrc index fb2cfa3..a535de4 100644 --- a/.zshrc +++ b/.zshrc @@ -5,6 +5,7 @@ # Work-related functions are marked with "# ==== WORK: xxx" comments. ############################################################################### +# -- Environment Variables -- export GOPATH=$HOME/.go export PNPM_HOME="$HOME/.pnpm" export BUN_HOME="$HOME/.bun" @@ -48,7 +49,6 @@ export CPPFLAGS=$CPPFLAGS export ZSH_HIGHLIGHT_MAXLENGTH=60 export GIT_EXTERNAL_DIFF=difft - FPATH="$brew_opt/share/zsh/site-functions:${FPATH}" DISABLE_MAGIC_FUNCTIONS=true @@ -56,7 +56,7 @@ HISTSIZE=10000 # Number of commands to remember in memory (in-session) SAVEHIST=50000 # Number of commands to save to the history file HISTFILE=~/.zsh_history # File where history is stored - +# -- Antigen for plugin management -- if [ -f "$HOME/.antigen/antigen.zsh" ]; then source "$HOME/.antigen/antigen.zsh" antigen use oh-my-zsh @@ -79,7 +79,46 @@ else curl -L git.io/antigen > $HOME/.antigen/antigen.zsh fi +# -- Aliases -- +alias ta='tmux a' +alias tl='tmux ls && read session && tmux attach -t ${session:-default} || tmux new -s ${session:-default}' +alias l='ls -l' +alias la='ls -a' +alias lla='ls -la' +alias lt='ls --tree' +alias kns='kubens' +alias kctx='kubectx' +alias kd='kubectl debug' +alias kk='kubectl krew' +alias kzeus='kubectl --context zeus ' +alias khybrid='kubectl --context hybrid' +alias kget='kubectl get' +alias kdesc='kubectl describe' +alias klog='kubectl logs' +alias kapply='kubectl apply' +alias gce='gh copilot explain' +alias gcs='gh copilot suggest' +alias vi='nvim' +alias batc='bat --paging=never' +alias batcp='bat --plain --paging=never' +alias fixscreen='sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.screensharing.plist && sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.screensharing.plist' +# do not use -r as it skips the non-regular files +alias tf_push='rsync -avhti . devops-cloud-1:~/meex-deploy/ --exclude=.terraform/ --exclude=.terraform.lock.hcl --exclude=terraform.tfstate' +alias tf_push_state='rsync -avhti . devops-cloud-1:~/meex-deploy/ --exclude=.terraform/ --exclude=.terraform.lock.hcl' +alias tf_pull_state='rsync -avhti devops-cloud-1:~/meex-deploy/terraform/terraform.tfstate terraform/.' +alias git_branch="git for-each-ref --sort=committerdate refs/heads/ --format='%(HEAD) %(color:yellow)%(refname:short)%(color:reset) - %(color:red)%(objectname:short)%(color:reset) - %(contents:subject) - %(authorname) (%(color:green)%(committerdate:relative)%(color:reset))'" +alias clean_tmux_session='ls ~/.tmux/resurrect/* -1dtr | head -n 100 | xargs rm -v' +alias pn='pnpm' +alias python='python3' +alias pip='pip3' +alias sed='gsed' +alias grep='ggrep' +alias tailscale="/Applications/Tailscale.app/Contents/MacOS/Tailscale" +alias ghostty='/Applications/Ghostty.app/Contents/MacOS/ghostty' +alias cc='claude --append-system-prompt-file ~/.config/opencode/AGENTS.md --model claude-opus-4.6' +alias oc='opencode' +# -- Functions -- # menu function m() { if [[ -n "$TMUX" ]]; then @@ -284,48 +323,75 @@ function bitnami_seal() { fi } +# Create dev workspace in tmux +# Usage: dev [-g] [session-name] +# default: Claude Code | Yazi (top-right) + shell (bottom-right) +# -g/--git: 2x2 layout adding lazygit (bottom-left) +function dev() { + local session="" + local layout="simple" + + for arg in "$@"; do + case "$arg" in + -g|--git) layout="full" ;; + *) session="$arg" ;; + esac + done + + session="${session:-$(basename $(pwd))}" + local cwd="$(pwd)" + + if tmux has-session -t "$session" 2>/dev/null; then + if [[ -n "$TMUX" ]]; then + tmux switch-client -t "$session" + else + tmux attach-session -t "$session" + fi + return + fi + + # Create session; first pane = left (Claude Code) + tmux new-session -d -s "$session" -c "$cwd" + local left + left=$(tmux display-message -p -t "${session}:1.1" "#{pane_id}") + + if [[ "$layout" == "full" ]]; then + # 2x2: Claude Code | Yazi / shell | lazygit + local tr + tr=$(tmux split-window -t "$left" -h -c "$cwd" -P -F "#{pane_id}") + local br + br=$(tmux split-window -t "$tr" -v -c "$cwd" -P -F "#{pane_id}") + local bl + bl=$(tmux split-window -t "$left" -v -c "$cwd" -P -F "#{pane_id}") + + tmux send-keys -t "$left" "cc" Enter + tmux send-keys -t "$tr" "yazi" Enter + tmux send-keys -t "$br" "lazygit" Enter + else + # simple: Claude Code (left) | Yazi (top-right) + shell (bottom-right) + local tr + tr=$(tmux split-window -t "$left" -h -c "$cwd" -P -F "#{pane_id}") + local br + br=$(tmux split-window -t "$tr" -v -c "$cwd" -P -F "#{pane_id}") + + tmux send-keys -t "$left" "cc" Enter + tmux send-keys -t "$tr" "yazi" Enter + fi + + tmux select-pane -t "$left" + + if [[ -n "$TMUX" ]]; then + tmux switch-client -t "$session" + else + tmux attach-session -t "$session" + fi +} + +# -- MISC Configuration -- zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS} command -v starship >/dev/null 2>&1 && eval "$(starship init zsh)" command -v direnv >/dev/null 2>&1 && eval "$(direnv hook zsh)" - -alias ta='tmux a' -alias tl='tmux ls && read session && tmux attach -t ${session:-default} || tmux new -s ${session:-default}' command -v lsd >/dev/null 2>&1 && alias ls='lsd' -alias l='ls -l' -alias la='ls -a' -alias lla='ls -la' -alias lt='ls --tree' -alias kns='kubens' -alias kctx='kubectx' -alias kd='kubectl debug' -alias kk='kubectl krew' -alias kzeus='kubectl --context zeus ' -alias khybrid='kubectl --context hybrid' -alias kget='kubectl get' -alias kdesc='kubectl describe' -alias klog='kubectl logs' -alias kapply='kubectl apply' -alias gce='gh copilot explain' -alias gcs='gh copilot suggest' -alias vi='nvim' -alias batc='bat --paging=never' -alias batcp='bat --plain --paging=never' -alias fixscreen='sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.screensharing.plist && sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.screensharing.plist' -# do not use -r as it skips the non-regular files -alias tf_push='rsync -avhti . devops-cloud-1:~/meex-deploy/ --exclude=.terraform/ --exclude=.terraform.lock.hcl --exclude=terraform.tfstate' -alias tf_push_state='rsync -avhti . devops-cloud-1:~/meex-deploy/ --exclude=.terraform/ --exclude=.terraform.lock.hcl' -alias tf_pull_state='rsync -avhti devops-cloud-1:~/meex-deploy/terraform/terraform.tfstate terraform/.' -alias git_branch="git for-each-ref --sort=committerdate refs/heads/ --format='%(HEAD) %(color:yellow)%(refname:short)%(color:reset) - %(color:red)%(objectname:short)%(color:reset) - %(contents:subject) - %(authorname) (%(color:green)%(committerdate:relative)%(color:reset))'" -alias clean_tmux_session='ls ~/.tmux/resurrect/* -1dtr | head -n 100 | xargs rm -v' -alias pn='pnpm' -alias python='python3' -alias pip='pip3' -alias sed='gsed' -alias grep='ggrep' -alias tailscale="/Applications/Tailscale.app/Contents/MacOS/Tailscale" -alias ghostty='/Applications/Ghostty.app/Contents/MacOS/ghostty' -alias cc='claude --append-system-prompt-file ~/.config/opencode/AGENTS.md --model claude-opus-4.6' -alias oc='opencode' export ZSH_COMPLETION_CACHE="${XDG_CACHE_HOME:-$HOME/.cache}/zsh" mkdir -p "$ZSH_COMPLETION_CACHE"