pacs-core

Crates.iopacs-core
lib.rspacs-core
version0.1.1
created_at2026-01-22 21:07:28.012774+00
updated_at2026-01-24 17:43:18.777352+00
descriptionProject Aware Command Storage - A CLI for managing and running saved shell commands
homepage
repositoryhttps://github.com/preiter93/pacs
max_upload_size
id2062625
size59,154
Philipp Reiter (preiter93)

documentation

README

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.

Commit count: 44

cargo fmt