jingle
shipping should feel like something. producers stamp every track with a tag, so i wanted one for every commit.

install
brew trust opdhaker/tap
brew install OPDhaker/tap/jingle
jingle install --yesthat's it. your next commit plays a chime, and your next push that goes through plays a fanfare. it covers every repo on your machine, your own hooks still run exactly like before, and jingle uninstall puts your git config back byte for byte. it's a go cli, with a menu-bar mac app built on tauri if you'd rather click.
under the hood it's plain git hooks: jingle install points git's global core.hooksPath at its own hooks, and they call your system's audio player (afplay on a mac).
the sounds
they're made in code, so there's nothing to license or download. click one to hear it:
| sound | what it is | plays on |
|---|---|---|
| chime | two-note rising bell | every commit |
| fanfare | quick rising brass arpeggio | every push that works |
| harmony | two voices resolving to a chord | real merge commits, if you turn it on |
| boom | snare hit into an 808 drop | whatever you give it |
got your own tag? any mp3, wav, aiff, m4a, ogg or flac works.
it doesn't slow git down
if the hook played the sound itself, every commit would wait for it to finish. so the hook starts the player in the background and hands control straight back to git:
| hook | time per commit |
|---|---|
| no hook at all | 13–21 ms |
| jingle | 28–41 ms |
| playing the sound inside the hook | ~2,391 ms |
most of jingle's extra time is the cost of having any hook at all.1
the hard part
knowing when a push actually worked. git has no post-push hook, so jingle has to prove it:
pre-pushleaves a marker for thatgit pushprocess- if the push lands, git updates the remote-tracking ref (
refs/remotes/…) from that same process - the marker matches, and the fanfare plays
a rejected push never updates the ref, and "everything up-to-date" never leaves a marker, so both stay quiet. the gap is pushing to a raw url: there's no tracking ref to watch, so jingle plays when the push starts instead.
Footnotes
-
30 commits per run on an arm64 mac with git 2.54. an empty
exit 0hook measured the same as jingle's. ↩