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.
- 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.
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.
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.
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).
- macOS: anything
afplayaccepts –wav,mp3,aiff,m4a,caf. - Windows:
wavalways;mp3and other formats via Windows Media (PresentationCore). - Linux:
paplayaccepts most formats; fallbackaplayiswav-only.
- VS Code 1.85 or newer.
- macOS / Windows: works out of the box.
- Linux: requires
paplay(PulseAudio) oraplay(ALSA) to be installed.
MIT