Make every settings page reachable from the launcher
Settings had a search index and the launcher had script commands, and neither knew about the other: finding a setting meant opening Settings first and searching there. One command per page is now generated from the same sources the in-app search reads -- the sidebar page list, the group routing, and the schema labels -- so a setting searchable inside Settings is searchable from the launcher without a second list to maintain. Generating it surfaced a gap in the in-app search as well. Six pages had no vocabulary at all, because their contents come from the system rather than our schema, so searching "volume" found nothing in Settings either. They now carry entries, which improves both surfaces. The product prefix is dropped from every hand-written command title. The generated ones are qualified "Settings: <page>" instead: a bare page label collides with the feature of the same name, and two commands sharing a title are indistinguishable in a launcher. Claude-Session: https://claude.ai/code/session_01BRvzt4H8XXLPVH5MyYdk9L
This commit is contained in:
@@ -38,6 +38,24 @@ declare -A expected=(
|
||||
[restart-shell.sh]=restart-shell
|
||||
)
|
||||
|
||||
# The per-page settings commands are generated from the settings page list, so
|
||||
# they are enumerated from that list rather than restated here -- a hand-written
|
||||
# copy would have to be edited every time a page is added, which is exactly the
|
||||
# kind of second list this generator exists to avoid.
|
||||
sidebar="$repo_dir/config/dot/quickshell/modules/settings/SettingsSidebar.qml"
|
||||
while read -r page; do
|
||||
[[ -n "$page" ]] || continue
|
||||
[[ "$page" == "home" ]] && continue
|
||||
expected[settings-$page.sh]="settings-page $page"
|
||||
done < <(grep -oE '\{ page: "[a-z-]+"' "$sidebar" | sed 's/.*"\([a-z-]*\)"/\1/')
|
||||
|
||||
(( ${#expected[@]} > 18 )) || fail 'no generated per-page commands were found; run scripts/panama-settings-commands'
|
||||
|
||||
# Generated commands must match their source. A stale command dispatches to a
|
||||
# page that has been renamed or removed, and the launcher reports nothing wrong.
|
||||
"$repo_dir/config/dot/quickshell/scripts/panama-settings-commands" --check >/dev/null \
|
||||
|| fail 'the generated per-page commands are stale; run scripts/panama-settings-commands'
|
||||
|
||||
mkdir -p "$work/home/.config/quickshell/scripts"
|
||||
cat >"$work/home/.config/quickshell/scripts/panama-action" <<'EOF'
|
||||
#!/usr/bin/env bash
|
||||
@@ -60,7 +78,11 @@ for script_name in "${!expected[@]}"; do
|
||||
|| 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"
|
||||
# No product prefix: this is the desktop's own settings, not a third-party
|
||||
# add-on announcing itself in someone else's launcher. Uniqueness still
|
||||
# matters, because two commands with one title are indistinguishable there.
|
||||
[[ -n $title ]] || fail "$script_name has no title"
|
||||
[[ $title != Panama* ]] || fail "$script_name still carries the product prefix: $title"
|
||||
[[ -z ${seen_titles[$title]+x} ]] || fail "duplicate launcher title: $title"
|
||||
seen_titles[$title]=1
|
||||
|
||||
@@ -74,7 +96,7 @@ for script_name in "${!expected[@]}"; do
|
||||
|| fail "$script_name does not use the Panama application identity"
|
||||
|
||||
if [[ $script_name == check-system-health.sh ]]; then
|
||||
[[ $title == 'Panama: Check System Health' ]] \
|
||||
[[ $title == 'Check System Health' ]] \
|
||||
|| fail "health command has the wrong title: $title"
|
||||
grep -Fxq '# @vicinae.schemaVersion 1' "$script" \
|
||||
|| fail 'health command does not use schema version 1'
|
||||
|
||||
Reference in New Issue
Block a user