Skip to content

moonbycc/devdeck

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

devdeck

断线不丢、任务一目了然、脱离 IDE 的远程开发驾驶舱 —— mosh + tmux + 一个换肤的 fzf 任务控制台

把 SSH 进开发机的日常收敛成几条直觉命令,并解决三个老痛点:

  1. 断线丢窗口 —— mosh 抗断网 + tmux 常驻会话,合盖、换网、断 Wi-Fi 回来原样还在。
  2. 并行任务记不清 —— 一个任务 = 一个 tmux 会话;Ctrl-b 空格 弹出可视化任务选择器(选/建/删/实时预览),状态栏常驻当前任务名。
  3. 离不开 IDE —— 端口转发做成命令 + 可视化控制台(devport),不再依赖 IDE 的转发面板。

外加一套 8 款主题(EVA MAGI / 赛博朋克2077 / 攻壳机动队 / 黑客帝国 / 阿基拉 / 银翼杀手 / TRON / 辐射 Pip-Boy),状态栏带按主题渲染的动画进度条与额度条,一键预览切换。


前置检查清单(Prerequisites)

装之前先确认这 4 条——它们是你的环境要提供的,devdeck 不负责(也搬不过来):

  • 本机已经能 ssh <开发机> 连上。 这是最大前提。认证方式(密钥 / 密码 / Kerberos / 跳板机)是你自己的事,devdeck 不掺和——只要 ssh <开发机> echo ok 能通就行。连不上请先解决登录。
  • 依赖装好。 开发机:tmux≥3.3fzf≥0.38bashpython3(额度条用)、ss(列端口用)。本机:moshfzfsshlsof。安装脚本会检查并报缺;macOS 上能自动 brew install,Linux 上需你用包管理器装。
  • 终端够格。 用支持真彩色 + OSC52 的终端(Ghostty / iTerm2 / WezTerm 等),否则主题配色和复制会不正常。devall 默认找 Ghostty,用别的终端改 devcmds.zsh 里一行即可。
  • 这是两台机器的事。 开发机跑 install-server.sh,本机跑 install-client.sh,不是单机一键。

一句话:有一台能 ssh 上去的开发机 + 一个像样的终端,就能装;连 ssh 都没通的话先弄登录。


它由什么组成

开发机(server)                          本机/笔记本(client)
─────────────────                        ────────────────────
~/.local/bin/devtheme  主题引擎(8套)       ~/.devcmds.zsh   dev/devall/fwd/devport/devsync...
~/.local/bin/tpick     任务选择器           ~/.devport       端口转发控制台
~/.local/bin/rlbar     额度进度条           ~/.devdeck.conf  开发机地址(DEVHOST)
~/.tmux.conf           tmux + 主题挂载
~/.claude/statusline.sh  写额度数据(可选)
~/devcmds.zsh ~/devport.sh  命令源(供客户端 devsync 拉取)

连接层用 mosh(抗断线);端口转发单独走一条 SSH ControlMaster(mosh 不支持转发)。


依赖

  • 开发机tmux ≥ 3.3、fzf ≥ 0.38、bash、常规 coreutils;ss(iproute2,给 devport 列端口用);python3(仅 statusline 额度条需要)。
  • 本机moshfzfsshlsof(devport 用;macOS 自带)。终端推荐能透传真彩 + OSC52 的(Ghostty / iTerm2 / WezTerm 等)。

前提:本机已经能 ssh <开发机> 连上。认证方式是你自己的事(密钥 / 密码 / Kerberos / 跳板…),devdeck 不掺和认证,只要 ssh 能通即可。


安装

# 在两台机器上都把仓库拿到(或至少开发机)
git clone <this-repo> devdeck

# ① 开发机上
cd devdeck && bash install-server.sh

# ② 本机上(会问你开发机地址,写进 ~/.devdeck.conf)
cd devdeck && bash install-client.sh

装完开个新终端:

dev            # 连开发机 + 弹任务选择器

没法在开发机上 clone?把仓库 server/ 内容手动拷过去也行;或在本机 clone 后用 scp -r devdeck/server <开发机>: 再到开发机跑 install-server.sh


用法速查

