61 lines
2.2 KiB
Bash
61 lines
2.2 KiB
Bash
#!/bin/bash
|
|
|
|
set -euo pipefail
|
|
|
|
repo_dir="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/../.." && pwd)"
|
|
qs_dir="$repo_dir/config/dot/quickshell"
|
|
osd="$qs_dir/modules/osd/Osd.qml"
|
|
state="$qs_dir/services/OsdState.qml"
|
|
shell_file="$qs_dir/shell.qml"
|
|
keybinds="$repo_dir/config/dot/hypr/keybinds.lua"
|
|
|
|
fail() {
|
|
printf 'osd ui contract: %s\n' "$1" >&2
|
|
exit 1
|
|
}
|
|
|
|
[[ -f "$osd" ]] || fail 'Prism OSD surface is missing'
|
|
[[ -f "$state" ]] || fail 'OSD presentation state is missing'
|
|
[[ -f "$qs_dir/modules/osd/qmldir" ]] || fail 'OSD module manifest is missing'
|
|
rg -q '^import Quickshell$' "$state" \
|
|
|| fail 'OSD singleton does not import the Quickshell Singleton type'
|
|
|
|
rg -Fq 'import qs.modules.osd' "$shell_file" || fail 'shell does not import the OSD module'
|
|
[[ "$(rg -c '^[[:space:]]*Osd \{\}' "$shell_file")" -eq 1 ]] \
|
|
|| fail 'shell does not create exactly one OSD per screen'
|
|
rg -Fq 'target: "osd"' "$shell_file" || fail 'OSD IPC target is missing'
|
|
rg -Fq 'OsdState.progress(kind, value, maximum, label)' "$shell_file" \
|
|
|| fail 'progress IPC is not wired to OSD state'
|
|
rg -Fq 'OsdState.message(kind, label)' "$shell_file" \
|
|
|| fail 'message IPC is not wired to OSD state'
|
|
|
|
rg -Fq 'WlrLayershell.namespace: "qs-popover-osd"' "$osd" \
|
|
|| fail 'OSD does not use the existing Prism blur namespace'
|
|
rg -Fq 'WlrLayershell.keyboardFocus: WlrKeyboardFocus.None' "$osd" \
|
|
|| fail 'OSD may steal keyboard focus'
|
|
rg -Fq 'mask: Region {}' "$osd" || fail 'OSD may intercept pointer input'
|
|
rg -Fq 'PrismEdge {' "$osd" || fail 'OSD is missing the Prism signature edge'
|
|
rg -Fq 'font.features: Theme.tabularFigures' "$osd" \
|
|
|| fail 'changing percentages do not use tabular figures'
|
|
|
|
rg -Fq '$HOME/.config/quickshell/scripts/panama-osd' "$keybinds" \
|
|
|| fail 'keybinds do not use the deployed Panama OSD helper'
|
|
for action in \
|
|
'volume up 6' \
|
|
'volume down 6' \
|
|
'volume toggle' \
|
|
'microphone toggle' \
|
|
'volume up 1' \
|
|
'volume down 1' \
|
|
'media play-pause' \
|
|
'media next' \
|
|
'media previous' \
|
|
'media stop' \
|
|
'brightness up 5' \
|
|
'brightness down 5'; do
|
|
rg -Fq "osd(\"$action\")" "$keybinds" \
|
|
|| fail "keybind is not routed through panama-osd $action"
|
|
done
|
|
|
|
printf 'osd ui contract: PASS\n'
|