Skip to content

zjarlin/dotfiles-cli

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

91 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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. 配置常用软件列表并统一安装

同步类型

目前工具支持 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. 添加依赖: 在你的项目中添加以下依赖:

    implementation("site.addzero:addzero-tool-cli-repl:+")
  2. 实现 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
            )
        }
    }
  3. 参数定义

    • command: 命令名称,用户在终端中输入该名称来执行命令
    • description: 命令描述,在命令列表中显示
    • paramDefs: 参数定义列表,定义命令接受的参数
    • eval: 命令执行逻辑
    • createParams: 参数对象创建方法
  4. 使用 Koin 进行依赖注入: 通过 @Single 注解,你的命令类会被自动注册到 Koin 依赖注入容器中,并在应用启动时被自动发现和加载。

现有命令示例

项目中已经包含多个交互式命令的实现,可以作为参考:

  • AddDotFilesRepl - 添加文件到 dotfiles
  • AddPkgRepl - 添加软件包
  • SyncCommandRepl - 同步 dotfiles
  • CatConfigRepl - 查看配置

用户使用方法

  1. 运行应用后会进入交互式终端模式
  2. 系统会显示所有可用命令的列表和编号
  3. 用户可以通过以下方式执行命令:
    • 输入命令编号(如 1
    • 输入命令名称(如 sync
  4. 对于有参数的命令,系统会提示用户输入相应参数
  5. 执行完成后会再次显示命令列表,等待用户输入下一个命令

鼓励社区贡献

鼓励社区用户贡献更多的交互式命令,以丰富 dotfiles-cli 的功能。如果你实现了有用的命令:

  1. Fork 本项目
  2. 实现你的自定义命令
  3. 提交 Pull Request

我会认真审查每个 PR,并将有价值的贡献合并到主分支中。

对标产品介绍

dotfiles-cli 在功能设计上参考和对标了一些国际知名的 dotfiles 管理工具,同时结合了国内用户的实际需求进行了优化。

chezmoi 是目前最受欢迎的 dotfiles 管理工具之一,使用 Go 语言编写。

相似之处:

  • 使用 Git 作为配置文件的存储和同步方式
  • 支持模板化配置文件,可根据不同环境生成不同的配置
  • 跨平台支持(Windows/macOS/Linux)
  • 支持加密敏感配置文件
  • 提供状态管理功能

dotfiles-cli 的优势:

  • 更强的包管理集成:内置了对主流包管理器的支持,可以自动安装软件包
  • 系统初始化功能:不仅管理配置文件,还能进行系统优化和环境初始化
  • 交互式终端:提供了友好的交互式命令行界面,便于用户操作
  • 中文支持:全面的中文界面和文档支持,更适合国内用户
  • 离线环境支持:专门针对离线环境设计了初始化方案

GNU Stow 是一个轻量级的符号链接管理工具,常用于管理 dotfiles。

相似之处:

  • 通过符号链接管理配置文件
  • 简单而有效的文件组织方式
  • 支持撤销操作

dotfiles-cli 的优势:

  • 更完整的解决方案:不仅提供符号链接管理,还集成了包管理、系统优化等功能
  • 自动化程度更高:自动检测环境并进行相应配置,无需手动编写脚本
  • 用户友好:提供了交互式界面和详细的提示信息

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   # 原生可执行文件构建脚本

构建项目

# 构建原生可执行文件 (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 - 查看配置

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages