Plays a sound on git events (commit, push, pull, fetch, merge, rebase, checkout, reset, branch, tag, clone) in any git repository opened in VS Code.
Features
- Play a custom sound on each git event:
commit,push,pull,fetch,merge,rebase,checkout,reset,branch,tag,clone. - Configure each event independently – leave a sound empty and that event stays silent.
- Optional text-to-speech: read the commit message aloud before the commit sound, using offline OS voices. See Text-to-speech.
- Provide a single file or a list of files – a random one is picked on each event.
- Works for actions made from anywhere: VS Code Source Control panel, integrated terminal, external terminal, third-party git GUIs. The only requirement is that the repository is opened as a folder in a VS Code window.
- No UI, no popups – plays sound through the system audio stack (
afplayon macOS, PowerShell on Windows,paplay/aplayon Linux).
Detection is heuristic: events are inferred from VS Code's git state (HEAD, ahead/behind, refs, merge/rebase state), not by intercepting git commands. Some operations are indistinguishable through the API – e.g. a clean (fast-forward) merge reads as
pull/commit, and aresetin a repo without an upstream reads ascommit.mergefires on merge/conflict state.
Configuration
Open settings (Cmd+, / Ctrl+,) and search for "PushSound", or edit settings.json directly:
{
"pushsound.enabled": true,
"pushsound.volume": 0.8,
"pushsound.sounds.commit": "/absolute/path/to/commit.wav",
"pushsound.sounds.push": [
"/absolute/path/to/push1.mp3",
"/absolute/path/to/push2.wav"
],
"pushsound.sounds.pull": "/absolute/path/to/pull.wav"
}
| Setting | Type | Default | Description |
|---|---|---|---|
pushsound.enabled |
boolean | true |
Enable/disable sound playback. |
pushsound.volume |
number | 0.8 |
Volume 0..1. |
pushsound.sounds.commit |
string | string[] | "" |
Audio file(s) for commit. Empty – silent. |
pushsound.sounds.push |
string | string[] | "" |
Audio file(s) for push. Empty – silent. |
pushsound.sounds.pull |
string | string[] | "" |
Audio file(s) for pull. Empty – silent. |
pushsound.sounds.fetch |
string | string[] | "" |
Audio file(s) for fetch. Empty – silent. |
pushsound.sounds.merge |
string | string[] | "" |
Audio file(s) for merge. Empty – silent. |
pushsound.sounds.rebase |
string | string[] | "" |
Audio file(s) for rebase. Empty – silent. |
pushsound.sounds.checkout |
string | string[] | "" |
Audio file(s) for checkout / branch switch. Empty – silent. |
pushsound.sounds.reset |
string | string[] | "" |
Audio file(s) for reset. Empty – silent. |
pushsound.sounds.branch |
string | string[] | "" |
Audio file(s) for branch create/delete. Empty – silent. |
pushsound.sounds.tag |
string | string[] | "" |
Audio file(s) for tag create/delete. Empty – silent. |
pushsound.sounds.clone |
string | string[] | "" |
Audio file(s) for clone / opening a repo. Empty – silent. |
Every event is silent until you set its sound, so you can enable only the ones you want.
Text-to-speech (TTS)
When enabled, PushSound reads the commit message aloud (its first line) right before the commit sound plays. No files, no network, no models – it uses the built-in OS voices (say on macOS, System.Speech on Windows, spd-say/espeak on Linux), so it is offline and lightweight.
{
"pushsound.tts.enabled": true,
"pushsound.tts.voice": "Samantha",
"pushsound.sounds.commit": "/absolute/path/to/commit.wav"
}
With the config above, committing “fix login bug” first says “fix login bug”, then plays commit.wav.
Tip: open Settings (
Cmd+,/Ctrl+,), searchpushsound tts, and just toggle the Tts: Enabled checkbox – no need to editsettings.json.
| Setting | Type | Default | Description |
|---|---|---|---|
pushsound.tts.enabled |
boolean | false |
Read the commit message aloud before the commit sound. |
pushsound.tts.voice |
string | "" |
Voice name (e.g. Samantha, Milena). Empty – system default. |
Notes:
- Only the commit event is spoken (the commit message); other events just play their sound.
- On macOS list available voices with
say -v '?'; the spoken language follows the chosen voice (use a Russian voice likeMilenafor Russian commit messages). - macOS has no per-call volume flag, so
pushsound.volumeis applied inline ([[volm …]]); on Windows it maps to the synthesizer volume. - Linux requires
spd-say(speech-dispatcher) orespeakto be installed; without them TTS is silently skipped.
Commands
PushSound: Play sound (pick event)…– pick any event from the list and play its configured sound (for testing).PushSound: Play commit sound– plays the configured commit sound (for testing).PushSound: Play push sound– plays the configured push sound (for testing).
Supported formats
- macOS: anything
afplayaccepts –wav,mp3,aiff,m4a,caf. - Windows:
wavalways;mp3and other formats via Windows Media (PresentationCore). - Linux:
paplayaccepts most formats; fallbackaplayiswav-only.
Requirements
- VS Code 1.85 or newer.
- macOS / Windows: works out of the box.
- Linux: requires
paplay(PulseAudio) oraplay(ALSA) to be installed.
License
MIT