我的开发环境:pkking/dotfiles 配置解析

配置开发环境通常很麻烦。每次换新电脑或重装系统,都要重新装一遍软件、改配置、配路径,折腾大半天。为了省掉这些重复劳动,我把自己的配置整理成了 dotfiles 项目。

这篇文章不谈大道理,只聊聊我的配置里有什么,以及我是怎么让它们在不同机器上跑起来的。

在深入细节之前,先简单聊聊两个核心概念:dotfilesIaC

  • dotfiles:指的是系统中那些以“点”开头的隐藏配置文件(如 .zshrc, .gitconfig)。它们就像是软件的“基因”,定义了你所有工具的行为模式和操作逻辑。
  • IaC (Infrastructure as Code):原本是服务器运维领域“以代码定义基础设施”的思想。将其应用到个人开发环境,意味着你的软件安装和配置不再是手动点点点,而是通过可阅读、可执行的代码来定义。

为什么折腾 dotfiles?

如果你只有一台电脑,且环境永远不出问题,那确实没必要折腾。但在实际工作中,我发现环境管理是避不开的需求。

不再重复修补系统状态
以前我的配置散落在 $HOME 的各个角落,改个快捷键就像在给系统“打补丁”。现在我把配置看作代码,所有修改都有迹可循,再也不怕改乱了找不回来。

习惯的延续性
我经常在公司工作站、家里笔记本和远程开发机之间切换。肌肉记忆是很诚实的,统一的环境能让我把精力留在代码本身,而不是工具操作上。

快速“回血”的底气
重装系统不再是灾难。有了这套 dotfiles,我能在 15 分钟内找回绝大部分工作状态。这种确定性比什么都重要。


核心工具链

这套配置的核心理念是“现代、极简、自动化”。

1. 管理核心:Chezmoi

我没用传统的 ln -s 脚本,而是选择了 Chezmoi。它不仅能管理软链接,还能处理模板。比如,它能根据主机名自动切换 Git 邮箱(公司用公司邮箱,家里用私人的)。它还能配合 Bitwarden 管理 API Key,不用担心把私密信息传到公开仓库。

2. 终端:Zsh + Tmux + Starship

Zsh 负责交互,Tmux 负责会话持久化(断网也不怕进程挂掉),Starship 负责美化 Prompt。Starship 是用 Rust 写的,非常快,能一眼看到 Git 分支和运行环境状态。

3. 版本管理:Mise (强烈推荐)

这是我最喜欢的工具,它替代了 nvm、pyenv 等一堆语言管理工具。一个 mise.toml 就能搞定所有环境,性能比 asdf 好得多,而且不需要处理烦人的 shims。我的配置里预设了 Python 3.13 和 Node 24,开箱即用。

4. 字体与美学:Monaspace

为了盯着代码不疲劳,我选了 GitHub 的 Monaspace 字体。它支持连字,而且在不同字重下表现都很稳。配合 Xresources 配置,整套系统的配色很和谐。


为什么这套方案值得折腾?

很多人觉得配置环境是一次性的工作,但实际上,它的价值体现在长期的开发收益上:

  • 告别环境漂移:无论是在公司工作站还是家里,你的 Shell 插件、别名和工具版本永远同步,彻底消除“这套配置在那台机器上怎么没效”的烦恼。
  • 版本控制与实验:配置即代码,这意味着你可以利用 Git 的提交历史来实验新的方案。尝试新插件改挂了?直接 git reset 就能瞬间恢复。
  • 极速扩容:如果你需要同时维护多台远程开发机,或者经常在 Docker 容器里工作,这套方案能让你在秒级时间内克隆出一个完全熟悉的操作界面。
  • 降低认知负担:你不再需要记住几年前是怎么配置那个特定工具的,代码就是最好的文档。这种“确定性”带来的心理安全感是无价的。

部署流程

这套配置追求的是“一键搞定”。在新机器上的操作流程如下:

1
2
3
4
5
6
7
8
9
# 1. 装好 Chezmoi 和 Starship
sh -c "$(curl -fsLS get.chezmoi.io)" -- -b $HOME/.local/bin
curl -sS https://starship.rs/install.sh | sh

# 2. 拉取配置并初始化
chezmoi init pkking

# 3. 应用配置
chezmoi apply

应用配置后,Chezmoi 会自动调用脚本安装系统依赖。所有语言环境(Python、Node、Go)都会由 Mise 自动下载安装。你不需要手动去搜怎么装 Node,也不用忍受系统源里那些老旧的版本。所有逻辑都定义在 dot_config/mise.toml 中,保证了多台机器的环境绝对一致。


一点维护心得

  1. 保持解耦:各个组件的配置应该尽量独立。更换一个工具(比如换个终端模拟器)不应该影响到你的 Shell 或其他工作流。
  2. 尊重默认值:不要把工具改得面目全非。尽量保持软件的原生逻辑,只针对真正的痛点做定制。这样在环境极度受限时,你也能保持基本的战斗力。
  3. 保持轻量:我利用 Chezmoi 的 external 功能自动拉取上游插件(如 oh-my-zsh),这样我的主仓库里只存逻辑,不存第三方代码。

维护一套 dotfiles 是个持续的过程。如果你也在烦恼 Linux 环境管理,可以试试 Chezmoi + Mise 的组合。把时间留给创造,而不是留给琐碎的配置。

欢迎去 GitHub 交流。

Happy Hacking!