Crates.io | hooksmith |
lib.rs | hooksmith |
version | 1.12.0 |
source | src |
created_at | 2025-04-21 01:21:33.334488+00 |
updated_at | 2025-06-04 04:55:37.30978+00 |
description | Trivial git hook management tool |
homepage | https://github.com/TomPlanche/hooksmith |
repository | https://github.com/TomPlanche/hooksmith |
max_upload_size | |
id | 1642166 |
size | 74,714 |
,"( . ////\ / (//////--,,,,,_____ ," _;"""----/////_______;,, // __________;"o,-------------......"""""`'-._/( ""'==._.__,;;;;""" ____,.-.== "-.:______,...;---""/" " \( '-._ `-._(" \\ '-._ '._
Hooksmith is a lightweight, easy-to-use tool that simplifies Git hook management. Define your hooks in a simple YAML file and let Hooksmith handle the rest.
build.rs
cargo install hooksmith
Add to your Cargo.toml
:
[build-dependencies]
hooksmith = "1.10.0"
Create a build.rs
file:
use std::path::Path;
fn main() {
let config_path = Path::new("hooksmith.yaml");
hooksmith::init(&config_path);
}
๐ก Note: Hooksmith includes shell completions for Fish. After installation, they become available automatically.
Hooksmith is built with minimal but powerful dependencies:
clap
: For robust command-line argument parsingconsole
& dialoguer
: For beautiful terminal interfacesserde
& serde_yaml
: For YAML configuration handlingthiserror
: For ergonomic error handlinghooksmith.yaml
file in your project root:pre-commit:
commands:
- cargo fmt --all -- --check
- cargo clippy -- --deny warnings
pre-push:
commands:
- cargo test
hooksmith install
That's it! Your Git hooks are now ready to use.
Hooksmith uses a YAML configuration file (default: hooksmith.yaml
) to define your hooks:
# Format and lint code before committing
pre-commit:
commands:
- cargo fmt --all -- --check
- cargo clippy --workspace --all-features -- --deny warnings
# Run tests before pushing
pre-push:
commands:
- cargo test --all-features
- cargo build --verbose
# Validate commit messages
commit-msg:
commands:
# Use custom script to validate commit messages
- ./scripts/verify-commit-message.sh $1
# Install all hooks defined in configuration
hooksmith install
# Run a specific hook manually
hooksmith run pre-commit
# Uninstall all hooks or a specific one
hooksmith uninstall
hooksmith uninstall pre-commit
# Compare installed hooks with configuration
hooksmith compare
# Validate hook configuration against Git standards
hooksmith validate
Add --dry-run
to any command to preview changes without applying them:
hooksmith install --dry-run
Command | Description |
---|---|
install |
Install all hooks from configuration file |
run <hook> |
Run a specific hook manually |
uninstall [hook] |
Uninstall all hooks or a specific one |
compare |
Compare installed hooks with configuration |
validate |
Validate hook configuration against Git standards |
Option | Description |
---|---|
--config-path <PATH> |
Specify a custom configuration file path |
--dry-run |
Preview changes without applying them |
--verbose |
Show detailed output during execution |
--help |
Display help information |
Contributions are welcome! Feel free to:
This project is dual-licensed under either:
at your option.