2026-07-13 12:18:16 -04:00
# OSTT voice-to-text for the Noctalia bar.
#
# A bar widget that toggles an ostt (https://github.com/kristoferlund/ostt)
# recording headlessly — no popup terminal — and shows a live record indicator
2026-07-13 12:25:36 -04:00
# while the microphone is capturing. Transcriptions are copied to the
# clipboard by default (switch to ostt --paste in the widget settings).
2026-07-13 12:18:16 -04:00
#
# recorder [[widget]] the bar capsule: indicator + click-to-toggle
# monitor [[service]] polls ostt's recording.pid and publishes status
#
# Hotkey integration (compositor keybind):
# noctalia msg plugin prdlk/ostt:recorder focused toggle
2026-07-13 11:43:32 -04:00
2026-07-13 12:18:16 -04:00
id = "prdlk/ostt"
name = "OSTT"
version = "1.0.0"
2026-07-13 11:43:32 -04:00
min_noctalia = "5.0.0"
2026-07-13 12:18:16 -04:00
author = "prdlk"
2026-07-13 11:43:32 -04:00
license = "MIT"
dependencies = []
2026-07-13 12:18:16 -04:00
tags = [ "audio" , "voice" , "speech-to-text" , "productivity" ]
icon = "microphone"
2026-07-13 12:25:36 -04:00
description = "Voice-to-text with OSTT: click the mic (or bind a hotkey) to record, click again to transcribe straight to your clipboard — or paste into the focused app. Shows a red record indicator while the microphone is live."
2026-07-13 11:43:32 -04:00
[[ widget ]]
2026-07-13 12:18:16 -04:00
id = "recorder"
entry = "recorder.luau"
2026-07-13 11:43:32 -04:00
[[ widget . setting ]]
2026-07-13 12:18:16 -04:00
key = "output_mode"
type = "select"
label_key = "settings.output_mode.label"
description_key = "settings.output_mode.description"
2026-07-13 12:25:36 -04:00
default = "clipboard"
2026-07-13 12:18:16 -04:00
options = [
{ value = "clipboard" , label_key = "settings.output_mode.clipboard" },
2026-07-13 12:25:36 -04:00
{ value = "paste" , label_key = "settings.output_mode.paste" },
2026-07-13 12:18:16 -04:00
]
[[ widget . setting ]]
key = "model"
2026-07-13 11:43:32 -04:00
type = "string"
2026-07-13 12:18:16 -04:00
label_key = "settings.model.label"
description_key = "settings.model.description"
default = ""
2026-07-13 11:43:32 -04:00
[[ widget . setting ]]
2026-07-13 12:18:16 -04:00
key = "process_action"
type = "string"
label_key = "settings.process_action.label"
description_key = "settings.process_action.description"
default = ""
2026-07-13 11:43:32 -04:00
[[ widget . setting ]]
2026-07-13 12:18:16 -04:00
key = "show_elapsed"
2026-07-13 11:43:32 -04:00
type = "bool"
2026-07-13 12:18:16 -04:00
label_key = "settings.show_elapsed.label"
description_key = "settings.show_elapsed.description"
2026-07-13 11:43:32 -04:00
default = true
2026-07-13 12:18:16 -04:00
[[ widget . setting ]]
key = "notify_on_done"
type = "bool"
label_key = "settings.notify_on_done.label"
description_key = "settings.notify_on_done.description"
default = true
2026-07-13 11:43:32 -04:00
2026-07-13 12:18:16 -04:00
[[ widget . setting ]]
key = "extra_args"
type = "string"
label_key = "settings.extra_args.label"
description_key = "settings.extra_args.description"
default = ""
advanced = true
2026-07-13 11:43:32 -04:00
2026-07-13 12:18:16 -04:00
# Headless poller: watches ostt's recording.pid (works for recordings started
# by the widget, a hotkey IPC, or a plain `ostt launch` outside Noctalia) and
# publishes { phase, elapsed } to the plugin state channel for the widget(s).
[[ service ]]
id = "monitor"
entry = "monitor.luau"