hookman
Add hooks to your Git repository using a TOML file.
Table of Contents
Key Features
- Automates the creation of multiple git hooks with just one TOML file.
- No symlinks, no additional
chmod +xcommands or perm-handling is needed.hookmandoes it all for you. - Hooks event validation so that you don't accidentally write a wrong hook type.
- Tiny & fast; Made using Rust.
Usage
The usage is pretty straightforward.
When inside the directory of a Git repository, create a new hookman.toml file with the following structure:
[<event>] # the hook type/event (pre-commit, update etc.)
= "<command>" # you can either have a `run` field with the command itself
= "<script path>" # or, your personal script inside the directory
For example:
[]
= "pip install -U -r requirements.txt && pip list > requirements.txt"
[]
= "scripts/bundle-app.sh"
- To put your hooks into action, run:
# or use this command to use the current shell for hook execution later on
With this command, hookman handles all script permissions, relocation and other mundane tasks without you ever having to touch it.
- To list all installed hooks, run:
- To list all possible events a hook can be attached to, run:
- And, to remove/clean all hooks:
Installation
Install using cargo:
Or, you can set it up globally using mise:
# Note: This will compile the binary for your system.
For macOS, you can install using Homebrew:
Manual Installation
If your platform isn't enlisted here, you can opt for the compressed binary downloads in the GitHub Releases section of the repository.
Note than on devices running macOS, you'll have to remove the quarantine attribute from the binary:
Contributing
hookman is a very tiny project for those who'd like to use an extremely minimal setup for managing git hooks, so I don't think there is a need to follow a mandatory set of rules for contribution. Anyhow, pull requests, and new issues regarding feature suggestions, bug fixes or new ideas are always welcome!
License
Licensed under the MIT License. Please check LICENSE for more information.