2 releases
| 0.1.1 | Sep 17, 2024 |
|---|---|
| 0.1.0 | Aug 7, 2024 |
#887 in Development tools
89 downloads per month
40KB
914 lines
CXD
Command Executor per Directory (cxd) provides a simple interface to save and execute
commands within specific directories.
Background
While working in large codebases with several executables, it was common for me to add
custom scripts and Makefiles to each directory. This allowed me to not have to rely on
bash history to remember my specific commands. However, after one too many git-merge
events overwriting my temporary Makefiles, I wrote cxd.
Dependencies
libsqlite3
Installation
cargo install cxd
Bash Completions
Clone the files under pkg/completions/bash/ to the first of the following directories.
/usr/share/bash-completion/completions/- (deprecated)
/etc/bash_completion.d/
Zsh Completions
Clone the files under pkg/completions/zsh/ to any directory listed by echo $fpath.
For example, on Debian 12 this includes /usr/share/zsh/vendor-completions by default.
You may need to logout and login for these changes to take effect.
Use
cxd uses a sqlite database to save commands and their respective directories to execute
at a later time. Database cache files can be saved and reused across devices. However,
note that you should NEVER trust a cache file from an outside source, as cxd
will execute arbitrary commands from the database.
Selecting Cache File
By default, cxd will attempt to store the cache file in the following locations, and
fail if unable to construct any.
- Contents of
-f FILEor--file FILE $CXD_CACHE_DIR/cxd.cache$XDG_CACHE_HOME/cxd.cache$HOME/.cache/cxd.cache
Adding a Command
To add a command to the database, use cxd --add <NAME> <CMD> [ARG]....
cxd --add hello echo Hi there!
This will register a command named hello that prints out a greeting.
If you'd like the command to swap directories back to your current $CWD before invoking
the command, pass the --cwd flag.
cxd --add --cwd build cargo build
Similarly, you can set a specific working directory with --dir <DIR>.
cxd --add --dir /src/cxd build cargo build
If specific environment variables must be set, use --env <KEY>=<VALUE>.
cxd --add --env SOME_ENV=hi hello printenv SOME_ENV
Executing a command
To execute a command from the database, use cxd <CMD>.
cxd hello
Removing a command
To remove a command from the database, use cxd --remove <CMD>.
cxd --remove hello
Listing
To list all commands in the database, use cxd --list.
cxd --list
Clearing
To clear all commands in the database, use cxd --clear.
cxd --clear
Tips
Using multiple cache files
It can be useful to segment cache files for specific commands. A simple and ergonomic way to do this is to set aliases.
For example, imagine you want two separate cache files, one for playing media and one for building executables.
Then you can add the following to your .bashrc, .zshrc, or equivalent.
alias build="cxd -f .cache/cxd.build.cache"
alias play="cxd -f .cache/cxd.play.cache"
This allows you to run cxd with each cache file as if it were two different commands, build and play.
Dependencies
~23MB
~450K SLoC