乐于分享
好东西不私藏

AI编程之旅-「一切皆代码」从 dotfiles 到完整工作流的哲学

AI编程之旅-「一切皆代码」从 dotfiles 到完整工作流的哲学

哲学 · 体系 · 传承

一切皆代码

从 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 协作层
pi/ (rules + 扩展配置)、aider/、opencode/
编辑器层
my_custom_nvim/(LazyVim + 32 插件)
终端复用层
tmux/、zsh/、starship/、atuin/
终端模拟层
ghostty/
Git 工具
git/、lazygit/、gitmux/
TUI 工具
yazi/、sesh/、lazydocker/、atac/
命令行
bat/、curl/、aria2/、tssh/
窗口管理
yabai/、skhd/、hammerspoon/、karabiner/

每个目录的命名对应 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——不是"完美的最终方案",而是我当前这个时间点的真实工作环境。它还会继续演化,就像我们的工具和习惯一样。

系列文章索引

#
标题
主题
1
当终端学会了思考
AI 辅助开发元年
2
Ghostty + tmux + zsh
我的数字家园
3
Neovim + LazyVim
键盘上的 IDE
4
代理人团队
当 AI 学会分工协作
5
一切皆代码
从 dotfiles 到完整工作流的哲学

系列文章「从终端到 AI——一个开发工具极客的工具进化史」完结全部 5 期配置后续会开源在 GitHub:github.com/jackice/dotfiles本文写于 2026 年 6 月,欢迎交流讨论