feat(triggershell): add power controls, inline openrgb-hue, add off command

- system-shutdown / system-reboot / system-cancel-shutdown scripts with a
  typed-confirmation guard and optional delay (works without sudo via logind)
- openrgb-hue-apply: inline the wrapper script into bash -c, keeping the PATH
  fallback and install hint; drop scripts/openrgb-hue-apply.sh
- openrgb-hue-off: new script wrapping `openrgb-hue off` with device/type/zone
  filters

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012ZC9uGoYPWeG3hed7FpmJw
This commit is contained in:
2026-08-28 20:23:39 +02:00
co-authored by Claude Sonnet 5
parent 89c3ff257d
commit cb73339adc
2 changed files with 152 additions and 17 deletions
-16
View File
@@ -1,16 +0,0 @@
#!/usr/bin/env bash
set -euo pipefail
# Services (e.g. systemd --user units) run with a minimal PATH that skips
# shell-init-only additions like pyenv shims or pip's --user bin dir, even
# though those tools are installed. Add the common locations as a fallback.
export PATH="$HOME/.local/bin:$HOME/.pyenv/shims:$PATH"
if ! command -v openrgb-hue >/dev/null 2>&1; then
echo "error: 'openrgb-hue' was not found on PATH." >&2
echo "Install it with:" >&2
echo " pip install --index-url https://dev.pivoine.art/api/packages/valknar/pypi/simple/ --extra-index-url https://pypi.org/simple openrgb-hue" >&2
exit 1
fi
exec openrgb-hue apply "$SCENE" "$@"
+152 -1
View File
@@ -32,7 +32,20 @@ scripts:
name: "OpenRGB: Apply Hue Scene"
description: Apply a Philips Hue scene as a static color gradient across OpenRGB-controlled lights (motherboard, GPU, RAM, etc).
command: bash
args: ["./scripts/openrgb-hue-apply.sh"]
args:
- -c
- |
# systemd --user units run with a minimal PATH that skips pyenv shims
# and pip's --user bin dir, so add the common locations as a fallback.
export PATH="$HOME/.local/bin:$HOME/.pyenv/shims:$PATH"
if ! command -v openrgb-hue >/dev/null 2>&1; then
echo "error: 'openrgb-hue' was not found on PATH." >&2
echo "Install it with:" >&2
echo " pip install --index-url https://dev.pivoine.art/api/packages/valknar/pypi/simple/ --extra-index-url https://pypi.org/simple openrgb-hue" >&2
exit 1
fi
exec openrgb-hue apply "$SCENE" "$@"
- openrgb-hue-apply
cwd: ./
timeoutSeconds: 30
variables:
@@ -282,3 +295,141 @@ scripts:
min: 1
passAs: arg
argName: --dry-run-leds
- id: openrgb-hue-off
name: "OpenRGB: Turn Off Lights"
description: Turn off OpenRGB-controlled LEDs. Leave every filter unset to turn off all of them.
command: bash
args:
- -c
- |
export PATH="$HOME/.local/bin:$HOME/.pyenv/shims:$PATH"
if ! command -v openrgb-hue >/dev/null 2>&1; then
echo "error: 'openrgb-hue' was not found on PATH." >&2
echo "Install it with:" >&2
echo " pip install --index-url https://dev.pivoine.art/api/packages/valknar/pypi/simple/ --extra-index-url https://pypi.org/simple openrgb-hue" >&2
exit 1
fi
exec openrgb-hue off "$@"
- openrgb-hue-off
cwd: ./
timeoutSeconds: 30
variables:
- name: deviceType
label: Device Type
description: Limit to devices of this type. Leave unset to target every device.
type: enum
required: false
choices: [DRAM, GPU, MOTHERBOARD]
control: select
passAs: arg
argName: --device-type
- name: device
label: Device
description: Limit to a single device by name. Leave unset to target every device.
type: enum
required: false
choices:
- "Corsair Vengeance RGB DDR5"
- "Gigabyte GeForce RTX 3060 Gaming OC"
- "MSI MYSTIC LIGHT"
control: select
passAs: arg
argName: --device
- name: zone
label: Zone
description: Limit to a single zone by name. Leave unset to target every zone.
type: enum
required: false
choices:
- "Corsair DRAM"
- "GPU Zone"
- "JAF"
- "JARGB 1"
- "JARGB 2"
- "JARGB 3"
control: select
passAs: arg
argName: --zone
- id: system-shutdown
name: "System: Shutdown"
description: >-
Powers off this machine. Type "shutdown" in the Confirm field to proceed.
Optionally schedule it a few minutes out (cancel a pending one with "System: Cancel Shutdown").
command: bash
args:
- -c
- >-
if [ "$CONFIRM" != "shutdown" ]; then
echo 'Aborted: type "shutdown" in the Confirm field to proceed.' >&2; exit 1;
fi;
when=now;
if [ "${DELAY_MINUTES:-0}" -gt 0 ] 2>/dev/null; then when="+$DELAY_MINUTES"; fi;
echo "Scheduling poweroff ($when)...";
exec shutdown -h "$when"
timeoutSeconds: 30
variables:
- name: confirm
label: Confirm
description: Type "shutdown" (exactly) to confirm you want to power off this machine.
type: string
required: true
pattern: "^shutdown$"
passAs: env
envName: CONFIRM
- name: delayMinutes
label: Delay (minutes)
description: Wait this many minutes before powering off. 0 = immediately.
type: number
default: 0
min: 0
max: 120
passAs: env
envName: DELAY_MINUTES
- id: system-reboot
name: "System: Reboot"
description: >-
Reboots this machine. Type "reboot" in the Confirm field to proceed.
Optionally schedule it a few minutes out (cancel a pending one with "System: Cancel Shutdown").
command: bash
args:
- -c
- >-
if [ "$CONFIRM" != "reboot" ]; then
echo 'Aborted: type "reboot" in the Confirm field to proceed.' >&2; exit 1;
fi;
when=now;
if [ "${DELAY_MINUTES:-0}" -gt 0 ] 2>/dev/null; then when="+$DELAY_MINUTES"; fi;
echo "Scheduling reboot ($when)...";
exec shutdown -r "$when"
timeoutSeconds: 30
variables:
- name: confirm
label: Confirm
description: Type "reboot" (exactly) to confirm you want to reboot this machine.
type: string
required: true
pattern: "^reboot$"
passAs: env
envName: CONFIRM
- name: delayMinutes
label: Delay (minutes)
description: Wait this many minutes before rebooting. 0 = immediately.
type: number
default: 0
min: 0
max: 120
passAs: env
envName: DELAY_MINUTES
- id: system-cancel-shutdown
name: "System: Cancel Shutdown"
description: Cancels a pending scheduled shutdown or reboot.
command: shutdown
args: ["-c"]
timeoutSeconds: 15
variables: []