# commitfmt
A git commit message formatter written in Rust.
## Features
- Enforces subject line length (default: 50 chars)
- Wraps body lines (default: 72 chars)
- Preserves git comments and diffs
- Works seamlessly with editors like nvim
- Configurable via `.commitfmt.toml`
## Installation
```bash
cargo install commitfmt
```
Or build from source:
```bash
cargo install --path .
```
## Usage
### Format from stdin
```bash
### Format a file in-place
```bash
commitfmt COMMIT_EDITMSG
```
### Use with nvim
Add to your git config:
```bash
git config --global core.editor "nvim"
```
Then use with a git hook in `.git/hooks/commit-msg`:
```bash
#!/bin/sh
commitfmt "$1"
```
### Custom config
Create `.commitfmt.toml` in your project:
```toml
subject_max_length = 50
body_max_line_length = 72
```
## How it works
- Subject lines longer than the max length have overflow words moved to the body
- Body lines longer than max are wrapped at word boundaries
- Lines starting with `#` (git comments/diffs) are preserved
- Intentional line breaks in the body are maintained
## License
MIT