命令 作用
dev 连开发机并弹任务选择器(fzf)
dev <名字> 直达 / 新建名为 <名字> 的任务会话
devall 为每个任务各开一个本机终端窗口(默认 Ghostty)
fwd <端口> [本机端口] 转发开发机端口到本机(会记住,断线/重开窗口自动恢复)
unfwd <端口> 取消某条转发(并从记录里删除)
fwdstop 断开转发连接(保留记录,可恢复)
fwdrestore 手动重连所有记住的转发
fwdclear 清空转发记录(以后不再自动恢复)
devport 端口转发可视化控制台(空格 开/关)
devtheme 弹主题预览选择器;devtheme <名> 直接切
devsync 从开发机同步最新命令文件

端口转发自动恢复:转发走的是独立 SSH 隧道(mosh 不支持转发),断网/休眠会断开。devdeck 把开过的转发记到 ~/.devfwd新开窗口时若隧道已断会后台静默重连,不用手动重开。

tmux 内Ctrl-b 然后 空格 = 任务选择器;Ctrl-b T = 主题选择器;Ctrl-b m = 临时开关鼠标。 复制:按住 Shift 拖选(走终端原生选择 → 系统剪贴板)。


主题

devtheme            # 预览选择器,↑↓ 看效果,Enter 应用
devtheme cyber      # 直接切
devtheme show       # 列出全部

8 款:magi(EVA)· cyber(2077)· ghost(攻壳)· matrix(黑客帝国)· akira(阿基拉)· blade(银翼杀手)· tron · pipboy(辐射)。每套都有自己的配色、fzf 边框、状态栏徽标,以及一条按主题做花活的动画进度条(八级子格 / 故障闪烁 / 代码雨 / 能量搏动 / 光扫 / 光迹 / CRT 扫描线…),靠 tmux 每秒刷新驱动。


状态栏额度条(可选)

进度条的数据来自 Claude Code 的 statusline。把它挂上即可,在开发机 ~/.claude/settings.json

{ "statusLine": { "type": "command", "command": "~/.claude/statusline.sh" } }

statusline.sh 会把 5h/7d 额度写到 /tmp/claude_ratelimit,tmux 状态栏右侧的 rlbar 据此按当前主题渲染进度条 + 刷新倒计时。不挂也不影响其它功能,只是状态栏没有额度条。


Ghostty tab 状态灯(可选)

让每个终端 tab 的标题显示当前对话状态,扫一眼就知道哪个在跑、哪个等你:

含义
正在跑
答完了,轮到你
⚠️ 卡住,待你确认/授权
💤 就绪

原理:tmux set-titles(已在 tmux.conf)把会话变量 @claude_status 透传成终端标题;Claude Code 的 hooks 在状态切换时调用 ~/.local/bin/claude-tmux-status 写入。启用:把 server/claude-hooks.example.json 里的 4 个 hooks 合并~/.claude/settings.json(已有 hooks 就并入,别整体覆盖)。tab 标题即变成 ✅ 任务名。想换图标改 claude-tmux-status 里那张表。

mosh 会给标题加 [mosh] 前缀;dev/devall 已用 MOSH_TITLE_NOPREFIX=1 去掉。


自定义点

  • 开发机地址~/.devdeck.conf 里的 DEVHOST
  • 隐藏会话:名字以 _ 开头的 tmux 会话不会出现在选择器 / devall 里(适合放后台杂活)。
  • devall 的终端:默认找 ghostty;改 devcmds.zshdevall()gh=... 换成 iTerm/WezTerm 等。
  • UI 语言:界面文案是中文,集中在 server/bin/devtheme(主题文案)、tpickdevport.shstatusline.sh,按需替换。

已知限制

  • mosh 不支持端口转发,所以转发单独走 SSH ControlMaster(socket ~/.ssh/cm-dev)——首次转发会单独认证一次。
  • OSC52 剪贴板不经 mosh 透传,所以复制用终端原生 Shift+拖
  • tpick/devport 的 fzf 用了 --border=sharp--border-label 等;fzf < 0.38 可能不支持部分参数。

目录结构

devdeck/
├── install-server.sh        # 开发机安装
├── install-client.sh        # 本机安装
├── devdeck.conf.example      # 客户端配置样例
├── server/
│   ├── bin/{devtheme,rlbar,tpick,claude-tmux-status}
│   ├── tmux.conf
│   ├── claude-hooks.example.json
│   └── statusline.sh
└── client/
    ├── devcmds.zsh
    └── devport.sh

License

MIT,见 LICENSE

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages