alt
is a command line utility that lets you switch between different versions
of commands based on your current directory.
As developers, we work with a large number of tools. When we move from codebase to codebase, those tools and their versions change. Switching between the different versions of those tools every time you change codebase is a nightmare.
This is where alt
comes in. It will automatically switch the version of
commands when you move to a different codebase.
There are other tools out there that solve this problem. alt
distinguish
itself in a few ways:
- tool / language agnostic: Some version switching tools only work with a
specific tool or programming language.
alt
is generic. It works for any command. - no shell pollution: Most version switching tools hook themselves into
your shell. This can slow down your shell's start time.
alt
does not hook into your shell. You can use it without slowing down your shell start time. - only version switching: Unlike other tools,
alt
does not take responsibility for installing different versions of commands or managing their dependencies. How you install different versions of commands is entirely up to you.
-
Open the latest release page on Github
-
Download the
.deb
file matching your system architecture -
Install the
.deb
file by double clicking on it -
OR Install the
.deb
file from the command linesudo apt install ./path/to/alt.deb
You will probably need to log out & log back in to your desktop session for
alt
to be configured.
brew tap dotboris/alt
brew install alt
Pay close attention to the "Caveats" messages as you'll need to add a line to
your ~/.bashrc
/ ~/.zshrc
files.
See: doc/install-pre-packaged-bins.md
See: doc/install-from-source.md
Using alt
is done in two steps:
- First, you tell
alt
about the different versions of commands installed on your system. - Second, you tell
alt
what version of your commands to use in a given directory.
alt
can automatically scan your system to find different version of a command.
This can be done with the alt scan
command:
alt scan some-command
This will bring up a menu that lets you choose all the versions of the given
command that you want to use with alt
.
- ↑ / ↓ or j / k: Move cursor
- Space: Make version available to
alt
- Enter: Confirm and save selection
If alt
is not able to find a version of a command automatically for you, you
can always define the command version by hand.
This can be done with the alt def
command:
alt def some-command version-name /path/to/command/bin
Remember that alt
decides what version of a command to use based on the
current directory. When you select a command version, it's for the current
directory.
You can tell alt
to use a specific version of a command in the current
directory with the alt use
command:
alt use some-command
This will bring up a menu that lets you choose the version of the specified command that you want to use.
- ↑ / ↓ or j / k: Move cursor
- Enter: Select version to use
If menus aren't your cup of tea, you can specify the version on the command line:
alt use some-command version-name
Note: If you want to use the system version without the menu, you can pass
system
as the version-name
.
alt use some-command system
alt show
The above command will show you:
- All commands
alt
knows about - The versions of those commands available
- The versions being used in the current directory
If you are experiencing issues with alt
, you should try running alt
's
built-in self-healing command:
alt doctor
This command will look for problems, report them to you and, in some cases, propose an automatic fix.
If alt doctor
is not able to find or fix your problem, you can try looking at
the sections below. If that doesn't help, feel free to open an
issue. We'll be happy to help you
out.
Behind the scenes, alt
manages a directory of "shims"
($HOME/.local/alt/shims
). In order to switch the version of commands, it needs
that directory to be at the top of your PATH
environment variable.
During the install process, we install scripts that configure this
automatically for you. These scripts are /etc/profile.d/alt.sh
&
/etc/fish/conf.d/alt.fish
(the location of these scripts may vary on some
platforms).
In some cases, you may need to force these scripts to re-load. You can try the following steps:
- Close & re-open your terminal
- Log out of your desktop session & log back in again
If either or both of these fail, you can put the shim directory on top of your
PATH
manually. This will vary depending on what shell you use.
# For BASH
echo 'export PATH="$HOME/.local/alt/shims:$PATH"' >> ~/.bashrc
# For ZSH
echo 'export PATH="$HOME/.local/alt/shims:$PATH"' >> ~/.zshrc
# For FISH
echo 'set -gx PATH "$HOME/.local/alt/shims" $PATH' >> ~/.config/fish/config.fish
During it's normal operation, alt
puts a file named .alt.toml
in the current
directory. You should not commit .alt.toml
to git or any other VCS. To
avoid getting those files all over your git repositories, you can add them to a
global gitignore file.
If you don't know how to create a global gitignore file, see: https://help.github.com/articles/ignoring-files/#create-a-global-gitignore
echo '.alt.toml' >> path/to/your/global-gitgnore