tool-sync
is a CLI tool for installing your other favourite tools from GitHub Releases.
ℹ️ DISCLAIMER:
tool-sync
is developed and maintained in free time by volunteers. The development may continue for decades or may stop tomorrow. You can use GitHub Sponsorship to support the development of this project.
tool-sync
embraces the idea that configuring your personal development
environment should be as easy as possible. And the life is pretty easy when all
the tools are simple executables.
So why not simply download all executables you use and put them in one place??? 😱
With tool-sync
, you can install all the tools you use by following three
simple steps:
tool-sync
.tool-sync
by listing all the tools you need and
specifying where to put them.tool sync
.That's all! 🥳
Then tool-sync
does the following:
tool-sync
has several distinguished features that allows you to manage your
personal toolbox easily:
You can install tool-sync
directly from GitHub releases in a few steps:
tool
executable to a desired location.You can use cargo
to install the latest published version of tool-sync
from crates:
shell
cargo install tool-sync
You can install the latest version of tool-sync
from sources (requires git
and cargo
):
shell
git clone https://github.com/chshersh/tool-sync
cd tool-sync
cargo build --release
./target/release/tool --version
tool-sync
reads configuration from a file in TOML format. An example
configuration file is shown below:
```toml
store_directory = "~/.local/bin"
[bat] [difftastic] [exa] [fd] [ripgrep] ```
By default tool-sync
reads configuration from ~/.tool.toml
but you can put
the content in any place and specify the path via the --config
flag.
You can also quickly copy the above configuration to the default path by running the following command (Unix-only):
shell
curl https://raw.githubusercontent.com/chshersh/tool-sync/main/example-tool-sync-config.toml > ~/.tool.toml
The above example config lists some tools natively supported by tool-sync
and
therefore they don't require extra configuration.
To specify a tool not supported by tool-sync
, add a TOML table entry and list
all the required fields like in the example below:
```toml [tokei] owner = "XAMPPRocky" # GitHub username repo = "tokei" # GitHub repository exe_name = "tokei" # Executable name inside the asset
assetname.linux = "x8664-unknown-linux-musl"
```
ℹ️
tool-sync
searches asset name using the substring search. That's why you don't need to specify the full asset name in the config, only the minimal part required for identifying the asset. However,tool-sync
doesn't guarantee you to find the asset you need if multiple assets from the GitHub release match the substring.
All fields in each tool section are
This means that you can override only some of the fields for known tools.
This can be helpful if e.g. you want to install a custom version of ripgrep
from a forked repository. To do this, specify only the repository owner in the
config:
toml
[ripgrep]
owner = "me"
Install all the tools specified in ~/.tool.toml
:
shell
tool sync
Install all the tools from config in a different location:
shell
tool --config=path/to/my/config.toml sync
Run tool --help
for more details.
:octocat: If you hit the limit for downloading assets or want to download assets from private repositories, create a personal access token and export it as the
GITHUB_TOKEN
environment variable.
This section contains tool-sync
comparison to existing alternatives:
Manual download. You can download GitHub releases manually without using any extra tools.
GitHub CLI. You can download assets from releases using
the GitHub CLI tool gh
.
shell
gh release download --repo chshersh/tool-sync v0.0.0 --pattern='*linux*'
tar -xvf tool-x86_64-unknown-linux-gnu.tar.gz
./tool --version
dra. dra
is the closest alternative to tool-sync
. It's a CLI
tool, written in Rust, that allows downloading individual releases easily.
home-manager. Home Manager provides a full-features solution for managing a user environment using the Nix package manager.
Check CONTRIBUTING.md for contributing guidelines.
Use cargo
to build the project and run all tests:
shell
cargo build
cargo test
tool-sync
contains a database of common tools and provides easier
support for them. It's possible to add more tools (and you can suggest them!).
The following list contains guidelines for including a new tool. They don't
serve as gatekeeping criteria but more as points system:
tool-sync
strives to be generic so it might not want to support a DNA
analysis CLI tool which is useful only for a specific grouptool-sync
author find the tool helpful
tool-sync
who maintain this project
while the rest of the world benefits from it for free. At least, tool-sync
authors decide what they want to use and whether they want to support a tool indefinitely.