Skip to content

preiter93/pacs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

44 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

pacs

Crate IO Crates.io Downloads Continuous Integration Deps Status License

Project Aware Command Storage - A CLI for managing and running saved shell commands.

Demo

Install

Package manager Command
Homebrew brew install preiter93/pacs/pacs
Cargo cargo install pacs

Usage

pacs init                       # initialize pacs and create first project
pacs add build "cargo build"    # save a command to active project
pacs run build                  # run it
pacs ls                         # list all commands in active project
pacs edit build                 # edit in $EDITOR
pacs rm build                   # delete it

pacs project add MyProject      # create a project
pacs project switch MyProject   # set active project
pacs project active             # show active project

Example Output

MyProject

hello-world:
echo "Hello World"

[k8s]
get-pods:
kubectl --context dev get pods -o wide

Environments and Placeholders

Use double curly braces to mark placeholders:

pacs add get-pods -t k8s 'kubectl --context {{kube-context}} get pods -o wide'

Define project-specific environments and values:

pacs env add dev            # add an environment to active project
pacs env edit               # edit environments in $EDITOR
pacs env ls                 # list all environments
pacs env switch dev         # set active environment

Listing, running, and copying with a specific environment:

pacs ls -e dev              # list with environment
pacs run get-pods -e dev    # run with environment
pacs copy get-pods -e dev   # copy with environment

Notes:

  • All commands are project-scoped. You must have an active project to add or run commands.
  • If no active environment is set (or values are missing), pacs shows the raw unexpanded command.
  • If active environment is set and environment values are defined, pacs expands the command before listing, running or copying it.

Shell Completions

Zsh (~/.zshrc):

source <(COMPLETE=zsh pacs)

Bash (~/.bashrc):

source <(COMPLETE=bash pacs)

Fish (~/.config/fish/config.fish):

source (COMPLETE=fish pacs | psub)

Why PACS?

Why PACS? Why not just use another command runner like make or just? I use PACS more like a vault than a sophisticated runner. Over time, I’ve accumulated commands that I need every now and then; commands that don’t quite make it into the official scripts, makefiles or justfiles of my projects.

Even more so when collaborating with others, I don't want to dump all those commands into the repo. But usually the day comes when I have to deploy a busybox or a postgres database in a kubernetes cluster but the docker command is just too difficult for me to remember. Then I find myself scouring through my terminal history to search for it, hoping its still not pushed off the cliff of my history limit...

I wished I could have all those commands sorted and lying around, ready for the day I need them. That’s why I created PACS. And to be honest, it was also an excuse to write more Rust and to create a new TUI, but that’s still to come.

About

PACS - Project Aware Command Storage

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •