Intuitively modify your $PATH
.
```shell
scoop bucket add jrhawley https://github.com/jrhawley/scoop-bucket
scoop install pad-path ```
shell
nix profile install github:jrhawley/pad-path
```shell
cargo install pad-path
git clone https://github.com/jrhawley/pad-path cd pad-path cargo install --path . ```
``shell
Intuitively modify your
$PATH`
USAGE: pad [SUBCOMMAND]
FLAGS: -h, --help Prints help information -V, --version Prints version information
SUBCOMMANDS: add Add a directory clean Remove duplicates and non-existent directories [aliases: dedup] dn Decrease priority for a directory [aliases: down, dec] help Prints this message or the help of the given subcommand(s) ls List the directories in PATH [aliases: echo] revert Revert to a previous version of PATH [aliases: undo] rm Remove a directory [aliases: del] up Increase priority for a directory [aliases: inc] ```
It would be convenient, but insecure, to have pad-path
modify the shell's environment variables directly.
Instead, pad-path
prints out what the new $PATH
will look like, and the user can set it as the value for $PATH
, or pipe it to another command.
In Bash, an example workflow is below.
```bash
pad ls /folder/to/remove /usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin /usr/games /usr/local/games /snap/bin
pad rm /folder/to/remove /usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin /usr/games /usr/local/games /snap/bin
export PATH=$(pad rm /folder/to/remove)
echo $PATH /usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin /usr/games /usr/local/games /snap/bin ```
Similarly, in PowerShell, you can assign the output of a pad-path
command to $Env:Path
.
```powershell
pad ls C:\WINDOWS\system32 C:\WINDOWS C:\WINDOWS\System32\WindowsPowerShell\v1.0 C:\WINDOWS\System32\OpenSSH C:\Program Files\dotnet
$Env:Path = (pad add "C:\Program Files\new_dir")
pad ls C:\WINDOWS\system32 C:\WINDOWS C:\WINDOWS\System32\WindowsPowerShell\v1.0 C:\WINDOWS\System32\OpenSSH C:\Program Files\dotnet C:\Program Files\new_dir ```
pad-path
is designed to work on Windows, macOS, and Linux operating systems.
To compile binaries for each of these systems, we make use of cargo-make
.
To build a release version, run:
```shell
cargo make build-release
cargo make build-release-windows cargo make build-release-macos cargo make build-release-linux
cargo make build-release-all ```
To create a tag and a release on GitHub, we make use of the GitHub CLI.
We generally follow the testing ideas in The Rust Programming Language Book.
To run tests quickly and concisely, we make use of cargo-nextest
.
```shell
cargo nextest run
cargo make test ```