config-cli 是一个用于管理本机 ~/.config 配置的命令行工具。它可以扫描配置项、交互选择需要管理的配置、上传到 GitHub 仓库,并在另一台机器上从 GitHub 下载后恢复。
- 扫描
~/.config顶层文件和目录。 - 交互式选择要上传或下载的配置。
- 使用单个 GitHub 仓库保存所有配置。
- 使用
manifest.json记录配置元数据。 - 下载恢复前自动备份本机已有配置。
- 拒绝 manifest 中的绝对路径和路径穿越,避免覆盖
~/.config之外的文件。
- Node.js
>=20.11 pnpmgit- GitHub CLI:
gh
上传前需要先登录 GitHub CLI:
gh auth login
gh auth status- 设置默认 GitHub 配置仓库:
config-cli repo set git@github.com:<user>/<repo>.git- 扫描并保存最近选择:
config-cli scan- 上传本机配置:
config-cli upload- 在另一台机器上设置同一个仓库并下载:
config-cli repo set git@github.com:<user>/<repo>.git
config-cli download也可以不设置默认仓库,直接传入仓库 URL:
config-cli upload git@github.com:<user>/<repo>.git
config-cli download git@github.com:<user>/<repo>.git扫描 ~/.config 下的顶层文件和目录,弹出多选列表,并把本次选择保存为最近选择。
config-cli scan说明:
- 只扫描
~/.config的第一层。 - 会跳过
~/.config/config-cli,避免把工具自身状态上传。 - 不会修改 GitHub 仓库,也不会覆盖本地配置。
选择本机 ~/.config 下的配置并上传到 GitHub 仓库。
config-cli upload
config-cli upload git@github.com:<user>/<repo>.git行为:
- 先检查
gh auth status。 - 交互选择要上传的配置。
- clone 目标仓库到临时目录。
- 将选中的配置写入仓库的
configs/目录。 - 生成或更新
manifest.json。 - 执行
git add、git commit、git push。 - 上传成功后保存默认仓库 URL 和最近选择。
如果不传 repo,CLI 会提示输入已有仓库 URL,或通过 gh repo create 创建新的私有仓库。
从 GitHub 仓库拉取配置,交互选择要恢复的配置项。
config-cli download
config-cli download git@github.com:<user>/<repo>.git仓库来源优先级:
- 命令行传入的
[repo] config-cli repo set <url>保存的默认仓库
恢复行为:
- clone 仓库到临时目录。
- 读取并校验
manifest.json。 - 选择要恢复的配置。
- 如果本机目标路径已存在,先备份到
~/.config/config-cli/backups/<timestamp>/<name>。 - 再把远端配置复制到
~/.config/<name>。
保存默认 GitHub 仓库 URL。
config-cli repo set git@github.com:<user>/<repo>.git默认仓库会写入:
~/.config/config-cli/config.json
查看当前保存的默认 GitHub 仓库 URL。
config-cli repo get上传后的仓库结构如下:
.
├── configs
│ ├── nvim
│ │ └── init.lua
│ └── starship.toml
└── manifest.json
configs/<name> 对应本机:
~/.config/<name>
manifest.json 示例:
{
"version": 1,
"generatedAt": "2026-04-30T00:00:00.000Z",
"entries": [
{
"name": "nvim",
"relativePath": "nvim",
"kind": "directory",
"updatedAt": "2026-04-30T00:00:00.000Z",
"fileCount": 12,
"sourceHost": "my-mac"
}
]
}工具自身配置保存位置:
~/.config/config-cli/config.json
下载恢复时的备份位置:
~/.config/config-cli/backups/<timestamp>/<name>
例如恢复 nvim 时,如果本机已有 ~/.config/nvim,会先备份到:
~/.config/config-cli/backups/2026-04-30T12-00-00-000Z/nvim
v1 只管理 ~/.config 下的顶层配置,不处理:
~/.zshrc~/.ssh~/.gitconfig- 其他 home 根目录 dotfiles
下载时会校验 manifest 中的路径:
- 拒绝绝对路径。
- 拒绝
..路径穿越。 - 只恢复到
~/.config/<relativePath>。
先登录 GitHub CLI:
gh auth login先设置默认仓库,或直接给 download 传入仓库 URL:
config-cli repo set git@github.com:<user>/<repo>.git
config-cli download查看本次恢复输出中的 backup 路径,或进入备份目录手动复制回来:
ls ~/.config/config-cli/backups如果上传的配置与远端一致,CLI 不会创建新的 commit。
pnpm run lint
pnpm run typecheck
pnpm run test
pnpm run build