A tiny, cross‑platform tool that plays a short celebration sound after every successful git commit. Install it once as a global git hook; customize the sounds to your taste; keep the rest of your workflow untouched.
Credits: The default sounds are sourced from https://www.freesoundslibrary.com/ — huge thanks to the creators and the library.
- Global post-commit hook: enabled once, works for all repos.
- Offline after first run: sounds are cached locally.
- Fully customizable: drop your own .mp3/.wav/.m4a files.
- No config files, no daemons, no shell wrappers.
- macOS, Linux, and Windows support.
Under the hood, the hook launches the commit-celebration
binary in the background. The app ensures sounds exist locally, downloads the latest sounds pack from GitHub Releases if needed, picks a random file, and plays it using the platform’s native player.
Prerequisites:
- Git installed.
- Audio capability:
- macOS:
afplay
(built-in) - Linux: one of
paplay
,aplay
, ormpg123
- Windows: PowerShell SoundPlayer
- macOS:
Run this in your terminal:
curl -fsSL https://raw.githubusercontent.com/divyanshusahu/commit-celebration/HEAD/install.sh | bash
What this does:
- Downloads the latest
commit-celebration
binary for your OS/arch to~/.local/bin
- Makes it executable
- Runs
commit-celebration install
to enable a globalpost-commit
hook - Leaves a note if
~/.local/bin
is not on your PATH
- Enable (done automatically by the installer):
commit-celebration install
- Disable and revert:
commit-celebration uninstall
Now make a commit anywhere and enjoy a celebratory sound.
- Default non-dev location:
~/.commit-celebration/sounds
- Dev builds (running from source):
./sounds
(relative to the repo root)
How to customize:
- Drop your own
.mp3
,.wav
, or.m4a
files into the sounds folder. - Remove any files you don’t want.
- The app picks a random file each time.
Important note about the update
command: commit-celebration update
now updates both the binary and the sounds. If you’ve added custom files to the sounds folder, back them up first; the folder will be refreshed from the latest release.
- Self-update to the latest release (binary + sounds):
commit-celebration update
- Verify version:
commit-celebration version
- Disable global hook:
commit-celebration uninstall
- Optional cleanup:
- Remove the sounds cache:
rm -rf ~/.commit-celebration
- Remove the binary from your PATH (e.g.,
~/.local/bin/commit-celebration
)
- Remove the sounds cache:
- The global
post-commit
hook script is written to~/.commit-celebration/git-hooks/post-commit
and runs the binary in the background. - On execution, the app ensures a local sounds cache exists. If empty, it resolves a release tag (embedded at build-time, or via GitHub’s
releases/latest
), downloadssounds-pack.zip
from the repository’s Releases, and extracts it into the sounds directory. - A random track is selected and played using:
- macOS:
afplay
- Linux:
paplay
,aplay
, ormpg123
(first available) - Windows: PowerShell
Media.SoundPlayer
- macOS:
Self‑update behavior (commit-celebration update
):
- Resolves the latest GitHub release tag
- Downloads the OS/arch‑specific binary and replaces the current executable (POSIX)
- On Windows, writes a
.new
file alongside the current.exe
(manual swap required) - Clears and refreshes the sounds cache from the
sounds-pack.zip
asset
Build and release:
- Standard Go static binaries built per OS/arch (see
release.sh
). - Build-time variables (
Version
,BuildTime
) are injected via-ldflags
. - Sounds pack is zipped as
sounds-pack.zip
and published with the release.
Requirements:
- Go 1.21+ (module targets Go 1.24)
- zip utility (for releasing)
- GitHub CLI (
gh
) if you plan to publish releases
Quick start:
- Add a couple of small
.mp3
/.wav
files under./sounds
. - Build and run locally:
go build -o commit-celebration
./commit-celebration
(plays a random sound)./commit-celebration version
- Test the hook end‑to‑end:
./commit-celebration install
- Make a commit in any repo
./commit-celebration uninstall
to revert
Releasing (maintainers):
- Prepare sounds under
./sounds
. - Run
./release.sh vX.Y.Z
. - Artifacts are produced under
./dist/
and uploaded viagh release
.
We welcome contributions that keep the tool simple and robust.
- Open an issue to discuss significant changes first.
- Keep pull requests small and focused.
- Follow idiomatic Go; run
go fmt
. - Update this README if behavior changes.
- No sound on Linux: install one of
paplay
,aplay
, ormpg123
and ensure it is on PATH. - Already using a global hooks path: the tool sets
git config --global core.hooksPath
to~/.commit-celebration/git-hooks
. If you rely on another global hooks setup, merge your logic into the generatedpost-commit
or avoid installing globally. - Network restrictions: the app contacts GitHub (API + Releases) to fetch the latest version and the sounds pack. Ensure HTTPS to GitHub is allowed.
- No telemetry, no background daemons.
- Network access only to GitHub when updating/version-detecting or downloading sounds.
MIT License. See LICENSE
for details.
Audio credit: Default sounds are from https://www.freesoundslibrary.com/ and retain their respective licenses/attributions from that source.
—
Built with Go. Have fun shipping—one commit at a time.