Dotfiles 是用于自定义开发环境的配置文件——包括 shell 设置、编辑器偏好、工具配置等。之所以叫 "dotfiles",是因为它们通常以点开头的文件名(如 .bashrc、.gitconfig),在 Unix 系统中是隐藏文件。
本 dotfiles 目前支持以下环境:
- macOS
- linux: 目前只尝试过 debian - bookworm
如果你想从干净的 Mac 环境开始,请参阅"如何重装 macOS"。
安装 Xcode
- 安装或更新 Xcode 到最新版本,否则安装可能会失败
- 安装 Xcode Command Line Tools
$ xcode-select --install克隆仓库到 $HOME/.dotfiles:
git clone https://github.com/zoumo/dotfiles.git ~/.dotfiles
cd ~/.dotfiles
# 完整安装(默认)- 安装所有基础和附加包
bash ./script/bootstrap
# 最小安装 - 只安装基础包,跳过附加包
DOT_MODE=mini bash ./script/bootstrap
# 强制重置 macOS 默认设置(默认只运行一次)
FORCE_MACOS_DEFAULTS=1 bash ./script/bootstrap注意: 安装完成后会自动将默认 shell 切换为 fish。
安装完成后,你的系统将包含以下内容:
- 语言工具: Go, Node.js, Rust, Python, Java (通过 mise/uv 管理)
- Shell: fish + Oh-My-Fish + starship 提示符
- 终端: Alacritty (GPU 驱动的现代终端)
- 编辑器: Neovim + LazyVim 配置
- Docker: OrbStack (macOS 上的 Docker 替代品)
- 窗口管理: Loop (优雅的窗口管理工具)
- 状态栏: Ice (macOS 菜单栏管理器)
点击展开完整软件包列表
GNU 核心工具:
- coreutils, findutils, gnu-sed, bash
开发工具:
- make, libxml2, libxslt, libiconv, gnupg, wget, ctags, grc, git-flow
实用工具:
- mackup, trash, cheat, watch, colordiff, fx, tesseract, dos2unix
现代替代工具:
- eza (ls), bat (cat), dust (du), duf (df), zoxide (cd), fd (find), procs (ps), ripgrep (grep)
开发辅助:
- fzf, starship, jnv, difftastic, tealdeer, kubectx, krew, dive, switcher
- alacritty - GPU 驱动的跨平台终端
- mos - 平滑鼠标滚动
- maczip - 免费解压软件
- iina - 现代播放器
- eazydict - 翻译工具
- orbstack - Docker 替代品
- bleunlock - 蓝牙解锁
- loop - 窗口管理
- jordanbaird-ice - 菜单栏管理
- font-hack-nerd-font
- font-caskaydia-cove-nerd-font
为什么选择这些工具?以下是每个关键工具的选型理由。
Fish (Friendly Interactive Shell) 是一个为用户友好设计的现代 shell:
- 开箱即用的自动补全:无需复杂配置,Fish 提供强大的命令、参数和路径补全
- 语法高亮:命令在输入时就会显示不同颜色,帮助识别语法错误
- 基于 Web 的配置界面:通过
fish_config可以在浏览器中配置主题和函数 - 简洁的脚本语法:比 Bash 更直观,没有 POSIX 的历史包袱
- 与 Oh-My-Fish 配合:提供插件生态和主题支持
唯一需要注意的是 Fish 不完全兼容 POSIX,一些 Bash 脚本可能需要调整。但日常使用中,Fish 的优势远大于这个限制。
Alacritty 是一个使用 GPU 加速的现代终端模拟器:
- 极致性能:利用 GPU 渲染,滚动和输出速度远超传统终端
- 最小化设计:不内置标签页、分屏等功能,遵循 Unix 哲学——专注做一件事
- 配置简单:使用 TOML/YAML 配置文件,无需 GUI 设置
- 跨平台:macOS、Linux、Windows 都可用相同配置
为什么不用 iTerm2?iTerm2 功能丰富但臃肿,Alacritty 选择与 tmux 配合,性能更好。
OrbStack 是 macOS 上 Docker Desktop 的现代替代品:
- 启动速度:秒级启动,Docker Desktop 需要数十秒
- 资源占用低:内存占用仅为 Docker Desktop 的 1/3
- 原生网络:无需端口转发,容器端口直接可用
- 无缝集成:完全兼容 Docker CLI 和 docker-compose
- 额外功能:内置 Linux 虚拟机和 Kubernetes 支持
对于开发者,OrbStack 带来的体验提升是革命性的——不再需要等待 Docker 启动,不再因为资源占用而卡顿。
macOS 的命令行工具来自 BSD,与 Linux (GNU) 有细微差异。安装 GNU 工具的原因:
- 跨平台脚本一致性:编写能在 macOS 和 Linux 上运行的脚本
- 更丰富的功能:GNU 工具通常有更多选项和扩展
- 脚本兼容性:许多开源项目的构建脚本假设 GNU 环境
| GNU 工具 | 替代的 BSD 工具 | 主要差异 |
|---|---|---|
coreutils |
BSD userland | date -d, ls --color 等 GNU 扩展 |
gnu-sed |
BSD sed | 支持 -i 直接修改文件(无需备份后缀) |
findutils |
BSD find | 更丰富的 -exec 语法和选项 |
通过在 PATH 中添加 GNU 工具前缀(如
gdate,gsed),可以同时保留两者,按需使用。
mise (前身为 rtx) 是一个统一的多语言版本管理器:
- 统一管理:一个工具管理 Go、Node.js、Rust、Java 等所有语言版本
- 兼容 asdf:可以直接使用 asdf 插件生态
- 自动切换:进入项目目录自动切换到配置的版本
- 速度快:用 Rust 编写,比 asdf 快 10-100 倍
- 无需 shim:直接操作 PATH,没有性能损耗
告别 nvm、pyenv、goenv、sdkman 等多个版本管理器,mise 一个就够了。
uv 是 Astral 公司用 Rust 编写的极速 Python 工具:
- 安装速度:比 pip 快 10-100 倍
- 统一工具链:替代 pip、pip-tools、pipx、poetry、pyenv、virtualenv
- 自动虚拟环境:运行脚本自动创建和管理 venv
- 项目管理:内置依赖解析和 lock 文件支持
- 工具安装:
uv tool install替代 pipx
为什么不用 pyenv?uv 安装 Python 的速度比 pyenv 快很多,而且它还能管理依赖和虚拟环境,一站式解决所有 Python 开发需求。
Neovim 是 Vim 的现代分支,LazyVim 是一个预配置的 Neovim 发行版:
- 启动速度快:Lua 配置比 VimScript 快得多
- LSP 原生支持:内置语言服务器协议,无需插件即可获得智能补全
- Tree-sitter:更精准的语法高亮和代码理解
- LazyVim 开箱即用:预配置了 LSP、格式化、Git、文件树等常用功能
- 插件生态:使用 lazy.nvim 插件管理器,延迟加载,按需安装
为什么不用 VS Code?Neovim + LazyVim 提供了 VS Code 级别的功能,但保持了 Vim 的键盘操作效率。一旦适应,编码速度会显著提升。
自动修改以下的系统默认配置 macOS 默认设置
| 工具 | 管理工具 | 说明 |
|---|---|---|
| Go | mise | 阿里云镜像 |
| Node.js | mise | 清华镜像 |
| Rust | mise | 阿里云 rustup 镜像 |
| Java | mise | 通过 Homebrew 安装 |
| Python | uv | 极速安装、自动激活虚拟环境、清华 PyPI 镜像 |
用现代替代品替换传统命令:
| 传统命令 | 现代替代品 | 描述 |
|---|---|---|
| ls | eza | 带颜色和图标 |
| cat | bat | 带语法高亮 |
| find | fd | 更快的 find |
| grep | ripgrep | 更快的 grep |
| du | dust | 更直观的 du |
| df | duf | 更美观的 df |
| ps | procs | 现代 ps |
| top | btop | 更美观的 top |
| cd | zoxide | 智能目录跳转 |
点击展开配置文件清单
安装时会创建以下软链接:
| 文件路径 | 用途 |
|---|---|
~/.config/.gitconfig |
Git 全局配置 |
~/.config/starship.toml |
Starship 提示符配置 |
~/.config/alacritty/alacritty.toml |
Alacritty 终端配置 |
~/.config/fish/functions/ |
Fish shell 自定义函数 |
~/.config/omf/init.fish |
Oh-My-Fish 初始化配置 |
~/.config/omf/before.init.fish |
Fish 启动前配置 |
~/.config/smug/zoumo.yml |
Tmux 会话管理配置 |
~/.kube/switch-config.yaml |
kubectl context 切换配置 |
~/.tmux.conf.local |
Tmux 本地配置 |
~/.mvnvm.properties |
Maven 版本管理配置 |
点击展开别名列表
| 别名 | 命令 | 说明 |
|---|---|---|
| ls | eza | 现代化 ls |
| la | eza -glhA | 显示隐藏文件和详情 |
| tree | eza -T -L3 | 树形显示目录 |
| cat | bat | 语法高亮 cat |
| top | btop | 现代化 top |
| rm | trash | 安全删除(仅 macOS) |
| vi | nvim | 使用 Neovim |
| vim | nvim | 使用 Neovim |
| fcd | _fzf_search_directory | fzf 目录搜索 |
| fps | _fzf_search_processes | fzf 进程搜索 |
| fh | _fzf_search_history | fzf 历史搜索 |
| fgl | _fzf_search_git_log | fzf Git 日志搜索 |
| jv | fx | JSON 查看器 |
| yv | fx --yaml | YAML 查看器 |
| mux | smug start zoumo | 启动 tmux 会话 |
参考 开发指南
使用 mise 管理版本:
mise ls # 查看已安装版本
mise install go@1.25 # 安装特定版本
mise use go@1.25 # 设置项目版本