#下载 #CLI 工具 #工具 #同步 #配置 toml #最新版本 #CLI

bin+lib tool-sync

tool-sync 是一个 CLI 工具,通过下载二进制文件并将其存储在本地目录中来管理从 GitHub 发布中安装的其他 CLI 工具

2 个不稳定版本

0.2.0 2022 年 9 月 20 日
0.1.0 2022 年 8 月 29 日

#2444命令行工具

MPL-2.0 许可证

170KB
2K SLoC

tool-sync

GitHub CI Latest GitHub release MPL-2.0 license

tool-sync 是一个 CLI 工具,解决了一个问题

📥 使用单个命令下载您所有喜爱的工具的预构建二进制文件。

tool-sync 拥抱这样一个理念:配置您的个人开发环境应该尽可能简单。当所有工具都是简单的可执行文件时,生活就变得非常简单。

那么,为什么不简单地将您使用的所有可执行文件下载并放在一个地方呢?🚀 😱

tool-sync demo

ℹ️ 免责声明: tool-sync 由志愿者在业余时间开发和维护。开发可能持续数十年,也可能在明天停止。您可以通过 GitHub 赞助 来支持此项目的开发。

快速入门指南

使用 tool-sync,您可以通过以下三个简单步骤安装您使用的所有工具

  1. 安装 tool-sync.
  2. 配置 tool-sync,通过描述您想要的工具。
  3. 运行 tool sync

这就是全部! 🥳

tool sync 命令执行以下操作

  1. 从 GitHub 发布获取工具信息
  2. 自动猜测常见工具的资产名称
  3. 下载并解压资产
  4. 将解压的资产中的二进制文件复制到您选择的位置

功能

tool-sync 有几个显著的特点,使您能够轻松地管理个人工具箱

  • 🚀 默认安装工具的最新版本
  • 🧹 帮助您避免流行工具的样板配置
  • 📜 通过简单的 TOML 文件进行配置
  • ☸️ 跨平台:在 Linux🐧、macOS🍏 和 Windows💠 上运行
  • 🪶 无运行时依赖:不需要任何其他工具来完成工作

限制

目前,tool-sync 有一些限制

  • 仅支持从 GitHub 发布下载预构建的二进制文件
  • 不支持除了下载二进制文件之外的其他配置(例如,复制其他资产或设置自动完成)
  • 无法避免下载相同版本的文件

项目目标

本项目旨在实现以下目标。与以下列表中的目标不兼容的功能请求可能会被拒绝。

  1. 学习Rust。
    • 我喜欢通过创建新事物来学习。在开发 tool-sync 的过程中,我学到了很多,同时我也发现这个工具对我自己很有用!所以,请不要问“为什么要创建另一个包管理器?”这甚至不是一个包管理器 😒
  2. 单命令批量安装。
    • tool-sync 的另一个目标是配置一次,然后就可以忘了它(理想情况下永远都不用管它),并且以最小的开销使用。使用单个命令安装大量工具有助于实现这一目标。
  3. 信息性消息。
    • 当某个功能不起作用时,应该清楚地知道“为什么?”和“如何修复它?”tool-sync 力求提供良好的错误消息(但这是一项永无止境的工作)。

安装

您可以通过以下步骤从 GitHub 发布版直接安装 tool-sync

  1. 前往 最新发布版
  2. 下载适合您操作系统的资产。
  3. tool 可执行文件解压到指定的位置。

好消息,您只需要做一次!如果将 tool-sync 添加到配置中,它将自动管理未来的安装。

ℹ️ 为 tool-sync 安装预构建的二进制文件是推荐选项,因为它们是

  • 静态链接(因此可以在任何系统上直接运行)
  • 精简(因此其大小减小)

从crates安装

您可以使用 cargo 从crates安装 tool-sync 的最新发布版本

cargo install tool-sync

从源代码安装

