Add Panama commands to the launcher
This commit is contained in:
Executable
+82
@@ -0,0 +1,82 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
repo_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
||||
commands_dir="$repo_dir/config/local/share/vicinae/scripts"
|
||||
work="$(mktemp -d /tmp/panama-commands.XXXXXX)"
|
||||
dispatch_log="$work/dispatch.log"
|
||||
|
||||
fail() {
|
||||
printf 'Panama commands contract: %s\n' "$1" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
cleanup() {
|
||||
rm -rf "$work"
|
||||
}
|
||||
trap cleanup EXIT
|
||||
|
||||
declare -A expected=(
|
||||
[open-control-center.sh]=control-center
|
||||
[open-notifications.sh]=notifications
|
||||
[open-calendar.sh]=calendar
|
||||
[open-clipboard.sh]=clipboard
|
||||
[open-mission-control.sh]=overview
|
||||
[open-settings.sh]=settings
|
||||
[toggle-dnd.sh]=dnd
|
||||
[toggle-caffeine.sh]=caffeine
|
||||
[toggle-night-light.sh]=night-light
|
||||
[start-focus.sh]=focus-start
|
||||
[end-focus.sh]=focus-end
|
||||
[capture.sh]=capture
|
||||
[screen-intelligence.sh]=intelligence
|
||||
[quick-screenshot.sh]=screenshot
|
||||
[toggle-microphone.sh]=microphone
|
||||
[open-prism-gallery.sh]=gallery
|
||||
[restart-shell.sh]=restart-shell
|
||||
)
|
||||
|
||||
mkdir -p "$work/home/.config/quickshell/scripts"
|
||||
cat >"$work/home/.config/quickshell/scripts/panama-action" <<'EOF'
|
||||
#!/usr/bin/env bash
|
||||
printf '%s\n' "$*" >>"$PANAMA_COMMAND_TEST_LOG"
|
||||
EOF
|
||||
chmod +x "$work/home/.config/quickshell/scripts/panama-action"
|
||||
|
||||
[[ -d "$commands_dir" ]] || fail 'Vicinae command directory is missing'
|
||||
|
||||
mapfile -t actual_files < <(find "$commands_dir" -maxdepth 1 -type f -name '*.sh' -printf '%f\n' | sort)
|
||||
[[ ${#actual_files[@]} -eq ${#expected[@]} ]] \
|
||||
|| fail "expected ${#expected[@]} commands, found ${#actual_files[@]}"
|
||||
|
||||
declare -A seen_titles=()
|
||||
for script_name in "${!expected[@]}"; do
|
||||
script="$commands_dir/$script_name"
|
||||
[[ -x "$script" ]] || fail "$script_name is missing or not executable"
|
||||
|
||||
vicinae script check "$script" >/dev/null \
|
||||
|| fail "$script_name is rejected by Vicinae"
|
||||
|
||||
title="$(sed -n 's/^# @vicinae.title //p' "$script")"
|
||||
[[ $title == 'Panama: '* ]] || fail "$script_name has an ungrouped title: $title"
|
||||
[[ -z ${seen_titles[$title]+x} ]] || fail "duplicate launcher title: $title"
|
||||
seen_titles[$title]=1
|
||||
|
||||
grep -Fxq '# @vicinae.mode silent' "$script" \
|
||||
|| fail "$script_name does not close quietly after success"
|
||||
grep -Fq '# @vicinae.description ' "$script" \
|
||||
|| fail "$script_name has no searchable description"
|
||||
grep -Fq '# @vicinae.keywords ' "$script" \
|
||||
|| fail "$script_name has no search vocabulary"
|
||||
grep -Fxq '# @vicinae.icon ../../icons/hicolor/scalable/apps/panama-settings.svg' "$script" \
|
||||
|| fail "$script_name does not use the Panama application identity"
|
||||
|
||||
: >"$dispatch_log"
|
||||
HOME="$work/home" PANAMA_COMMAND_TEST_LOG="$dispatch_log" "$script"
|
||||
dispatched="$(cat "$dispatch_log")"
|
||||
[[ $dispatched == "${expected[$script_name]}" ]] \
|
||||
|| fail "$script_name dispatched [$dispatched], expected [${expected[$script_name]}]"
|
||||
done
|
||||
|
||||
printf 'Panama commands contract: PASS (%d commands)\n' "${#expected[@]}"
|
||||
Reference in New Issue
Block a user