Opcode lets you define a simple configuration file in any directory. This file includes shortcuts to other commands.
For a similar project, but for globally accessible aliases, see alf.
The simplest way to install, is to run the installation script:
$ curl -Ls get.dannyb.co/opcode/setup | bash
If you prefer to install manually, simply download the op file, place it somewhere in your path, and make it executable.
When you execute op
, Opcode will look for a file named op.conf
(or opcode)
in the current directory. See the example/op.conf file
for reference.
The syntax of op.conf
is simple:
Each line should contain a code and the command to run:
code: command to run
For example:
commit: git commit -am "quick commit"
With this configuration, you can now simply run:
$ op commit
Any argument provided to the CLI will be forwarded to the command, so with this configuration:
commit: git commit -am
You can supply a commit message:
$ op commit "my commit message"
$ op --help
Usage:
op CODE [ARGS]
Execute a command from the config file (op.conf)
Arguments will be passed to the command (use with "$@")
op ?, -i, --info
Show all codes and their usage comments (#?)
op -l, --list
List command codes
op -s, --show
Show the config file (op.conf)
op -w, --what [CODE]
Show the command for a given code
op -e, --edit
Open the config file for editing
op -a, --add CODE COMMAND...
Append a command to the config file
op -h, --help
Show this message
op -v, --version
Show version number
In order to specify multiple commands for a single code, provide the commands indented with one or more spaces immediately under the command code:
up:
docker compose build
docker compose up web
The commands will be joined together using a newline, as they appear in your file.
Any excess argument provided when running op CODE
will be available to you
as they normally would in a bash script. You can access all of them by using
$@
, or the individual arguments at $1
, $2
etc.
Given this configuration:
deploy: git commit -am "$1" && git push
You can now run:
$ op deploy "version 1.1.1"
and it will be translated to this command
git commit -am "version 1.1.1" && git push
You may add special usage comments in your op.conf
file. These will be
displayed alongside their command code when running op ?
. The usage comments
must start with #?
and be placed underneath their associated command.
For example, this configuration file:
# op.conf
deploy: git commit -am "$1" && git push
#? perform git commit and push.
#? usage: op deploy COMMIT_MESSAGE
pull: git pull
#? perform git pull
will result in this output:
$ op ?
Usage: op COMMAND [ARGS]
deploy
perform git commit and push.
usage: op deploy COMMIT_MESSAGE
pull
perform git pull
Any comment that starts with ##
will be considered a section header, and will
be displayed as such when running op ?
.
For example, this configuration file:
# op.conf
## Testing Commands
test: rspec "$@"
#? Run tests
## Git Commands
pull: git pull
#? Perform git pull
will result in this output:
$ op ?
Usage: op COMMAND [ARGS]
Testing Commands
test
Run tests
Git Commands
pull
Perform git pull
Using the keyword private
in a separate line anywhere in your op.conf
file
will hide all subsequent commands from op ?
and op --list
. The private
commands can still be executed.
deploy: op clean && op build
test: docker compose run test
private
clean: rm tmp/*
build: docker build
When running a command, opcode will first try to find an exact match. If none is found, it will try to find a command that starts with the code you typed.
In other words, if you have this in your op.conf
file:
server: echo "Running Server" && rackup
You can run it with op server
, op s
and anything in between. The first
matched command will be executed.
Opcode comes with bash completion. If you install opcode using the setup script, bash completion will be installed automatically.
If you install opcode manually, and would like to enable bash completion,
simply add this to your ~/.bashrc
:
complete -C 'op --completion' op
$ curl -Ls get.dannyb.co/opcode/uninstall | bash
If you experience any issue, have a question or a suggestion, or if you wish to contribute, feel free to open an issue.