# dotfiles-cli-graalvm **Repository Path**: zjarlin/dotfiles-cli-graalvm ## Basic Information - **Project Name**: dotfiles-cli-graalvm - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 7 - **Forks**: 0 - **Created**: 2025-09-18 - **Last Updated**: 2025-11-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Dotfiles CLI(df) 一个跨平台(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) - ## 使用场景 如果你有以下需求,这个工具会很适合你: 1. 需要在 Windows、macOS、Linux 三大操作系统上搭建开发环境 2. 初始化一台计算机/服务器的繁琐配置 3. 配置常用软件列表并统一安装 4. 能把开发者常用的配置,点文件,软件 还有对应语言的中间件异步全都初始化静默配好(不同操作系统约定不同目录) 对于要询问的做成repl交互式命令行 ## 同步类型 目前工具支持 Git 作为配置文件的存储和同步方式。 ### Git 同步 这是目前默认且唯一完整实现的同步方式。通过 Git 仓库来管理和同步你的 dotfiles 配置文件。 - 支持从远程 Git 仓库克隆配置 - 自动检测和更新已存在的本地仓库 - 支持主流 Git 服务(GitHub、GitLab、Gitee 等) - 自动处理仓库关联和分支管理 ## 未来计划支持的同步方式 除了目前支持的 Git 同步外,我计划在未来版本中支持以下同步方式: - **坚果云** - 通过坚果云同步配置文件,适合国内用户 - **NextCloud** - 支持私有云部署的 NextCloud 服务器同步 - **iCloud** - Apple 生态用户可以通过 iCloud 同步配置 - **OneDrive** - 微软服务用户可以通过 OneDrive 同步配置 这些同步方式将通过插件化的方式实现,用户可以根据自己的需求选择合适的同步方式。 ## 平台默认包管理器 dotfiles-cli 工具针对不同操作系统平台提供了不同的默认包管理器,这些包管理器是根据各平台的特性和用户习惯来选择的。 ### 各平台默认包管理器 #### Windows 平台 - **默认包管理器**: Winget - **备选包管理器**: Chocolatey - Windows 平台支持两种主流的包管理器,Winget 是微软官方提供的包管理器,而 Chocolatey 是第三方开源包管理器。 - 项目中会优先检测和使用 Winget,如果不可用再考虑 Chocolatey。 #### macOS 平台 - **默认包管理器**: Homebrew - Homebrew 是 macOS 平台上最受欢迎的开源包管理器,被广泛使用。 - 系统会自动检测是否安装了 Homebrew,如果没有安装会提供安装脚本。 #### Linux 平台 - **默认包管理器**: APT (Advanced Package Tool) - APT 是 Debian/Ubuntu 系列 Linux 发行版的默认包管理器。 - 系统会检测是否是支持 APT 的发行版,如果是则使用 APT 进行包管理。 ### 包管理器功能特性 所有包管理器实现都提供以下功能: - 安装/卸载软件包 - 批量安装软件包(支持并发) - 检查软件包是否已安装 - 搜索软件包 - 获取软件包版本信息 - 更新包索引 ### 配置自定义包管理器 虽然每个平台都有默认的包管理器,但用户也可以在配置文件中指定使用其他包管理器。系统会优先使用配置文件中指定的包管理器,如果没有指定则使用默认的包管理器。 这种设计使得工具具有很好的灵活性,能够适应不同用户的使用习惯和环境需求。 ## 系统初始化功能详解 系统初始化是 dotfiles-cli 的核心功能之一,它会在工具启动时自动检测和配置开发环境。以下是初始化过程中执行的各项任务: ### 1. Git 初始化 - 自动检测系统是否已安装 Git - 如果未安装,会根据当前平台自动选择合适的包管理器安装 Git - 配置 Git 用户信息(用户名和邮箱) - 支持所有主流平台(Windows/macOS/Linux) ### 2. 包管理器初始化 - 自动检测当前平台并选择合适的包管理器 - 确保包管理器已安装并可用 - Windows: 优先使用 Winget,备选 Chocolatey - macOS: 使用 Homebrew - Linux: 使用 APT(Debian/Ubuntu 系列) ### 3. 软件包自动安装 - 根据配置文件中的软件包列表自动安装未安装的软件 - 支持并发安装以提高效率 - 安装前会检查软件包是否已存在,避免重复安装 ### 4. macOS 系统优化(仅 macOS) 针对 macOS 系统,工具提供了一系列优化选项: #### 系统优化项包括: - 设置密码策略 - 关闭开机声音 - 电池显示百分比 - 设置键盘按键重复延迟 - 禁止自动拼写纠正 - Finder 显示状态栏和地址栏 - 禁止在网络驱动器上生成 .DS_Store 文件 - 开启所有来源 - 减弱 Finder 和 Dock 的动态效果 #### 特色功能: - 智能去重:通过 SHA-256 哈希算法记录已执行的优化项,避免重复执行 - 交互式确认:用户可以选择性地应用每个优化项,或一键应用所有优化项 - 自动生效:优化完成后自动重启相关服务使配置生效 ### 5. Homebrew 初始化(仅 macOS) - 检测是否已安装 Homebrew - 如果未安装,提供一键安装功能 - 安装过程需要管理员权限,会提示用户输入系统密码 ### 6. Oh My Zsh 初始化(仅 macOS) - 检测系统是否安装了 zsh - 如果未安装 Oh My Zsh,提供一键安装功能 - 自动安装和配置常用插件: - zsh-autosuggestions(命令自动建议) - zsh-syntax-highlighting(语法高亮) - 自动配置 .zshrc 文件,支持 ARM 和 Intel 架构 ### 7. Node.js 环境初始化 - 检测是否已安装 Node.js - 如果未安装,提示用户手动安装 - 检测已安装的包管理器(npm/pnpm/yarn) - 如果未安装任何包管理器,提供选择安装 pnpm 或 yarn ### 8. Dotfiles 同步 - 根据配置从 Git 仓库同步 dotfiles - 自动创建软链接指向家目录 - 支持更新已存在的本地仓库 所有初始化功能都设计为幂等操作,可以重复执行而不会产生副作用。系统会智能检测当前环境状态,只执行必要的配置步骤。 ## 扩展交互式终端 dotfiles-cli 提供了可扩展的交互式终端功能,用户可以通过实现 AdvancedRepl 接口来添加自定义命令。 ### 工作原理 交互式终端基于 `addzero-tool-cli-repl` 库实现,该库提供了一个模块化的命令系统。所有实现了 `AdvancedRepl` 接口的类都会被自动注册并可在交互式终端中使用。 ### 如何扩展交互式终端 1. **添加依赖**: 在你的项目中添加以下依赖: ```kotlin implementation("site.addzero:addzero-tool-cli-repl:+") ``` 2. **实现 AdvancedRepl 接口**: 创建一个新的类并实现 `AdvancedRepl` 接口。以下是一个示例: ```kotlin @Single // 使用 Koin 注解进行依赖注入 class MyCustomCommandRepl : AdvancedRepl { override val command: String = "my-command" override val description: String = "这是一个自定义命令" override val paramDefs: List = listOf( ParamDef( name = "param1", type = typeOf(), description = "示例参数", defaultValue = "default-value" ) ) data class Params( val param1: String ) override fun eval(params: Params) { println("执行自定义命令,参数值为: ${params.param1}") // 在这里实现你的命令逻辑 } override fun createParams(values: List): Params { return Params( param1 = values[0] as String ) } } ``` 3. **参数定义**: - `command`: 命令名称,用户在终端中输入该名称来执行命令 - `description`: 命令描述,在命令列表中显示 - `paramDefs`: 参数定义列表,定义命令接受的参数 - `eval`: 命令执行逻辑 - `createParams`: 参数对象创建方法 4. **使用 Koin 进行依赖注入**: 通过 `@Single` 注解,你的命令类会被自动注册到 Koin 依赖注入容器中,并在应用启动时被自动发现和加载。 ### 现有命令示例 项目中已经包含多个交互式命令的实现,可以作为参考: - [AddDotFilesRepl](file:///Users/zjarlin/IdeaProjects/dotfiles-cli/dfc/src/main/kotlin/site/addzero/repl/AddDotFilesRepl.kt#L22-L83) - 添加文件到 dotfiles - [AddPkgRepl](file:///Users/zjarlin/IdeaProjects/dotfiles-cli/dfc/src/main/kotlin/site/addzero/repl/AddPkgRepl.kt#L17-L75) - 添加软件包 - [SyncCommandRepl](file:///Users/zjarlin/IdeaProjects/dotfiles-cli/dfc/src/main/kotlin/site/addzero/repl/SynCRepl.kt#L16-L43) - 同步 dotfiles - [CatConfigRepl](file:///Users/zjarlin/IdeaProjects/dotfiles-cli/dfc/src/main/kotlin/site/addzero/repl/CatConfigRepl.kt#L14-L28) - 查看配置 ### 用户使用方法 1. 运行应用后会进入交互式终端模式 2. 系统会显示所有可用命令的列表和编号 3. 用户可以通过以下方式执行命令: - 输入命令编号(如 `1`) - 输入命令名称(如 `sync`) 4. 对于有参数的命令,系统会提示用户输入相应参数 5. 执行完成后会再次显示命令列表,等待用户输入下一个命令 ### 鼓励社区贡献 鼓励社区用户贡献更多的交互式命令,以丰富 dotfiles-cli 的功能。如果你实现了有用的命令: 1. Fork 本项目 2. 实现你的自定义命令 3. 提交 Pull Request 我会认真审查每个 PR,并将有价值的贡献合并到主分支中。 ## 对标产品介绍 dotfiles-cli 在功能设计上参考和对标了一些国际知名的 dotfiles 管理工具,同时结合了国内用户的实际需求进行了优化。 ### [chezmoi](https://github.com/twpayne/chezmoi) chezmoi 是目前最受欢迎的 dotfiles 管理工具之一,使用 Go 语言编写。 #### 相似之处: - 使用 Git 作为配置文件的存储和同步方式 - 支持模板化配置文件,可根据不同环境生成不同的配置 - 跨平台支持(Windows/macOS/Linux) - 支持加密敏感配置文件 - 提供状态管理功能 #### dotfiles-cli 的优势: - **更强的包管理集成**:内置了对主流包管理器的支持,可以自动安装软件包 - **系统初始化功能**:不仅管理配置文件,还能进行系统优化和环境初始化 - **交互式终端**:提供了友好的交互式命令行界面,便于用户操作 - **中文支持**:全面的中文界面和文档支持,更适合国内用户 - **离线环境支持**:专门针对离线环境设计了初始化方案 ### [GNU Stow](https://www.gnu.org/software/stow/) GNU Stow 是一个轻量级的符号链接管理工具,常用于管理 dotfiles。 #### 相似之处: - 通过符号链接管理配置文件 - 简单而有效的文件组织方式 - 支持撤销操作 #### dotfiles-cli 的优势: - **更完整的解决方案**:不仅提供符号链接管理,还集成了包管理、系统优化等功能 - **自动化程度更高**:自动检测环境并进行相应配置,无需手动编写脚本 - **用户友好**:提供了交互式界面和详细的提示信息 ### [yadm](https://github.com/TheLocehiliosan/yadm) yadm(Yet Another Dotfiles Manager)是一个专注于 Git 的 dotfiles 管理工具。 #### 相似之处: - 基于 Git 进行配置管理 - 支持不同环境的配置文件 - 轻量级设计 #### dotfiles-cli 的优势: - **更丰富的功能**:除了配置管理,还提供包管理、系统优化等额外功能 - **更好的跨平台支持**:针对不同操作系统提供了专门的适配 - **中文界面**:更适合国内用户使用习惯 ### 与其他工具的比较总结 | 特性 | dotfiles-cli | chezmoi | GNU Stow | yadm | |------|--------------|---------|----------|------| | 跨平台支持 | ✅ Windows/macOS/Linux | ✅ Windows/macOS/Linux | ⚠️ 主要用于Unix-like系统 | ✅ Windows/macOS/Linux | | 包管理集成 | ✅ 内置支持 | ⚠️ 需要外部脚本 | ❌ 无 | ❌ 无 | | 系统初始化 | ✅ 自动优化 | ⚠️ 需要外部脚本 | ❌ 无 | ❌ 无 | | 交互式界面 | ✅ 友好的REPL | ⚠️ 命令行工具 | ❌ 命令行工具 | ❌ 命令行工具 | | 模板支持 | ⚠️ 有限支持 | ✅ 强大的模板系统 | ❌ 无 | ✅ 支持 | | 加密支持 | ⚠️ 计划中 | ✅ 内置支持 | ❌ 无 | ✅ 通过过滤器支持 | | 中文支持 | ✅ 全面支持 | ⚠️ 社区支持 | ❌ 无 | ⚠️ 社区支持 | ## 未来路线图 (ROADMAP) ### 近期计划 1. **增强离线支持** - 完善离线环境下的软件包管理机制 - 增加对更多类型软件包的离线安装支持 - 提供离线包的打包和分发工具 2. **同步方式扩展** - 实现坚果云同步支持 - 增加对 NextCloud 的支持 - 支持本地文件夹同步作为基础同步方式 3. **包管理器扩展** - 增加对更多 Linux 发行版包管理器的支持(如 yum, pacman (yay)等) 4. **配置管理优化** - 支持更多类型的配置文件管理 - 增强配置文件的版本控制能力 ### 中长期计划 1. **跨平台同步** - 实现真正的跨平台配置同步 - 解决不同操作系统间的配置兼容性问题 - 提供配置文件的平台适配机制 2. **云服务集成** - 集成主流云服务提供商的存储服务 - 提供云同步的加密和安全机制 - 支持多设备间的配置同步 3. **用户界面** - 开发图形化用户界面(GUI) - KMP compose正在开发中,see另一个项目https://gitee.com/zjarlin/addzero.git - 提供系统托盘图标和通知功能 - 增强交互式配置管理体验 ## 项目结构 ``` ├── dfc/ # 主应用程序模块(dotfiles-cli) ├── buildSrc/ # 共享构建逻辑 └── build-native.sh # 原生可执行文件构建脚本 ``` ### 乱码解决在idea启动项加 ```kotlin -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 ``` ### 构建项目 ```bash # 构建原生可执行文件 (GraalVM) ./gradlew nativeCompile ``` 生成的可执行文件将位于 `dfc/build/native/nativeCompile/` 目录中。 ## 安装和使用 构建完成后,你可以将生成的可执行文件复制到系统 PATH 中的任意位置,然后通过以下命令使用: ```bash #可用命令(键入数字和短名称都可以执行命令): 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 - 查看配置 ``` # 👏🏻欢迎PR 本项目先做加法(收集各种繁琐的需要查资料,各种复制粘贴的配置,写入软件,降低心智负担) 再做减法(按开发者的语言风格需加载) ## 贡献指南 对于要初始化的任务src/main/kotlin/site/addzero/cli/autoinit 对于要交互式命令行的任务src/main/kotlin/site/addzero/repl