🧰 Download pre-built binaries of all your favourite tools with a single command

Overview

tool-sync

GitHub CI Latest GitHub release MPL-2.0 license

tool-sync is a CLI tool that solves one problem:

📥 Download pre-built binaries of all your favourite tools with a single command.

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 the executables you use and put them in a single place??? 🚀 😱

tool-sync demo

ℹ️ 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.

Quick start guide

With tool-sync, you can install all the tools you use by following three simple steps:

  1. Install tool-sync.
  2. Configure tool-sync by describing all the tools you want.
  3. Run tool sync.

That's all! 🥳

The tool sync command does the following:

  1. Fetches the information about tools from GitHub Releases
  2. Automatically guesses the asset name from your OS for common tools
  3. Downloads and unpacks assets
  4. Copies binaries from unpacked assets to the location of your choice

Features

tool-sync has several distinguished features that allows you to manage your personal toolbox easily:

  • 🚀 Installs the latest version of tools by default
  • 🧹 Helps you to avoid boilerplate configuration for popular tools
  • 📜 Configures via a simple TOML file
  • ☸️ Cross-platform: works on Linux 🐧 , macOS 🍏 and Windows 💠
  • 🪶 No runtime dependencies: doesn't require any other tools to do the job

Limitations

Currently, tool-sync has a few limitations:

  • Supports downloading pre-built binaries only from GitHub Releases
  • Doesn't support other configuration besides downloading the binary (e.g. copying additional assets or setting up auto-completion)
  • Doesn't avoid downloading of the same version

Project goals

This project is created in pursue of the following goals. Feature requests not compatible with the following list of goals might be rejected.

  1. Learning Rust.
    • I like learning by creating new things. I'm learning a lot while working on tool-sync and at the same time I find this tool useful for myself! So, please, don't ask "Why create another package manager?". It's not even a package manager 😒
  2. Single-command batch installation.
    • Another tool-sync is to be able to configure it once and forget about it (ideally forever) and use with the minimal overhead. Installing lots of tools with a single command helps achieving this goal.
  3. Informative messages.
    • When something doesn't work, it should be clear "Why?" and "How to fix it?". tool-sync strives to provide good error messages (but this is an endless work).

Install

From binary releases (recommended)

You can install tool-sync directly from GitHub releases in a few steps:

  1. Go to the latest release.
  2. Download an asset for your OS.
  3. Unpack the tool executable to a desired location.

Good news, you only need to do this once! tool-sync will automatically manage future installations of itself (if you add it to your config).

ℹ️ Installing pre-built binaries for tool-sync is the recommended option because they are:

  • Statically linked (so they work out-of-the-box on every system)
  • Stripped (so their size is reduced)

From crates

You can use cargo to install the latest published version of tool-sync from crates:

cargo install tool-sync

From sources

You can install the latest version of tool-sync from sources (requires git and cargo):

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

Configure

Before using tool-sync, you need to configure it by specifying the location for downloading the tools and listing all the tools you want.

By default tool-sync reads the configuration from from the $HOME/.tool.toml path. But you can specify a custom location via the --config=/path/to/my/config flag.

Quick start

tool-sync has a command to generate a default configuration with examples and field description. Simply generate it into a file and edit it:

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

Simple example

Below you can find a simple configuration example:

# 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 automatically expands the tilde ~ and environment variables (e.g $HOME) in the store_directory field.

You can also quickly copy the above configuration to the default path by running the following command (Unix-only):

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.

Advanced 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:

