Add text_command + refresh live-text keys
Introduce a per-key `text_command` + `refresh` feature: the service periodically runs a shell command and renders its stdout as the key's text overlay, compositing over the base icon (or a black background for text-only keys) each tick. `text` acts as the static fallback shown before the first run or when the command errors/outputs nothing. A refresh goroutine owns the key's image and also handles an optional poll block (choosing icon_true/icon_false per tick). Adds `$(...)` sugar in `text` as shorthand for `text_command`. - internal/config: add TextCommand/Refresh fields to KeyConfig - cmd/streamdeck: refreshTextKey goroutine, runTextCommand, unwrapCmdSubst - config.example.yaml: document the feature with a `flow` pomodoro live-countdown example (status --short, toggle/skip/stop/gui) - modules.example.yaml: example config updates Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TEoLyNbtbjbDq7aTWAymUG
This commit is contained in:
@@ -57,6 +57,30 @@ modules:
|
||||
curl -s -X POST https://slack.com/api/dnd.endSnooze \
|
||||
-H "Authorization: Bearer {{env "SLACK_TOKEN"}}"
|
||||
|
||||
# Pomodoro / focus timer — the `flow` CLI.
|
||||
#
|
||||
# Absolute path required (minimal service PATH). Apple Silicon Homebrew installs
|
||||
# live at /opt/homebrew/bin/flow — set that in ~/.config/streamdeck-go/.env:
|
||||
# FLOW_CMD=/opt/homebrew/bin/flow
|
||||
#
|
||||
# Control verbs (start/pause/resume/toggle/skip/stop/reset/gui) run on key press.
|
||||
# `status` prints one line like `state=running phase=work remaining=24:12` for
|
||||
# icon-swap poll blocks (match: "state=running").
|
||||
#
|
||||
# The LIVE countdown label uses a key's `text_command` field directly (not a
|
||||
# module), e.g. text_command: "/usr/local/bin/flow status --short" which prints
|
||||
# a two-line label like WORK\n24:12 (an actual newline between the lines).
|
||||
flow:
|
||||
start: { exec: '{{envDefault "FLOW_CMD" "/usr/local/bin/flow"}} start' }
|
||||
pause: { exec: '{{envDefault "FLOW_CMD" "/usr/local/bin/flow"}} pause' }
|
||||
resume: { exec: '{{envDefault "FLOW_CMD" "/usr/local/bin/flow"}} resume' }
|
||||
toggle: { exec: '{{envDefault "FLOW_CMD" "/usr/local/bin/flow"}} toggle' }
|
||||
skip: { exec: '{{envDefault "FLOW_CMD" "/usr/local/bin/flow"}} skip' }
|
||||
stop: { exec: '{{envDefault "FLOW_CMD" "/usr/local/bin/flow"}} stop' }
|
||||
reset: { exec: '{{envDefault "FLOW_CMD" "/usr/local/bin/flow"}} reset' }
|
||||
gui: { exec: '{{envDefault "FLOW_CMD" "/usr/local/bin/flow"}} gui' }
|
||||
status: { exec: '{{envDefault "FLOW_CMD" "/usr/local/bin/flow"}} status' }
|
||||
|
||||
# OBS Studio — media player, streaming, and scene/transition control via obs-cmd
|
||||
#
|
||||
# Requires: obs-cmd (https://github.com/grigio/obs-cmd)
|
||||
|
||||
Reference in New Issue
Block a user