icons_dir: ./icons
brightness: 70

# Device USB IDs — defaults match Stream Deck XL v2.
# Run `lsusb | grep Elgato` to confirm yours.
device:
  vendor_id: 0x0fd9
  product_id: 0x00ba

# Keys are 0-indexed, left-to-right, top-to-bottom.
# Stream Deck XL layout (8 columns × 4 rows):
#
#  0  1  2  3  4  5  6  7
#  8  9 10 11 12 13 14 15
# 16 17 18 19 20 21 22 23
# 24 25 26 27 28 29 30 31
#
# icon: filename inside icons_dir (PNG or JPEG)
# command: any shell command

keys:
  # Regular key: show an icon and run a command on press.
  0:
    icon: ghostty.png
    command: ghostty
  1:
    icon: terminal.png
    command: alacritty
  2:
    icon: files.png
    command: nautilus

  # Toggle/status key: polls a command to determine state and shows one of two
  # icons. Pressing the button runs `command` and the icon updates automatically.
  #
  # `match` is a substring to find in the poll command's stdout.
  # If match is found → icon_on is shown; otherwise → icon_off.
  # Omit `match` entirely to use exit code instead (0 = on, non-zero = off).
  #
  # Examples:
  #   Microphone mute:
  #     command: pactl set-source-mute @DEFAULT_SOURCE@ toggle
  #     poll.command: pactl get-source-mute @DEFAULT_SOURCE@
  #     poll.match: "yes"   # "Mute: yes" → muted → show icon_on (mic-muted.png)
  #
  #   VPN toggle:
  #     command: nmcli connection up my-vpn / nmcli connection down my-vpn
  #     poll.command: nmcli connection show --active my-vpn
  #     (no match — uses exit code: 0 = connected)
  #
  #   Systemd service:
  #     command: systemctl --user toggle my-service
  #     poll.command: systemctl --user is-active my-service
  #     (no match — uses exit code)
  #
  # 3:
  #   command: pactl set-source-mute @DEFAULT_SOURCE@ toggle
  #   icon_true: mic-muted.png
  #   icon_false: mic-active.png
  #   poll:
  #     command: pactl get-source-mute @DEFAULT_SOURCE@
  #     interval: 2s
  #     match: "yes"