[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 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

  • required for unknown tools,
  • optional for known tools.

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:

[ripgrep]
owner = "me"

Usage

Install all the tools specified in ~/.tool.toml:

tool sync

Install one tool specified in ~/.tool.toml:

tool sync exa

Install all the tools from config in a different location:

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

Install a tool that is hardcoded in the known tools list:

tool install ripgrep

Print the default config to stdout:

tool default-config

Print the default config location to stdout:

tool default-config --path

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.

Alternatives

This section contains tool-sync comparison to existing alternatives:

  1. Manual download: you can download GitHub releases manually without using any extra tools.

    • Pros
      • No extra tools required, only your browser and unpack utility
    • Cons
      • Tedious manual process
  2. GitHub CLI: you can download assets from releases using the GitHub CLI tool 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
    • Pros
      • Using a more common tool (that you probably have)
    • Cons
      • Can't download multiple tools with a single command
      • Can't guess the asset name by your OS
  3. home-manager: provides a full-featured solution for managing a user environment using the Nix package manager.

    • Pros
      • Supports more than downloading tools from GitHub Releases
      • Access to the bigger Nix ecosystem
    • Cons
      • More complicated solution
      • Requires learning and using Nix
  4. topgrade: a CLI tool for automatically upgrading everything you have on your system. Its similar to tool-sync in a sense that it uses the latest version but it relies on existing packages managers and doesn't install new tools.

    • Pros
      • Leverages your existing package managers and their configuration
      • Support plugins, editor configs and much more besides executable tools
    • Cons
      • Only updates, doesn't install new
  5. cargo-binstall:

    • Pros
      • Installs more Rust tools than tool-sync without configuration
      • Builds a tool from sources if it doesn't provide a binary release
    • Cons
      • Supports only Rust tools
      • Doesn't install multiple tools with a single command
  6. dra: the closest alternative to tool-sync. It's a CLI tool, written in Rust, that allows downloading individual releases easily.

    • Pros
      • Convenient interface for downloading a single release
    • Cons
      • Can't download multiple tools with a single command
      • Can't guess the asset name by your OS
  7. clyde: another alternative to tool-sync

    • Pros
      • Package integrity checks
      • Supports man pages
      • Doesn't require to select a location for installing tools
    • Cons
      • Tools can't be installed if not added in a central repository
      • Can't install multiple tools with a single command
      • Has runtime dependencies: git and tar

Adding a new tool

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:

  • 6 months passed since the tool release
    • So that the database won't be populated with fresh tools that are never supported
  • At least 3 releases
    • To ensure stable naming scheme for assets
  • Commonly used tool
    • 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 group
  • The tool-sync author find the tool helpful
    • In the end, there're people behind 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.

For contributors

Check CONTRIBUTING.md for contributing guidelines.

Development

Build

Use cargo to build the project and run all tests:

cargo build
cargo test

Pre-commit hooks

There is a predefined .pre-commit-config.yaml that you can install using pre-commit. This will make sure the linting checks are run locally before committing changes.

Update the default config golden test

When changing the format of the default configuration, run the following command to quickly update the golden default-config.toml test:

cargo run -- default-config > tests/default-config.toml
Comments
  • More elegant definition of hardcoded tools

    More elegant definition of hardcoded tools

    Currently, when a new tool inserted in a hardcoded database, it's written like this:

        tools.insert(
            "bat".into(),
            ToolInfo {
                owner: "sharkdp".to_string(),
                repo: "bat".to_string(),
                exe_name: "bat".to_string(),
                asset_name: AssetName {
                    linux: Some("x86_64-unknown-linux-musl".to_string()),
                    macos: Some("x86_64-apple-darwin".to_string()),
                    windows: Some("x86_64-pc-windows-msvc".to_string()),
                },
                tag: ToolInfoTag::Latest,
            },
        );
    

    This is quite verbose. I'd love to be able to use just plain strings here like this:

        tools.insert(
            "bat",
            ToolInfo {
                owner: "sharkdp",
                repo: "bat",
                exe_name: "bat",
                tag: ToolInfoTag::Latest,
                asset_name: AssetName {
                    linux: Some("x86_64-unknown-linux-musl"),
                    macos: Some("x86_64-apple-darwin"),
                    windows: Some("x86_64-pc-windows-msvc"),
                },
            },
        );
    

    I tried doing something like this in the past but the code became quite complicated due to the management of all the lifetimes in the type signatures. But maybe there's a good middle-ground, so I want to try again 🤔

    refactoring 
    opened by chshersh 14
  • [#107] Remove dynamically-linked 'tool-sync' asset

    [#107] Remove dynamically-linked 'tool-sync' asset

    Resolves #107

    Additional tasks

    • [ ] Documentation for changes provided/changed
    • [ ] Tests added
    • [ ] Updated CHANGELOG.md
    test CI hacktoberfest-accepted 
    opened by jim4067 11
  • [#133] Added shell completion

    [#133] Added shell completion

    Resolves #133

    This pr aims to add a tab completion script so users don't have to remember every command if they want to experiment with config options.

    Additional tasks

    • [x] Documentation for changes provided/changed
    • [x] Tests added
    • [x] Updated CHANGELOG.md
    documentation CLI output hacktoberfest-accepted 
    opened by MitchellBerend 11
  • Shell completion script

    Shell completion script

    The clap documentation points to clap_completion as a related project. Just like tool-sync can generate a default .tool.toml I think it's a good idea for it to be able to generate shell completion scipts for commonly used shells (Bash, fish, zsh for example). clap_complete supports these out of the box.

    It would add a new dependency to the project, but I think for what it provides that is more than worth it. I think implementing this should be straight forward, but the help text for this command should also contain instructions as to how this completion should be used.

    ~~Edit: blocked by #136~~ Unblocked by @SanchithHegde

    enhancement question 
    opened by MitchellBerend 11
  • Create 'AssetError' and test 'select_asset' function

    Create 'AssetError' and test 'select_asset' function

    This function selects an asset to download based on config:

    https://github.com/chshersh/tool-sync/blob/b79eeb91cfdc3a122e6693d503117f68ff1fb44e/src/model/tool.rs#L72-L86

    Currently, it returns Result<Asset, String> but the goal is to return a custom type for error: Result<Asset, AssetError.

    The idea is to replace String a custom constructor and add tests for these cases.

    • [x] Create a new enum with two constructors
    • [x] Implement the std::fmt::Display trait
    • [x] Replace String with enum
    • [x] Write tests
    good first issue test refactoring 
    opened by chshersh 11
  • [#116] prevent sha from being included in asset name hits

    [#116] prevent sha from being included in asset name hits

    Resolves #116 This pr adds filters out the sha substring in the asset name so it does not get trigger a MultipleFound error. It also augments a test to check this behaviour.

    Thanks to @slyshykO for finding this bug and reporting it.

    Additional tasks

    • [ ] Documentation for changes provided/changed
    • [x] Tests added
    bug 
    opened by MitchellBerend 9
  • Left over debug println in proxy implementation should be removed

    Left over debug println in proxy implementation should be removed

    https://github.com/chshersh/tool-sync/blob/395b21c5d39ac4e39b492657954eb283319b2291/src/infra/client.rs#L27-L57

    These 2 functions have left over println calls from development. These look really weird when syncing a bunch of tools, instead of reusing the first shell line tool will print out None or the proxy passed in and continue to do that until all info is fetched.

    image

    good first issue output hacktoberfest 
    opened by MitchellBerend 8
  • Support path 'asset_name/bin/<exe_name>' inside assets

    Support path 'asset_name/bin/' inside assets

    This is needed for some tools. Example:

    • https://github.com/cli/cli/releases/tag/v2.14.7

    All the search paths are specified here:

    https://github.com/chshersh/tool-sync/blob/cb339b09238964e8dc2d1a72389b6624c5bb7599/src/sync/archive.rs#L144-L153

    To fix this problem:

    • [ ] Add one more path search entry
    • [ ] Add tests for gh
    enhancement good first issue 
    opened by chshersh 8
  • [#82] Adds proxy as a flag and config option

    [#82] Adds proxy as a flag and config option

    Resolves #82

    This pr adds a proxy flag and a proxy option to the tool.toml, if both are supplied the proxy flag supersedes the config option.

    Additional tasks

    • [ ] Documentation for changes provided/changed
    • [ ] Tests added
    • [x] Updated CHANGELOG.md
    enhancement help wanted hacktoberfest-accepted 
    opened by MitchellBerend 7
  • Add current version to the generated config without hard coding it in the actual template.

    Add current version to the generated config without hard coding it in the actual template.

    Referencing #62

    Would be cool to also say by which version of tool-sync but not sure how to do this without hardcoding the version

    We can do some magic in a build.rs file that can generate the src/config/template.rs so it contains the version in the config template itself.

    Im not quite sure if a build.rs is the best way to implement this since this means we have to have a template for the src/config/template.rs file itself. This sounds like a very weird approach to me but I currently don't see any other way to do this.

    The build.rs file would look something like

    
    const TEMPLATE_RS_TEMPLATE: &str = r##"
    The actual template
    "##
    
    
    fn main() -> std::io::Result<()> {
      std::fs::write_all("src/config/template.r", TEMPLATE_RS_TEMPLATE)?;
    }
    
    
    config 
    opened by MitchellBerend 6
  • [#69] Improves error message when the tag is not found

    [#69] Improves error message when the tag is not found

    Resolves #69

    This PR improves error message when the tag is not found by adding new TagError error that displays a useful error message. Besides that, the error message may also display a suggestion (Did you mean?) by fetching the available tags and finding the similar one calculating Edit distance.

    Additional tasks

    • [ ] Documentation for changes provided/changed
    • [x] Tests added
    • [x] Updated CHANGELOG.md
    output hacktoberfest-accepted 
    opened by crudiedo 5
  • Bash autocompletion doesn't work

    Bash autocompletion doesn't work

    I'm trying to configure autocompletion for tool-sync. Unfortunately, it doesn't work on my Ubuntu 20.04 and bash shell. I'm trying to add the suggested line to .bashrc and ~/.bash_profile (I also made sure that I have bash-completion installed).

    I tried specifying the following lines. But nothing works for me:

    eval "$(tool completion bash)"
    eval "$(tool completion bash --rename tool)"
    `eval "$(tool completion bash)"`
    `eval "$(tool completion bash --rename tool)"`
    source <(tool completion bash)
    source <(tool completion bash --rename tool)
    

    So some investigation is required to fix this. Maybe it's just me. I'll have a look at the completion package and see if anything needs to be done or how to make it work.

    On top of that, I can see, this probably happens because by default, the tool completion command uses the tool-sync name.

    complete -F _tool-sync -o bashdefault -o default tool-sync
    

    It would be great if tool was used by default (maybe there's a way to do this in the autocompletion package we use?). Otherwise, documentation should change to always suggest the --rename flag.

    bug 
    opened by chshersh 4
  • [#138] Properly scope path to exe file under temp directory

    [#138] Properly scope path to exe file under temp directory

    A top-level .exe file is passed through to copy_file without unpacking an archive, which is correct. However, the file was not correctly referred to under the temp directory, meaning we could not find the file to copy.

    Resolves #138

    Additional tasks

    • [ ] Documentation for changes provided/changed
    • [x] Tests added
    • [x] Updated CHANGELOG.md
    opened by binyomen 0
  • Adding lint options to prevent stray debug println

    Adding lint options to prevent stray debug println

    This is a continuation of #148. The code snippet below can be added at the top ofsrc/lib.rs to prevent println! that are used for debugging purposes, from making it into the main branch.

    #![deny(clippy::print_stdout)]
    
    #[deny(clippy::print_stdout)]
    mod completion;
    #[deny(clippy::print_stdout)]
    mod config;
    #[deny(clippy::print_stdout)]
    mod infra;
    #[deny(clippy::print_stdout)]
    mod install;
    #[deny(clippy::print_stdout)]
    mod model;
    #[deny(clippy::print_stdout)]
    mod sync;
    
    opened by MitchellBerend 1
  • [#150] Added more helpful error message if config toml file not found…

    [#150] Added more helpful error message if config toml file not found…

    … (#150)

    While this improves the error message I could not see a good way to fit the change into a test at present, let me know if there are any changes you'd like me to make.

    Resolves #150

    • [ ] Documentation for changes provided/changed
    • [ ] Tests added
    • [ ] Updated CHANGELOG.md
    hacktoberfest-accepted 
    opened by gybrish 1
  • Adding attributes to catch stray debug prints before merging

    Adding attributes to catch stray debug prints before merging

    ~~Resolves #148~~ Resolves #156

    ~~This pr does not actually resolve any issue but it will prevent stray debug println from being commited to the main branch in the future.~~

    This pr adds attributes to all the modules imported in src/lib.rs. These attributes prevent stray debug println!s from making it into the main branch.

    For future reference, you can annotate your function or method with the following attribute so clippy passes ci:

    #[allow(clippy::print_stdout)]
    fn your_function() {}
    

    Additional tasks

    ~~- [ ] Documentation for changes provided/changed~~ ~~- [ ] Tests added~~ ~~- [ ] Updated CHANGELOG.md~~

    CI blocked 
    opened by MitchellBerend 1
  • add shellcheck

    add shellcheck

    Resolves #146

    For unsupported tar compressions, i made a string-based io::Error. I tried adding an AssetError variant for clarity, but constructing it in archive.rs proved much difficult. But it shouldn't be reachable because of Archive::from anyhow.

    I added an early $name-$tag string because threading ToolAsset fields through the function added many &str parameters, which then get combined at the leaf exe_paths.

    Additional tasks

    • [ ] Documentation for changes provided/changed
    • [x] Tests added
    • [x] Updated CHANGELOG.md
    opened by hdhoang 0
Releases(v0.2.0)
  • v0.2.0(Sep 20, 2022)

    What's Changed

    • [#46] Support tool-sync by tool-sync by @chshersh in https://github.com/chshersh/tool-sync/pull/47
    • [#49] Specify which version of the tool was actually downloaded by @MitchellBerend in https://github.com/chshersh/tool-sync/pull/60
    • [#32] Add tag option to download a specific tool version by @FrancisMurillo in https://github.com/chshersh/tool-sync/pull/61
    • [#63] Added tag support in download progress by @MitchellBerend in https://github.com/chshersh/tool-sync/pull/64
    • [#52] Adds a generate command for a default .tools.toml file by @MitchellBerend in https://github.com/chshersh/tool-sync/pull/62
    • added pull request template by @MitchellBerend in https://github.com/chshersh/tool-sync/pull/74
    • [#73] adding .precommit yaml by @MitchellBerend in https://github.com/chshersh/tool-sync/pull/79
    • Better CI caching by @chshersh in https://github.com/chshersh/tool-sync/pull/81
    • [#33] Better end-of-sync output by @chshersh in https://github.com/chshersh/tool-sync/pull/80
    • [#73] Adds build.rs to generate a default config template with tool version by @MitchellBerend in https://github.com/chshersh/tool-sync/pull/78
    • [#57] Adds install command to install known tools by @MitchellBerend in https://github.com/chshersh/tool-sync/pull/89
    • Refactor commands into separate modules by @chshersh in https://github.com/chshersh/tool-sync/pull/94
    • [#87] Use statically linked binaries for linux by @chshersh in https://github.com/chshersh/tool-sync/pull/95
    • [#83] Create 'AssetError' and refactor 'select_asset' function to return it by @zixuanzhang-x in https://github.com/chshersh/tool-sync/pull/97
    • [#88] Replace custom display() method with std::fmt::Display trait implementation by @zixuanzhang-x in https://github.com/chshersh/tool-sync/pull/99
    • [#98] changed all formatting functions so they accept a type that implements Display by @MitchellBerend in https://github.com/chshersh/tool-sync/pull/100
    • [#54] Adding extra path and added a new error for the case where multiple assets are found by @MitchellBerend in https://github.com/chshersh/tool-sync/pull/102
    • [#56] Improve documentation for v0.2.0 by @chshersh in https://github.com/chshersh/tool-sync/pull/101
    • [#55] Don't require 'exe_name' in the configuration by @chshersh in https://github.com/chshersh/tool-sync/pull/104
    • Specify 'tool-sync' asset name more precisely by @chshersh in https://github.com/chshersh/tool-sync/pull/105

    New Contributors

    • @MitchellBerend made their first contribution in https://github.com/chshersh/tool-sync/pull/60
    • @FrancisMurillo made their first contribution in https://github.com/chshersh/tool-sync/pull/61
    • @zixuanzhang-x made their first contribution in https://github.com/chshersh/tool-sync/pull/97

    Full Changelog: https://github.com/chshersh/tool-sync/compare/v0.1.0...v0.2.0

    Source code(tar.gz)
    Source code(zip)
    tool-x86_64-apple-darwin.sha256(98 bytes)
    tool-x86_64-apple-darwin.tar.gz(1.36 MB)
    tool-x86_64-pc-windows-msvc.sha256(98 bytes)
    tool-x86_64-pc-windows-msvc.zip(1.28 MB)
    tool-x86_64-unknown-linux-gnu.sha256(103 bytes)
    tool-x86_64-unknown-linux-gnu.tar.gz(1.44 MB)
    tool-x86_64-unknown-linux-musl.sha256(104 bytes)
    tool-x86_64-unknown-linux-musl.tar.gz(1.49 MB)
Owner
Dmitrii Kovanikov
Passionate Haskell and Rust Developer, @haskell-beginners-2022 mentor.
Dmitrii Kovanikov
Scan the symbols of all ELF binaries in all Arch Linux packages for usage of malloc_usable_size

Scan the symbols of all ELF binaries in all Arch Linux packages for usage of malloc_usable_size (-D_FORTIFY_SOURCE=3 compatibility)

null 3 Sep 9, 2023
⚙️ A curated list of static analysis (SAST) tools for all programming languages, config files, build tools, and more.

This repository lists static analysis tools for all programming languages, build tools, config files and more. The official website, analysis-tools.de

Analysis Tools 10.7k Jan 2, 2023
Dead simple, memoized cargo subcommand to hoist cargo-built binaries into the current working directory, written in Rust.

cargo-hoist Dead simple cargo subcommand to hoist cargo-built binaries into scope. stable Install | User Docs | Crate Docs | Reference | Contributing

refcell.eth 6 Nov 9, 2023
tpp (Tera Pre-Processor) is a versatile CLI (Command Line Interface) tool crafted for preprocessing files using the Tera templating engine.

tpp (Tera Pre-Processor) is a versatile CLI (Command Line Interface) tool crafted for preprocessing files using the Tera templating engine. Drawing inspiration from pre-processors like cpp and gpp, tpp is the next evolution with its powerful expressive toolset.

null 3 Nov 23, 2023
CarLI is a framework for creating single-command and multi-command CLI applications in Rust

CarLI is a framework for creating single-command and multi-command CLI applications in Rust. The framework provides error and IO types better suited for the command line environment, especially in cases where unit testing is needed.

Kevin Herrera 3 Jan 21, 2022
A toolkit for building your own interactive command-line tools in Rust

promkit A toolkit for building your own interactive command-line tools in Rust, utilizing crossterm. Getting Started Put the package in your Cargo.tom

null 70 Dec 18, 2022
Download binary for your OS from Github

github-bin-downloader Download binary for your OS from Github. Installation Install github-bin-downloader using cargo cargo install github-bin-downloa

353fc443 10 Dec 11, 2022
Nazuna - 🐦 Download Twitter videos using your terminal!

Nazuna ?? Download Twitter videos using your terminal! Installation Binary Download the desired file for your OS (Windows, Mac, Linux) from https://gi

Felipe Garcia 27 Nov 22, 2022
Download your Stripe account to a SQLite database.

tdog tdog is a CLI to download your Stripe account to a SQLite database. table.dog Sponsor development Install # macOS: curl -L --output /usr/local/bi

Table Dog 16 Oct 10, 2022
A simple CLI I made while practicing rust to easily make QR codes with just one command, all in your terminal.

Welcome to rust-qrcode-cli ?? A CLI I made while practicing rust to easily make QR codes with just one command, all in your terminal. Install git clon

Dhravya Shah 2 Mar 2, 2022
ddi is a wrapper for dd. It takes all the same arguments, and all it really does is call dd in the background

ddi A safer dd Introduction If you ever used dd, the GNU coreutil that lets you copy data from one file to another, then you may have encountered a ty

Tomás Ralph 80 Sep 8, 2022
Librarian runs pre-configured commands against a group of files that match a set of filters

Filesystem Librarian Librarian runs pre-configured commands against a group of files that match a set of filters. The group of files is called a libra

Jason Rogena 10 Dec 25, 2022
Easy access of struct fields in strings using different/custom pre/postfix: "Hello, {field}" in rust

Easy access to struct fields in strings ?? add strung to the dependencies in the Cargo.toml: [dependencies] strung = "0.1.3" ?? use/import everything

Dekirisu 2 Sep 19, 2022
(Pre-Release Software) Secure, Encrypted, P2P chat written atop Warp, IPFS, LibP2P, Dioxus and many more awesome projects and protocols.

Uplink Privacy First, Modular, P2P messaging client built atop Warp. Uplink is written in pure Rust with a UI in Dioxus (which is also written in Rust

Satellite 13 Jan 25, 2023
Pre-commit hook to help me stop naming files *.yml half of the time

Disallow file endings Pre-commit hook that lets you specify banned file endings. I keep naming half my yaml files *.yaml and the other *.yml and it's

Sondre Lillebø Gundersen 4 Mar 8, 2023
⚙️ Pre-commit hook for downgrading Python logger syntax

printf-log-formatter Automatically convert f-strings and str.format() syntax to printf-style strings. In other words, this syntax logger.error(f"{1}")

snok 5 Apr 25, 2023
rehype plugin to use tree-sitter to highlight code in pre code blocks

rehype-tree-sitter rehype plugin to use tree-sitter to highlight code in <pre><code> blocks Contents What is this? When should I use this? Install Use

null 5 Jul 25, 2023
🚀 JavaScript driver for ScyllaDB, harnessing Rust's power through napi-rs for top performance. Pre-release stage. 🧪🔧

?? JavaScript driver for ScyllaDB. Pre-release stage. ???? ⚠️ Disclaimer ⚠️ This repository and the associated npm package are currently in a ?? pre-r

Daniel Boll 16 Oct 21, 2023