#dev #manage #github #environments #alias #tool #version

bin+lib vers

Install and manage dev tools with multiple environments

9 releases (4 breaking)

0.5.0 Nov 25, 2022
0.4.0 Nov 15, 2022
0.3.1 Oct 15, 2022
0.3.0 Sep 29, 2022
0.1.1 Jul 18, 2022

#2568 in Command line utilities

Download history 4/week @ 2024-02-25 30/week @ 2024-03-31 38/week @ 2024-04-14

68 downloads per month

MIT/Apache

76KB
1.5K SLoC

Vers

A command line utility designed to help manage other dev tools on your machine, installing from GitHub Releases (more to come in the future).

Getting Started

If you already have Rust installed the quickest install method is cargo install vers for now. If not download the latest release for your system from GitHub Releases.

Setup your shell environment by using the following

# Shell can also be fish or zsh
$ vers env --shell bash >> ~/.bash_profile
export PATH="/Users/reynn/Library/Application Support/dev.reynn.vers/envs/global:$PATH"

Install your first tool is as easy as issuing something like the following

# This will install the latest version of the GitHub CLI and alias it so you can call it using `gh`
# if no alias is provided the repository name is used
$ vers add cli/cli --alias gh
--> Installing tool cli/cli@2.10.1

# You can use the --show (short: -S) flag to show a list of versions available and allows you to select one
$ vers add cli/cli --alias --show
--> Installing tool cli/cli@2.9.0

Vers has a method to auto detect the asset from the release that is appropriate for your system, sometimes this fails due since there is no standardization in file naming. To override the autodetect feature use the --pattern (short: -p) flag

# --pattern is a regular expression
$ vers add cli/cli --alias gh --file-filter '.+macos.+'

The last important thing for the add feature is using a --file-filter (short: -f) this is used to search for the resulting binary once the asset down is complete and extracted, or not. This defaults to the alias if provided or the repository name.

# --file-filter is also a regular expression
$ vers add jesseduffield/lazygit --alias lg --file-filter '^lg$'

Since the repo name is lazygit but the actual binary name is lg the filter needs to be provided so vers can find the extracted binary.

Environments

Multiple environments are supported but are still in an early state.

# the --pre-release (short: -P) flag can be used to include pre release versions in the results
$ vers --env betas add cli/cli --alias gh-beta --pre-release

Directory Structure

 /Users/<USER>/Library/Application Support/dev.reynn.vers
├──  envs
│  ├──  global
│  │  └──  # symlinks here to the correct version of the tool under ../../tools
│  └──  global.json
└──  tools
   ├──  BurntSushi
   │  └──  RipGrep
   │     └──  13.0.0
   ├──  charmbracelet
   │  └──  glow
   │     └──  1.4.1
   ├──  ClementTsang
   │  └──  bottom
   │     ├──  0.6.8
   │     └──  nightly
   ├──  cli
   │  └──  cli
   │     ├──  2.9.0
   │     ├──  2.10.0
   │     └──  2.10.1
   ├──  digitalocean
   │  └──  doctl
   │     └──  1.75.0
   ├──  getzola
   │  └──  zola
   │     └──  0.15.3
   ├──  gohugoio
   │  └──  hugo
   │     └──  0.98.0
   ├──  jesseduffield
   │  └──  lazygit
   │     ├──  0.34
   ├──  junegunn
   │  └──  fzf
   │     └──  0.30.0
   ├──  k0sproject
   │  └──  k0sctl
   │     └──  0.13.0-rc.2
   ├──  lotabout
   │  └──  skim
   │     └──  0.9.4
   ├──  neovim
   │  └──  neovim
   │     ├──  0.7.0
   │     └──  nightly
   ├──  nushell
   │  └──  nushell
   │     └──  0.62.0
   ├──  ogham
   │  └──  exa
   │     └──  0.10.1
   ├──  sharkdp
   │  ├──  bat
   │  │  └──  0.21.0
   │  ├──  fd
   │  │  └──  8.3.2
   │  ├──  hexyl
   │  │  └──  0.9.0
   │  └──  hyperfine
   │     └──  1.14.0
   ├──  TomWright
   │  └──  dasel
   │     └──  1.24.3
   ├──  uutils
   │  └──  coreutils
   │     └──  0.0.13
   ├──  XAMPPRocky
   │  └──  tokei
   │     └──  12.1.2
   └──  zellij-org
      └──  zellij
         └──  0.29.1

Dependencies

~38–56MB
~1M SLoC