No description
Find a file
2026-02-06 11:50:30 -03:00
cmd Add injection backends 2026-02-06 11:50:30 -03:00
internal Add injection backends 2026-02-06 11:50:30 -03:00
systemd Add X11 daemon with tray status 2026-02-06 11:36:45 -03:00
.gitignore Add X11 daemon with tray status 2026-02-06 11:36:45 -03:00
AGENTS.md Add X11 daemon with tray status 2026-02-06 11:36:45 -03:00
go.mod Add X11 daemon with tray status 2026-02-06 11:36:45 -03:00
go.sum Add X11 daemon with tray status 2026-02-06 11:36:45 -03:00
lel.sh Add X11 daemon with tray status 2026-02-06 11:36:45 -03:00
README.md Add injection backends 2026-02-06 11:50:30 -03:00

lel

X11 transcription daemon that records audio and runs Whisper, logging the transcript.

Requirements

  • X11 (not Wayland)
  • ffmpeg
  • whisper (OpenAI Whisper CLI)
  • xclip
  • Tray icon deps: libappindicator3 and gtk3 (required by systray)

Build

go build -o leld ./cmd/leld
go build -o lelctl ./cmd/lelctl

Config

Create ~/.config/lel/config.toml:

hotkey = "Cmd+m"
ffmpeg_input = "pulse:default"
whisper_model = "base"
whisper_lang = "en"
whisper_device = "cpu"
whisper_extra_args = ""
record_timeout_sec = 120
whisper_timeout_sec = 300
segment_sec = 5
streaming = false
injection_backend = "clipboard"

Env overrides:

  • WHISPER_MODEL, WHISPER_LANG, WHISPER_DEVICE, WHISPER_EXTRA_ARGS
  • WHISPER_FFMPEG_IN
  • WHISPER_STREAM, WHISPER_SEGMENT_SEC, WHISPER_TIMEOUT_SEC
  • LEL_RECORD_TIMEOUT_SEC, LEL_HOTKEY, LEL_INJECTION_BACKEND

Run manually

./leld --config ~/.config/lel/config.toml

Disable the tray icon:

./leld --no-tray

systemd user service

mkdir -p ~/.local/bin
cp leld lelctl ~/.local/bin/
cp systemd/lel.service ~/.config/systemd/user/lel.service
systemctl --user daemon-reload
systemctl --user enable --now lel

Usage

  • Press the hotkey once to start recording.
  • Press it again to stop and transcribe.
  • The transcript is logged to stderr.

Injection backends:

  • clipboard: copy to clipboard and inject via Ctrl+V (requires xclip + xdotool)
  • injection: type the text with simulated keypresses (requires xdotool)

Control:

lelctl status
lelctl reload
lelctl stop