您可以从源代码安装 tool-sync 的最新版本(需要 gitcargo

git clone https://github.com/chshersh/tool-sync
cd tool-sync
cargo build --release
./target/release/tool --version

配置

在开始使用 tool-sync 之前,您需要通过指定工具的下载位置和列出所有想要安装的工具来配置它。

默认情况下,tool-sync$HOME/.tool.toml 路径读取配置。但您可以通过 --config=/path/to/my/config 标志指定一个自定义位置。

快速入门

tool-sync 有一个命令可以生成带有示例和字段描述的默认配置。只需将其生成到一个文件中并对其进行编辑即可

tool default-config > ~/.tool.toml  # generate the default config
vim ~/.tool.toml                    # open it with an editor of your choice

简单示例

下面是一个简单的配置示例

# a directory to store all tools
store_directory = "~/.local/bin"

# the following tools will be installed in 'store_directory'
[bat]
[difftastic]
[exa]
[fd]
[ripgrep]

ℹ️ tool-sync 会自动将波浪线 ~ 和环境变量(例如 $HOME)在 store_directory 字段中展开。

您还可以通过运行以下命令快速将上述配置复制到默认路径(仅限Unix系统)

curl https://raw.githubusercontent.com/chshersh/tool-sync/main/example-tool-sync-config.toml > ~/.tool.toml

上面的示例配置列出了 tool-sync 本身原生支持的某些工具,因此它们不需要额外的配置。

高级配置

要指定 tool-sync 不支持的工具,请添加一个 TOML 表条目,并像以下示例中那样列出所有需要的字段

[tokei]
owner    = "XAMPPRocky"  # GitHub username
repo     = "tokei"       # GitHub repository
exe_name = "tokei"       # Executable name inside the asset

# uncomment to download a specific version or tag
# tag = "12.1.1"

# Asset name to download on linux OSes
asset_name.linux = "x86_64-unknown-linux-musl"

# Uncomment if you want to install on macOS as well
# asset_name.macos = "apple-darwin"

# Uncomment if you want to install on Windows as well
# asset_name.windows = "x86_64-pc-windows-msvc"

ℹ️ tool-sync 使用 子串搜索 搜索资产名称。这就是为什么您不需要在配置中指定完整的资产名称,只需指定用于识别资产的最小部分即可。但是,如果 GitHub 发布版中有多个资产与子串匹配,tool-sync 不保证您能找到所需的资产。

每个工具部分中的所有字段都是

  • 对于未知工具,是必需的。
  • 对于已知工具,是可选的。

这意味着您可以仅覆盖已知工具的一些字段。

如果您想从分叉的仓库中安装自定义版本的 ripgrep,这可能会很有用。为此,只需在配置中指定仓库所有者。

[ripgrep]
owner = "me"

使用方法

安装 ~/.tool.toml 中指定的所有工具。

tool sync

在不同位置安装配置中的所有工具。

tool --config=path/to/my/config.toml sync

安装已知工具列表中硬编码的工具。

tool install ripgrep

将默认配置打印到标准输出。

tool default-config

运行 tool --help 获取更多详细信息。

:octocat: 如果您下载资源的限制已达到或想要从私有仓库下载资源,请创建一个个人访问令牌(创建个人访问令牌),并将其导出为 GITHUB_TOKEN 环境变量。

替代方案

本节包含 tool-sync 与现有替代方案的比较。

  1. 手动下载:您可以在不使用任何额外工具的情况下手动下载 GitHub 发布版本。

    • 优点
      • 不需要额外工具,只需您的浏览器和解包工具。
    • 缺点
      • 繁琐的手动过程。
  2. GitHub CLI:您可以使用 GitHub CLI 工具 gh 从发布版本中下载资源。

    gh release download --repo chshersh/tool-sync v0.0.0 --pattern='*linux*'
    tar -xvf tool-x86_64-unknown-linux-gnu.tar.gz
    ./tool --version
    
    • 优点
      • 使用更常见的工具(您可能已有)
    • 缺点
      • 无法使用单个命令下载多个工具
      • 无法通过操作系统猜测资源名称
  3. home-manager:使用 Nix 包管理器提供了一种全面的环境管理解决方案。

    • 优点
      • 支持下载 GitHub 发布版本以外的更多工具
      • 访问更大的 Nix 生态系统
    • 缺点
      • 解决方案更复杂
      • 需要学习和使用 Nix
  4. topgrade:一个 CLI 工具,用于自动升级系统中的所有内容。从某种意义上说,它与 tool-sync 类似,因为它使用最新版本,但它依赖于现有的包管理器,并且不安装新工具。

    • 优点
      • 利用现有的包管理器和它们的配置
      • 支持插件、编辑器配置以及许多其他内容,而不仅仅是可执行工具
    • 缺点
      • 仅更新,不安装新工具
  5. cargo-binstall:

    • 优点
      • 在不配置的情况下安装比 tool-sync 更多的 Rust 工具。
      • 如果工具没有提供二进制发布版本,则从源代码构建工具。
    • 缺点
      • 仅支持 Rust 工具
      • 无法使用单个命令安装多个工具
  6. dra:与 tool-sync 最接近的替代方案。这是一个用 Rust 编写的 CLI 工具,允许轻松下载单个发布版本。

    • 优点
      • 下载单个发布版本时界面方便
    • 缺点
      • 无法使用单个命令下载多个工具
      • 无法通过操作系统猜测资源名称
  7. clyde:另一个 tool-sync 的替代方案。

    • 优点
      • 包完整性检查
      • 支持手册页
      • 不需要选择安装工具的位置
    • 缺点
      • 如果没有添加到中央仓库,则无法安装工具
      • 无法使用单个命令安装多个工具
      • 有运行时依赖项:gittar

添加新工具

tool-sync 包含 常用工具数据库,并提供了对它们的简化支持。您可以添加更多工具(并且您可以提出建议!)以下列表包含包含新工具的指南。它们不是作为把关标准,而是作为评分系统

  • 自工具发布以来已过去 6 个月
    • 这样数据库就不会被填充从未得到支持的全新工具
  • 至少 3 个版本
    • 为确保资产的命名方案稳定
  • 常用工具
    • tool-sync力求通用,因此可能不支持仅对特定群体有用的DNA分析CLI工具。
  • tool-sync的作者认为这个工具很有帮助。
    • 最终,tool-sync背后有人员维护这个项目,而全世界的人都可以免费从中受益。至少,tool-sync的作者决定他们想要使用什么,以及他们是否想要无限期地支持某个工具。

对于贡献者

有关贡献指南,请参阅CONTRIBUTING.md

开发

构建

使用cargo来构建项目并运行所有测试。

cargo build
cargo test

预提交钩子

有一个预定义的.pre-commit-config.yaml,您可以使用pre-commit进行安装。这将确保在提交更改之前在本地运行linting检查。

更新默认配置金测试

当更改默认配置的格式时,运行以下命令以快速更新金default-config.toml测试。

cargo run -- default-config > tests/default-config.toml

依赖项

~8–19MB
~283K SLoC