PushSound
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.
Marketplace
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 (
afplay on macOS, PowerShell on Windows, paplay/aplay on 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 a reset in a repo without an upstream reads as commit. merge fires 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+,), search pushsound tts, and just toggle the Tts: Enabled checkbox – no need to edit settings.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 like Milena for Russian commit messages).
- macOS has no per-call volume flag, so
pushsound.volume is applied inline ([[volm …]]); on Windows it maps to the synthesizer volume.
- Linux requires
spd-say (speech-dispatcher) or espeak to 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).
- macOS: anything
afplay accepts – wav, mp3, aiff, m4a, caf.
- Windows:
wav always; mp3 and other formats via Windows Media (PresentationCore).
- Linux:
paplay accepts most formats; fallback aplay is wav-only.
Requirements
- VS Code 1.85 or newer.
- macOS / Windows: works out of the box.
- Linux: requires
paplay (PulseAudio) or aplay (ALSA) to be installed.
License
MIT