# Example modules.yaml — copy to ~/.config/streamdeck-go/modules.yaml # # Required Slack token scopes: users.profile:write, users:write, dnd:write # Export your token: export SLACK_TOKEN="xoxp-..." modules: slack: set_status: params: emoji: ":speech_balloon:" text: "In a meeting" expiry: "1h" exec: | curl -s -X POST https://slack.com/api/users.profile.set \ -H "Authorization: Bearer {{env "SLACK_TOKEN"}}" \ -H "Content-Type: application/json" \ -d '{"profile":{"status_emoji":"{{.emoji}}","status_text":"{{.text}}","status_expiration":{{expiry .expiry}}}}' clear_status: exec: | curl -s -X POST https://slack.com/api/users.profile.set \ -H "Authorization: Bearer {{env "SLACK_TOKEN"}}" \ -H "Content-Type: application/json" \ -d '{"profile":{"status_emoji":"","status_text":"","status_expiration":0}}' set_presence: params: presence: "away" exec: | curl -s -X POST https://slack.com/api/users.setPresence \ -H "Authorization: Bearer {{env "SLACK_TOKEN"}}" \ -H "Content-Type: application/json" \ -d '{"presence":"{{.presence}}"}' snooze: params: minutes: "60" exec: | curl -s -X POST https://slack.com/api/dnd.setSnooze \ -H "Authorization: Bearer {{env "SLACK_TOKEN"}}" \ -H "Content-Type: application/json" \ -d '{"num_minutes":{{.minutes}}}' go_offline: exec: | curl -s -X POST https://slack.com/api/users.setPresence \ -H "Authorization: Bearer {{env "SLACK_TOKEN"}}" \ -H "Content-Type: application/json" \ -d '{"presence":"away"}' && \ curl -s -X POST https://slack.com/api/users.profile.set \ -H "Authorization: Bearer {{env "SLACK_TOKEN"}}" \ -H "Content-Type: application/json" \ -d '{"profile":{"status_emoji":":dumpsterfire:","status_text":"Offline","status_expiration":0}}' end_snooze: exec: | curl -s -X POST https://slack.com/api/dnd.endSnooze \ -H "Authorization: Bearer {{env "SLACK_TOKEN"}}" # OBS Studio — media player and streaming control via obs-cmd # # Requires: obs-cmd (https://github.com/grigio/obs-cmd) # macOS: brew install grigio/obs-cmd/obs-cmd # Linux: cargo install obs-cmd (or download binary from GitHub releases) # # OBS WebSocket must be enabled: Tools → WebSocket Server Settings (on by default in OBS 28+) # # Add to ~/.config/streamdeck-go/.env: # OBS_WEBSOCKET_PASSWORD=your-password # OBS_HOST=localhost (optional, default: localhost) # OBS_PORT=4455 (optional, default: 4455) obs: play: params: source: "Media Source" exec: | /usr/local/bin/obs-cmd --websocket obsws://{{envDefault "OBS_HOST" "localhost"}}:{{envDefault "OBS_PORT" "4455"}}/{{env "OBS_WEBSOCKET_PASSWORD"}} media-input play "{{.source}}" pause: params: source: "Media Source" exec: | /usr/local/bin/obs-cmd --websocket obsws://{{envDefault "OBS_HOST" "localhost"}}:{{envDefault "OBS_PORT" "4455"}}/{{env "OBS_WEBSOCKET_PASSWORD"}} media-input pause "{{.source}}" stop: params: source: "Media Source" exec: | /usr/local/bin/obs-cmd --websocket obsws://{{envDefault "OBS_HOST" "localhost"}}:{{envDefault "OBS_PORT" "4455"}}/{{env "OBS_WEBSOCKET_PASSWORD"}} media-input stop "{{.source}}" restart: params: source: "Media Source" exec: | /usr/local/bin/obs-cmd --websocket obsws://{{envDefault "OBS_HOST" "localhost"}}:{{envDefault "OBS_PORT" "4455"}}/{{env "OBS_WEBSOCKET_PASSWORD"}} media-input restart "{{.source}}" toggle_record: exec: | /usr/local/bin/obs-cmd --websocket obsws://{{envDefault "OBS_HOST" "localhost"}}:{{envDefault "OBS_PORT" "4455"}}/{{env "OBS_WEBSOCKET_PASSWORD"}} recording toggle toggle_record_pause: exec: | /usr/local/bin/obs-cmd --websocket obsws://{{envDefault "OBS_HOST" "localhost"}}:{{envDefault "OBS_PORT" "4455"}}/{{env "OBS_WEBSOCKET_PASSWORD"}} recording toggle-pause is_recording_paused: exec: | /usr/local/bin/obs-cmd --websocket obsws://{{envDefault "OBS_HOST" "localhost"}}:{{envDefault "OBS_PORT" "4455"}}/{{env "OBS_WEBSOCKET_PASSWORD"}} recording status toggle_stream: exec: | /usr/local/bin/obs-cmd --websocket obsws://{{envDefault "OBS_HOST" "localhost"}}:{{envDefault "OBS_PORT" "4455"}}/{{env "OBS_WEBSOCKET_PASSWORD"}} streaming toggle scene_switch: params: scene: "Scene 1" exec: | /usr/local/bin/obs-cmd --websocket obsws://{{envDefault "OBS_HOST" "localhost"}}:{{envDefault "OBS_PORT" "4455"}}/{{env "OBS_WEBSOCKET_PASSWORD"}} scene switch "{{.scene}}" toggle_mute: params: source: "Mic/Aux" exec: | /usr/local/bin/obs-cmd --websocket obsws://{{envDefault "OBS_HOST" "localhost"}}:{{envDefault "OBS_PORT" "4455"}}/{{env "OBS_WEBSOCKET_PASSWORD"}} input toggle-mute "{{.source}}" is_recording: exec: | /usr/local/bin/obs-cmd --websocket obsws://{{envDefault "OBS_HOST" "localhost"}}:{{envDefault "OBS_PORT" "4455"}}/{{env "OBS_WEBSOCKET_PASSWORD"}} recording status is_streaming: exec: | /usr/local/bin/obs-cmd --websocket obsws://{{envDefault "OBS_HOST" "localhost"}}:{{envDefault "OBS_PORT" "4455"}}/{{env "OBS_WEBSOCKET_PASSWORD"}} streaming status