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
# while the microphone is capturing. Transcriptions default to being pasted
# into the focused app (ostt --paste).
#
# 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"
description = "Voice-to-text with OSTT: click the mic (or bind a hotkey) to record, click again to transcribe and paste straight 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"
default = "paste"
options = [
{ value = "paste" , label_key = "settings.output_mode.paste" },
{ value = "clipboard" , label_key = "settings.output_mode.clipboard" },
]
[[ 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"