#git-hooks #git #cli #rust

bin+lib hooksmith

Trivial git hook management tool

8 stable releases

new 1.9.0 May 21, 2025
1.8.1 May 8, 2025
1.5.0 Apr 28, 2025
0.2.1 Apr 21, 2025
0.1.1 Apr 21, 2025

#1662 in Command line utilities

Download history 354/week @ 2025-04-15 533/week @ 2025-04-22 629/week @ 2025-04-29 277/week @ 2025-05-06 91/week @ 2025-05-13

1,884 downloads per month
Used in rona

Apache-2.0 OR MIT

41KB
719 lines

๐Ÿช Hooksmith

                ,"(                             .
               ////\                           /
              (//////--,,,,,_____            ,"
            _;"""----/////_______;,,        //
__________;"o,-------------......"""""`'-._/(
      ""'==._.__,;;;;"""           ____,.-.==
             "-.:______,...;---""/"   "    \(
                 '-._      `-._("           \\
                     '-._                     '._

Git Hook Management Made Simple

Crates.io Version Documentation License Build Status

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.

๐Ÿ“‹ Table of Contents

โœจ Features

  • โš™๏ธ Automatic Installation - Set up hooks through your build scripts with build.rs
  • ๐Ÿงช Local Testing - Run hooks manually without triggering Git events
  • ๐Ÿ” Dry Run Mode - Preview what would happen without making changes
  • โœ… Hook Validation - Ensure your hooks comply with Git standards
  • ๐Ÿ“ Simple Configuration - Define all your hooks in a clean YAML format

โšก Why Hooksmith?

  • Minimal Dependencies - Lightweight with only essential dependencies
  • Rust Powered - Fast, reliable, and type-safe
  • Team Friendly - Version control your hook configurations
  • Seamless Integration - Works naturally with your Git workflow
  • Low Learning Curve - Simple commands and clear documentation

๐Ÿ”ง Installation

Using Cargo

cargo install hooksmith

As a Build Dependency

Add to your Cargo.toml:

[build-dependencies]
hooksmith = "1.4.3"

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.

๐Ÿš€ Quick Start

  1. Create a hooksmith.yaml file in your project root:
pre-commit:
  commands:
    - cargo fmt --all -- --check
    - cargo clippy -- --deny warnings

pre-push:
  commands:
    - cargo test
  1. Install the hooks:
hooksmith install

That's it! Your Git hooks are now ready to use.

๐Ÿ“– Usage

Configuration File

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

Common Commands

# 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 Reference

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

Global Options

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

๐Ÿค Contributing

Contributions are welcome! Feel free to:

  • Report bugs and suggest features
  • Submit pull requests
  • Improve documentation
  • Share your use cases and feedback

๐Ÿ“„ License

This project is dual-licensed under either:

at your option.

Dependencies

~2.6โ€“3.5MB
~70K SLoC