diff --git a/plugin.toml b/plugin.toml index bbe971a..6c8d63b 100644 --- a/plugin.toml +++ b/plugin.toml @@ -1,83 +1,81 @@ -# Minimal reference plugin. Demonstrates the full bar-widget pipeline: -# static manifest -> appears in the Add-widget picker -> renders/ticks -> -# manifest-driven settings -> onIpc. Also ships a launcher provider that shows -# launcher.setQuery() drill-in (type `/ex`). -# See noctalia-docs plugins guide. +# 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 -id = "noctalia/example" -name = "Example" -version = "1.1.0" +id = "prdlk/ostt" +name = "OSTT" +version = "1.0.0" min_noctalia = "5.0.0" -author = "noctalia" +author = "prdlk" license = "MIT" dependencies = [] -tags = ["demo"] -icon = "puzzle" -description = "A minimal reference plugin: a bar widget with settings and IPC, a declarative bar widget (barWidget.render), a service, a shortcut, a launcher provider with setQuery drill-in, and a panel of interactive controls." +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." [[widget]] -id = "hello" -entry = "hello.luau" +id = "recorder" +entry = "recorder.luau" [[widget.setting]] - key = "label" + 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" type = "string" - label_key = "settings.label.label" - description_key = "settings.label.description" - default = "Hello" + label_key = "settings.model.label" + description_key = "settings.model.description" + default = "" [[widget.setting]] - key = "glyph" - type = "glyph" - label_key = "settings.glyph.label" - description_key = "settings.glyph.description" - default = "puzzle" + key = "process_action" + type = "string" + label_key = "settings.process_action.label" + description_key = "settings.process_action.description" + default = "" [[widget.setting]] - key = "show_glyph" + key = "show_elapsed" type = "bool" - label_key = "settings.show_glyph.label" + label_key = "settings.show_elapsed.label" + description_key = "settings.show_elapsed.description" default = true -# Second bar widget: the same service tick rendered declaratively via -# barWidget.render() (ui.* tree) instead of imperative setText/setGlyph — -# including an inline ui.button whose click stays separate from the -# widget-level onClick. -[[widget]] -id = "declarative" -entry = "declarative.luau" + [[widget.setting]] + key = "notify_on_done" + type = "bool" + label_key = "settings.notify_on_done.label" + description_key = "settings.notify_on_done.description" + default = true -# Headless background service: publishes a counter to the plugin's shared state -# every second. The widget above watches it (noctalia.state.watch) to show how a -# service feeds the plugin's UI entries without sharing Lua memory. + [[widget.setting]] + key = "extra_args" + type = "string" + label_key = "settings.extra_args.label" + description_key = "settings.extra_args.description" + default = "" + advanced = true + +# 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 = "ticker" -entry = "ticker.luau" - -# Control-center quick-toggle tile. Add it from Settings → Control Center shortcuts. -[[shortcut]] -id = "toggle" -entry = "shortcut.luau" - -# Launcher provider: type `/ex` in the launcher. Categories drill in via -# launcher.setQuery() (the input is rewritten and the launcher stays open); -# leaf items copy to the clipboard and let the launcher close. -[[launcher_provider]] -id = "finder" -entry = "finder.luau" -prefix = "/ex" -glyph = "list-search" -include_in_global_search = false - -# Panel: a settings-style surface built from the declarative ui.* vocabulary -# (panel.render). Demonstrates the interactive controls (toggle/slider/input/ -# select inside a scroll) and their value callbacks. Panel size is host-owned -# and declared here, so the surface is sized right on the first open. -# Open it with: noctalia msg panel-toggle noctalia/example:panel -[[panel]] -id = "panel" -entry = "panel.luau" -width = 420 -height = 410 -placement = "floating" -position = "center" +id = "monitor" +entry = "monitor.luau"