Skip to content

Repository files navigation

beepboopd

april 1st, 2026

beepboopd (Beep Boop Daemon) is a tiny Rust program that plays a unique musical tune every hour

Dependencies

Build: Rust 1.85+ and ALSA dev headers

# arch
sudo pacman -S alsa-lib
# debian/ubuntu
sudo apt install libasound2-dev

Runtime: PipeWire, PulseAudio, or ALSA for audio output.

Install

cargo install beepboopd
beepboopd install

Or with a custom config baked in, like zelda all week, but clock on the weekend:

BEEPBOOPD_TUNE=zelda BEEPBOOPD_WEEK="s:clock;su:clock" beepboopd install

Or from source:

make install

That's it. Your computer now chimes every hour.

To check on it:

beepboopd status

To uninstall:

beepboopd uninstall

Styles

beepboopd speaks six musical languages:

beep

The original. A tribute to the bash script that started it all. Ascending tones for success, descending for failure. Even hours get success, odd hours get failure.

clock

Westminster chime -- the classic "ding dong ding dong... dong dong ding dong" melody in 3/4 time, followed by deep bongs counting the hour (12h style, so midnight and noon both get 12).

chords

Each hour gets its own chord -- major chords before noon, minor chords after. 24 unique chords walking the chromatic scale from C. Midnight is C major. High noon is C minor.

scale

A quick five-note ascending run for each hour. Major scales for hours 0-11, minor for 12-23. The last note is held longer.

zelda

12 Ocarina of Time songs, each mapped to two hours (H and H+12). Sun's Song plays at 07:00 and 19:00. Nocturne of Shadow at 01:00 and 13:00. All five ocarina notes (D4, F4, A4, B4, D5) with per-song timing.

Available songs: lullaby, epona, saria, sun, time, storms, minuet, bolero, serenade, nocturne, requiem, prelude.

jazz

The Lick. Jazz's most famous 7-note phrase (D E F G E C D) transposed to all 12 keys by hour.

Swung eighths for that feel.

"It don't mean a thing..."

Usage

beepboopd # default: beep success/failure by hour
beepboopd run # daemon mode: chime every hour
beepboopd install # install systemd user service
beepboopd uninstall # remove systemd user service
beepboopd status # show service status + recent logs
beepboopd clock # Westminster chime at current hour
beepboopd chords 15 # 3 PM's chord (C# minor)
beepboopd scale 7 # 7 AM's scale run
beepboopd beep success # the OG ascending beep
beepboopd zelda storms # Song of Storms
beepboopd zelda # picks song by current hour
beepboopd jazz # the lick at current hour
beepboopd -v 0.5 clock # quieter

Configuration

Env varDefaultPurpose
BEEPBOOPD_VOLUME0.9Amplitude multiplier (0.0-1.0 for clean signal)
BEEPBOOPD_TUNEbeepDefault style when no subcommand given
BEEPBOOPD_WEEK--Per-day style schedule (see below)
BEEPBOOPD_LOG--Set to false or 0 to suppress info logs

BEEPBOOPD_WEEK overrides BEEPBOOPD_TUNE for days that are specified. Unspecified days fall back to BEEPBOOPD_TUNE, then to beep.

Volume can also be set with -v <float> on the command line.

Weekly schedule

Set a different style for each day of the week:

export BEEPBOOPD_WEEK="m:zelda;t:chords;w:clock;th:beep;f:zelda;s:scale;su:clock"

Day keys: sumtwthfs

Testing

make beep # OG success + failure
make clock # Westminster chime at current hour
make chords # chord at current hour
make scale # scale run at current hour
make zelda # zelda song for current hour
make jazz # the lick at current hour
make all # play all styles in sequence
make h00 # chords for specific hour (h00-h23)

The hour-chord map

HourRootQualityHourRootQuality
0Cmajor12Cminor
1C#major13C#minor
2Dmajor14Dminor
3D#major15D#minor
4Emajor16Eminor
5Fmajor17Fminor
6F#major18F#minor
7Gmajor19Gminor
8G#major20G#minor
9Amajor21Aminor
10A#major22A#minor
11Bmajor23Bminor

The zelda hour map

HourSongHourSong
0Song of Time12Song of Time
1Nocturne of Shadow13Nocturne of Shadow
2Requiem of Spirit14Requiem of Spirit
3Zelda's Lullaby15Zelda's Lullaby
4Serenade of Water16Serenade of Water
5Minuet of Forest17Minuet of Forest
6Prelude of Light18Prelude of Light
7Sun's Song19Sun's Song
8Epona's Song20Epona's Song
9Saria's Song21Saria's Song
10Bolero of Fire22Bolero of Fire
11Song of Storms23Song of Storms

Logging

Structured JSON to stderr via tracing. Every play emits:

{
"timestamp": "...",
"level": "INFO",
"fields": {
"message": "playing",
"cmd": "zelda",
"tune": "storms",
"volume": 0.9
}
}

Suppress with BEEPBOOPD_LOG=false. Errors always log.

When running under systemd, logs land in the journal: journalctl --user -u beepboopd.

About

a daemon for beeps and boops

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages