哲学 · 体系 · 传承 一切皆代码从 dotfiles 到完整工作流的哲学用 stow 管理 25+ 工具配置,实现"换电脑即装即用"的终极开发环境 |
如果你明天换一台新电脑,多长时间能恢复到现在的开发环境?对我来说,答案是一个 git clone 和一条 stow 命令的时间。不是因为有什么神奇的一键脚本,而是因为过去两年我养成了一个习惯:把所有工具的配置当作代码一样管理。这是整个系列的最后一期——不是讲某个具体工具,而是讲一个更大的问题:如何让前面四期搭建的所有东西,不依赖任何一台具体的机器。
配置文件的流浪:从手动拷贝到版本控制
每个程序员都有过这样的经历:换电脑或重装系统后,发现自己忘记了某个工具的配置藏在哪里。
我经历过三个阶段的进化:阶段一:手动拷贝——换电脑时把 `~/.config`、`~/.zshrc`、`~/.tmux.conf` 手动拷贝到 U 盘。丢三落四,经常忘了某个文件。阶段二:iCloud 同步——把配置文件放在 iCloud 目录下。看似解决了同步问题,但多台机器的环境差异(比如公司 Mac 的 Homebrew 路径和个人 Mac 不同)导致配置需要 if-else 判断,越来越复杂。阶段三:Git + Stow——终于找到了正确的方式。每个工具的配置独立一个目录,用 GNU Stow 管理符号链接,用 Git 做版本控制。干净、清晰、可复用。 |
GNU Stow:符号链接的艺术
stow 的原理极其简单:在你的 dotfiles 仓库中,按目标路径组织目录结构。运行 stow 时,它在 home 目录下创建指向仓库中文件的符号链接。
以我的 nvim 配置为例:
1 仓库中的目录结构
dotfiles/└── my_custom_nvim/ └── .config/ └── nvim/ ├── init.lua └── lua/... |
2 执行安装
$ cd ~/dev/dotfiles$ stow my_custom_nvim -t ~/ |
3 结果
~/.config/nvim/init.lua → ~/dev/dotfiles/my_custom_nvim/.config/nvim/init.lua |
关键洞察:仓库中的文件是"源",home 目录下的符号链接是"镜像"。你直接在 home 目录下修改配置文件,就等于修改了仓库中的源文件。然后 git commit、git push——你的配置就有了版本历史。
我的 dotfiles 全貌:25+ 工具的配置总览
我的 dotfiles 仓库(github.com/jackice/dotfiles)目前管理了超过 25 个工具的配置。按我们前面四期文章的四层架构来分类:
| AI 协作层 | |
| 编辑器层 | |
| 终端复用层 | |
| 终端模拟层 | |
| Git 工具 | |
| TUI 工具 | |
| 命令行 | |
| 窗口管理 |
每个目录的命名对应 stow 的模块名。换新电脑时,只需要:
git clone my-dotfiles → stow ghostty tmux zsh my_custom_nvim pi git starship -t ~/ → 开发环境就位 |
全栈联动:从打开终端到完成开发的完整链路
至此,整个系列的四层技术栈已经全部就位。让我用一个完整的日常工作流来展示它们是如何联动的:
1 启动
打开 Ghostty(Cmd+Space → ghostty → Enter)。tmux-continuum 自动恢复上次的全部 session——Neovim 打开的 4 个项目、lazygit 的状态、跑的测试终端——全部原样回来。 |
2 编码
在 Neovim 中写代码。LSP 实时提示错误,blink.cmp 智能补全,gitsigns 显示未提交变更。需要查数据库?nvterm 打开终端,dadbod 查 SQL。 |
3 AI 接手
需要改一个模块?Neovim 中 leader+ai 呼叫 pi-agent。Scout 先调研代码库,Planner 制定方案,Worker 按方案修改文件。切换到 tmux 的另一个窗口继续写文档——prefix+n 开启监控,Worker 完成后系统自动弹出通知。 |
4 审查和提交
Reviewer Agent 审查改动。lazygit 中查看 diff,commit 并 push。tmux 的 silence monitor 再次通知:"任务完成,代码已提交。" |
整个流程中,我从未离开终端窗口。没有 Dock 上找图标、没有窗口切换的动画、没有鼠标拖拽。全程键盘操作、全程上下文保持、全部工具互联。
给新手的渐进式搭建路线
如果你读完了整个系列,但面对这么多工具不知道从哪开始——不要试图一次性搭建全部。这是我的建议路线:
1 第一周:先搭终端
装 Ghostty + tmux + zsh。配置好字体(JetBrainsMono Nerd Font)、主题(Catppuccin Mocha)、基础别名(ls=eza、cat=bat)。让自己在终端里"待得住"。 |
2 第二周:上编辑器
装 Neovim + LazyVim。先不要碰任何插件——让 LazyVim 的默认配置带你熟悉 Neovim 的编辑模式。一周后再开始把 vscode 的功能一个一个迁移——先 LSP、再补全、再 git。 |
3 第三周:引入 AI
装 pi-agent。从简单任务开始——让它帮你写个函数、修个小 bug。熟悉 Rules 体系后,再尝试写 Spec、做 Plan。Superpowers 的 brainstorming 和 writing-plans 是最好的切入点。 |
4 第四周:上 stow
把前三周搭好的 Ghostty、tmux、zsh、Neovim 配置全部迁移到 dotfiles 仓库,用 stow 管理起来。从此以后,改配置 = git commit,换电脑 = git clone + stow。 |
工具应该适应你的工作方式,而不是反过来。一步到位不如渐进演化。 |
开发环境是程序员最重要的「元工具」
五篇文章、两万多字——如果你读到了这里,我想你已经理解了我为什么对配置这件事如此执着。
开发环境不是"有了就行"。它是你每天 8 小时都在用的东西。你在它上面花的每一分钟配置时间,都会在未来几千个小时的工作中被摊销。一个顺手的环境让思维流动,一个别扭的环境让思路中断——而思路一旦中断,恢复的代价远超我们的直觉。
从 Ghostty 到 tmux、从 LazyVim 到 pi-agent、从 subagents 到 stow——这个系列记录的不只是一套工具的配置方法,更是一种对待开发环境的哲学:
终端是家,值得装修。编辑器是手的延伸,值得打磨。AI是同事,值得培训。配置是资产,值得版本控制。—— 一个开发工具极客的进化史,暂告一段落。 |
感谢你陪我从第一行看到了最后一行。所有的配置后续会开源在 github.com/jackice/dotfiles——不是"完美的最终方案",而是我当前这个时间点的真实工作环境。它还会继续演化,就像我们的工具和习惯一样。
系列文章索引
系列文章「从终端到 AI——一个开发工具极客的工具进化史」完结全部 5 期配置后续会开源在 GitHub:github.com/jackice/dotfiles本文写于 2026 年 6 月,欢迎交流讨论
夜雨聆风