一个跨平台(GraalVM)的命令行工具,用于自动化新操作系统的环境配置流程。支持 Windows、macOS 和 Linux 主流操作系统。
- 🖥️ 跨平台支持 - Windows (winget)、macOS (brew)、Linux (可配置包管理器)
- 🚀 一键配置 - 自动化环境变量设置、dotfiles 同步和软件包安装
- 📦 原生可执行文件 - 无需安装 JVM 即可运行
- 🔧 幂等操作 - 所有操作均可重复执行,确保环境一致性
- 🔄 多种同步方式 - 当前支持 Git,未来计划支持坚果云、NextCloud、i iCloud 等
- 📦 平台默认包管理器 - Windows(winget)、macOS(brew)、Linux(apt)
- ⚙️ 系统初始化 - 自动检测和配置开发环境
- 🔌 可扩展的交互式终端 - 基于模块化设计,支持用户自定义命令
- 🆚 对标国际先进工具 - 与chezmoi等知名dotfiles管理工具功能对标
- XDG目录规范 (~/.config/df)
如果你有以下需求,这个工具会很适合你:
- 需要在 Windows、macOS、Linux 三大操作系统上搭建开发环境
- 初始化一台计算机/服务器的繁琐配置
- 配置常用软件列表并统一安装
目前工具支持 Git 作为配置文件的存储和同步方式。
这是目前默认且唯一完整实现的同步方式。通过 Git 仓库来管理和同步你的 dotfiles 配置文件。
- 支持从远程 Git 仓库克隆配置
- 自动检测和更新已存在的本地仓库
- 支持主流 Git 服务(GitHub、GitLab、Gitee 等)
- 自动处理仓库关联和分支管理
除了目前支持的 Git 同步外,我计划在未来版本中支持以下同步方式:
- 坚果云 - 通过坚果云同步配置文件,适合国内用户
- NextCloud - 支持私有云部署的 NextCloud 服务器同步
- iCloud - Apple 生态用户可以通过 iCloud 同步配置
- OneDrive - 微软服务用户可以通过 OneDrive 同步配置
这些同步方式将通过插件化的方式实现,用户可以根据自己的需求选择合适的同步方式。
dotfiles-cli 工具针对不同操作系统平台提供了不同的默认包管理器,这些包管理器是根据各平台的特性和用户习惯来选择的。
- 默认包管理器: Winget
- 备选包管理器: Chocolatey
- Windows 平台支持两种主流的包管理器,Winget 是微软官方提供的包管理器,而 Chocolatey 是第三方开源包管理器。
- 项目中会优先检测和使用 Winget,如果不可用再考虑 Chocolatey。
- 默认包管理器: Homebrew
- Homebrew 是 macOS 平台上最受欢迎的开源包管理器,被广泛使用。
- 系统会自动检测是否安装了 Homebrew,如果没有安装会提供安装脚本。
- 默认包管理器: APT (Advanced Package Tool)
- APT 是 Debian/Ubuntu 系列 Linux 发行版的默认包管理器。
- 系统会检测是否是支持 APT 的发行版,如果是则使用 APT 进行包管理。
所有包管理器实现都提供以下功能:
- 安装/卸载软件包
- 批量安装软件包(支持并发)
- 检查软件包是否已安装
- 搜索软件包
- 获取软件包版本信息
- 更新包索引
虽然每个平台都有默认的包管理器,但用户也可以在配置文件中指定使用其他包管理器。系统会优先使用配置文件中指定的包管理器,如果没有指定则使用默认的包管理器。
这种设计使得工具具有很好的灵活性,能够适应不同用户的使用习惯和环境需求。
系统初始化是 dotfiles-cli 的核心功能之一,它会在工具启动时自动检测和配置开发环境。以下是初始化过程中执行的各项任务:
- 自动检测系统是否已安装 Git
- 如果未安装,会根据当前平台自动选择合适的包管理器安装 Git
- 配置 Git 用户信息(用户名和邮箱)
- 支持所有主流平台(Windows/macOS/Linux)
- 自动检测当前平台并选择合适的包管理器
- 确保包管理器已安装并可用
- Windows: 优先使用 Winget,备选 Chocolatey
- macOS: 使用 Homebrew
- Linux: 使用 APT(Debian/Ubuntu 系列)
- 根据配置文件中的软件包列表自动安装未安装的软件
- 支持并发安装以提高效率
- 安装前会检查软件包是否已存在,避免重复安装
针对 macOS 系统,工具提供了一系列优化选项:
- 设置密码策略
- 关闭开机声音
- 电池显示百分比
- 设置键盘按键重复延迟
- 禁止自动拼写纠正
- Finder 显示状态栏和地址栏
- 禁止在网络驱动器上生成 .DS_Store 文件
- 开启所有来源
- 减弱 Finder 和 Dock 的动态效果
- 智能去重:通过 SHA-256 哈希算法记录已执行的优化项,避免重复执行
- 交互式确认:用户可以选择性地应用每个优化项,或一键应用所有优化项
- 自动生效:优化完成后自动重启相关服务使配置生效
- 检测是否已安装 Homebrew
- 如果未安装,提供一键安装功能
- 安装过程需要管理员权限,会提示用户输入系统密码
- 检测系统是否安装了 zsh
- 如果未安装 Oh My Zsh,提供一键安装功能
- 自动安装和配置常用插件:
- zsh-autosuggestions(命令自动建议)
- zsh-syntax-highlighting(语法高亮)
- 自动配置 .zshrc 文件,支持 ARM 和 Intel 架构
- 检测是否已安装 Node.js
- 如果未安装,提示用户手动安装
- 检测已安装的包管理器(npm/pnpm/yarn)
- 如果未安装任何包管理器,提供选择安装 pnpm 或 yarn
- 根据配置从 Git 仓库同步 dotfiles
- 自动创建软链接指向家目录
- 支持更新已存在的本地仓库
所有初始化功能都设计为幂等操作,可以重复执行而不会产生副作用。系统会智能检测当前环境状态,只执行必要的配置步骤。
dotfiles-cli 提供了可扩展的交互式终端功能,用户可以通过实现 AdvancedRepl 接口来添加自定义命令。
交互式终端基于 addzero-tool-cli-repl 库实现,该库提供了一个模块化的命令系统。所有实现了 AdvancedRepl 接口的类都会被自动注册并可在交互式终端中使用。
-
添加依赖: 在你的项目中添加以下依赖:
implementation("site.addzero:addzero-tool-cli-repl:+") -
实现 AdvancedRepl 接口: 创建一个新的类并实现
AdvancedRepl接口。以下是一个示例:@Single // 使用 Koin 注解进行依赖注入 class MyCustomCommandRepl : AdvancedRepl<MyCustomCommandRepl.Params, Unit> { override val command: String = "my-command" override val description: String = "这是一个自定义命令" override val paramDefs: List<ParamDef> = listOf( ParamDef( name = "param1", type = typeOf<String>(), description = "示例参数", defaultValue = "default-value" ) ) data class Params( val param1: String ) override fun eval(params: Params) { println("执行自定义命令,参数值为: ${params.param1}") // 在这里实现你的命令逻辑 } override fun createParams(values: List<Any?>): Params { return Params( param1 = values[0] as String ) } }
-
参数定义:
command: 命令名称,用户在终端中输入该名称来执行命令description: 命令描述,在命令列表中显示paramDefs: 参数定义列表,定义命令接受的参数eval: 命令执行逻辑createParams: 参数对象创建方法
-
使用 Koin 进行依赖注入: 通过
@Single注解,你的命令类会被自动注册到 Koin 依赖注入容器中,并在应用启动时被自动发现和加载。
项目中已经包含多个交互式命令的实现,可以作为参考:
- AddDotFilesRepl - 添加文件到 dotfiles
- AddPkgRepl - 添加软件包
- SyncCommandRepl - 同步 dotfiles
- CatConfigRepl - 查看配置
- 运行应用后会进入交互式终端模式
- 系统会显示所有可用命令的列表和编号
- 用户可以通过以下方式执行命令:
- 输入命令编号(如
1) - 输入命令名称(如
sync)
- 输入命令编号(如
- 对于有参数的命令,系统会提示用户输入相应参数
- 执行完成后会再次显示命令列表,等待用户输入下一个命令
鼓励社区用户贡献更多的交互式命令,以丰富 dotfiles-cli 的功能。如果你实现了有用的命令:
- Fork 本项目
- 实现你的自定义命令
- 提交 Pull Request
我会认真审查每个 PR,并将有价值的贡献合并到主分支中。
dotfiles-cli 在功能设计上参考和对标了一些国际知名的 dotfiles 管理工具,同时结合了国内用户的实际需求进行了优化。
chezmoi 是目前最受欢迎的 dotfiles 管理工具之一,使用 Go 语言编写。
- 使用 Git 作为配置文件的存储和同步方式
- 支持模板化配置文件,可根据不同环境生成不同的配置
- 跨平台支持(Windows/macOS/Linux)
- 支持加密敏感配置文件
- 提供状态管理功能
- 更强的包管理集成:内置了对主流包管理器的支持,可以自动安装软件包
- 系统初始化功能:不仅管理配置文件,还能进行系统优化和环境初始化
- 交互式终端:提供了友好的交互式命令行界面,便于用户操作
- 中文支持:全面的中文界面和文档支持,更适合国内用户
- 离线环境支持:专门针对离线环境设计了初始化方案
GNU Stow 是一个轻量级的符号链接管理工具,常用于管理 dotfiles。
- 通过符号链接管理配置文件
- 简单而有效的文件组织方式
- 支持撤销操作
- 更完整的解决方案:不仅提供符号链接管理,还集成了包管理、系统优化等功能
- 自动化程度更高:自动检测环境并进行相应配置,无需手动编写脚本
- 用户友好:提供了交互式界面和详细的提示信息
yadm(Yet Another Dotfiles Manager)是一个专注于 Git 的 dotfiles 管理工具。
- 基于 Git 进行配置管理
- 支持不同环境的配置文件
- 轻量级设计
- 更丰富的功能:除了配置管理,还提供包管理、系统优化等额外功能
- 更好的跨平台支持:针对不同操作系统提供了专门的适配
- 中文界面:更适合国内用户使用习惯
| 特性 | dotfiles-cli | chezmoi | GNU Stow | yadm |
|---|---|---|---|---|
| 跨平台支持 | ✅ Windows/macOS/Linux | ✅ Windows/macOS/Linux | ✅ Windows/macOS/Linux | |
| 包管理集成 | ✅ 内置支持 | ❌ 无 | ❌ 无 | |
| 系统初始化 | ✅ 自动优化 | ❌ 无 | ❌ 无 | |
| 交互式界面 | ✅ 友好的REPL | ❌ 命令行工具 | ❌ 命令行工具 | |
| 模板支持 | ✅ 强大的模板系统 | ❌ 无 | ✅ 支持 | |
| 加密支持 | ✅ 内置支持 | ❌ 无 | ✅ 通过过滤器支持 | |
| 中文支持 | ✅ 全面支持 | ❌ 无 |
-
增强离线支持
- 完善离线环境下的软件包管理机制
- 增加对更多类型软件包的离线安装支持
- 提供离线包的打包和分发工具
-
同步方式扩展
- 实现坚果云同步支持
- 增加对 NextCloud 的支持
- 支持本地文件夹同步作为基础同步方式
-
包管理器扩展
- 增加对更多 Linux 发行版包管理器的支持(如 yum, pacman (yay)等)
-
配置管理优化
- 支持更多类型的配置文件管理
- 增强配置文件的版本控制能力
-
跨平台同步
- 实现真正的跨平台配置同步
- 解决不同操作系统间的配置兼容性问题
- 提供配置文件的平台适配机制
-
云服务集成
- 集成主流云服务提供商的存储服务
- 提供云同步的加密和安全机制
- 支持多设备间的配置同步
-
用户界面
- 开发图形化用户界面(GUI)
- KMP compose正在开发中,see另一个项目https://gitee.com/zjarlin/addzero.git
- 提供系统托盘图标和通知功能
- 增强交互式配置管理体验
├── dfc/ # 主应用程序模块(dotfiles-cli)
├── buildSrc/ # 共享构建逻辑
└── build-native.sh # 原生可执行文件构建脚本
# 构建原生可执行文件 (GraalVM)
./gradlew nativeCompile生成的可执行文件将位于 dfc/build/native/nativeCompile/ 目录中。
构建完成后,你可以将生成的可执行文件复制到系统 PATH 中的任意位置,然后通过以下命令使用:
#可用命令(键入数字和短名称都可以执行命令):
1. rm-pkg - 删除软件包,目前已纳入同步的软件包:[git, curl, wget, zsh, neovim, node, npm, yarn, qq]
2. sync - 同步
3. add-dotfiles - 添加文件到dotfiles,已有软连接[/Users/zjarlin/testdot, /Users/zjarlin/.add_fn]
4. cat-status - 查看任务执行状态
5. rm-dotfiles - 移除dotfiles软连接
6. add-pkg - 添加软件包
7. cat-config - 查看配置