Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Configuration

Global config lives at ~/.config/ringo/ringo.toml. Everything below is optional.

Picker subtitle

[picker]
# Fields shown next to each profile name in the picker. Available: aor, username,
# domain, display_name, transport, auth_user, outbound, stun_server, media_enc.
info = ["aor"]   # default

Theme

All UI colors are configurable — named values or #rrggbb hex.

RoleDefaultUsed for
accentcyanLogo, picker selection, DTMF input, history popup
subtledark_grayHints, log text, subtitles, unfocused labels
successgreenRegistered, established call, toggle on
dangerredMuted, missed calls, registration failed
attentionyellowSelected call, ringing, MWI, focused field
transfermagentaTransfer-mode input
[theme]
accent    = "cyan"
subtle    = "dark_gray"
success   = "green"
danger    = "red"
attention = "yellow"
transfer  = "magenta"

Ready-made themes (Catppuccin Mocha, Gruvbox, Nord, Tokyo Night) live in themes/.

baresip

ringo auto-detects the baresip module path and audio driver; override any of these in ringo.toml:

[baresip]
module_path  = "/usr/lib/baresip/modules"  # baresip modules
audio_driver = "pipewire"                   # alsa | pulse | pipewire | coreaudio
audio_player_device = "default"
audio_source_device = "default"
audio_alert_device  = "default"
sip_cafile   = "/etc/ssl/certs/ca-certificates.crt"  # SIP TLS CA file
sip_capath   = "/etc/ssl/certs"                       # CA dir ("" to disable)

# Arbitrary baresip config overrides, appended last (last value wins).
# ⚠️ Incorrect values can break ringo. See the baresip Configuration wiki.
[baresip.extra]
dns_server     = "10.0.0.1:53"
call_max_calls = "8"

Contacts

Contacts live at ~/.config/ringo/contacts.toml; names resolve in the call list and history, and numbers match across formats (01555…, +491555…, 491555…).

[[contacts]]
name = "Alice"
numbers = ["+491555123456", "alice.work"]

Manage them in the TUI (contacts overlay → a/e/d) or with $EDITOR (E).

Hooks

Run shell commands on events; each hook gets context via environment variables and runs in a background thread (errors go to /tmp/ringo-<name>.log).

[[hooks]]
event = "call_incoming"
command = "notify-send 'ringo' \"Call from $(echo $RINGO_EVENT_DATA | jq -r .number)\""
EventTriggerEvent data
profile_loadedProfile loaded, baresip spawned
call_incomingIncoming callcall_id, number, display_name
call_outgoingOutgoing call initiatedcall_id, number
call_endedCall closedcall_id, number, direction, duration_secs, reason, error

Each hook receives RINGO_EVENT, RINGO_PROFILE, RINGO_PROFILE_JSON (no password) and RINGO_EVENT_DATA (JSON).