Fold thirty-one settings pages into fifteen categories with tabs
The sidebar was a flat scan of thirty-one rows; now it reads like a settings app. Multi-subject categories (Input, Network & Sharing, Applications, Users & Accounts, Privacy & Security, System) carry an Appearance-style tab strip above the page, drawn by the shell so the leaf pages themselves are untouched. The taxonomy lives in one new file, services/SettingsRoutes.qml; the sidebar, the strip, route validation, search breadcrumbs, and both generators derive from it. ShellState.settingsPage still holds leaf ids, so every deep link, IPC call, and search result keeps working — and now lands on the exact tab. Dictation moves out of Sound onto its own page under Input, with a handoff back to Sound for the microphone. The strip scrolls when System's nine tabs outgrow a tiled window. All 161 contracts pass. Claude-Session: https://claude.ai/code/session_01Ms2FbjQy31TVf3CEvQhGM8
This commit is contained in:
@@ -24,7 +24,7 @@ set -uo pipefail
|
||||
repo_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
||||
manual_dir="$repo_dir/config/dot/quickshell/manual"
|
||||
page="$repo_dir/config/dot/quickshell/modules/settings/ManualPage.qml"
|
||||
sidebar="$repo_dir/config/dot/quickshell/modules/settings/SettingsSidebar.qml"
|
||||
routes="$repo_dir/config/dot/quickshell/services/SettingsRoutes.qml"
|
||||
shell_ui="$repo_dir/config/dot/quickshell/modules/settings/SettingsShell.qml"
|
||||
qmldir="$repo_dir/config/dot/quickshell/modules/settings/qmldir"
|
||||
state="$repo_dir/config/dot/quickshell/services/ShellState.qml"
|
||||
@@ -79,13 +79,27 @@ grep -q 'Quickshell.shellDir + "/manual/"' "$page" \
|
||||
grep -q '\.\./\.\./\.\.' "$page" \
|
||||
&& note 'the manual path walks upward out of the shell directory, which is only correct by accident'
|
||||
|
||||
# ── 4. Registered in all five places ─────────────────────────────────────────
|
||||
# ── 4. Registered everywhere a settings page has to be ───────────────────────
|
||||
# The manual is a tab of the System category rather than a sidebar row of its
|
||||
# own -- it is reference material, not a control surface, and it belongs beside
|
||||
# About for the same reason. SettingsRoutes is what makes it reachable at all:
|
||||
# a leaf missing from the taxonomy cannot be opened, searched, or linked to.
|
||||
|
||||
grep -q '{ page: "manual"' "$sidebar" || note 'the manual has no sidebar entry'
|
||||
grep -q '{ page: "manual", label: ' "$routes" || note 'the manual is not a leaf in SettingsRoutes, so nothing can navigate to it'
|
||||
python3 - "$routes" <<'PY' || note 'the manual is no longer a tab of the System category, so it has drifted out of the group it belongs to'
|
||||
import re, sys
|
||||
|
||||
text = open(sys.argv[1], encoding="utf-8").read()
|
||||
block = re.search(r'\{ page: "system",.*?tabs: \[(.*?)\] \}', text, re.S)
|
||||
raise SystemExit(0 if block and '{ page: "manual"' in block.group(1) else 1)
|
||||
PY
|
||||
grep -q 'case "manual": return manualPage;' "$shell_ui" || note 'SettingsShell does not route to the manual'
|
||||
grep -q 'Component { id: manualPage; ManualPage {} }' "$shell_ui" || note 'SettingsShell never declares the manual component'
|
||||
grep -q '^ManualPage 1.0 ManualPage.qml$' "$qmldir" || note 'ManualPage is not registered in the settings qmldir'
|
||||
grep -q '"manual"' "$state" || note 'the manual is not in the allowed settings pages, so openSettings would redirect to Home'
|
||||
# ShellState keeps no page list of its own any more; it resolves whatever it is
|
||||
# handed through SettingsRoutes. That is what makes the taxonomy check above
|
||||
# sufficient, so it is worth pinning that it stays that way.
|
||||
grep -q 'SettingsRoutes.resolve(' "$state" || note 'ShellState does not resolve pages through SettingsRoutes, so openSettings("manual") has no defined destination'
|
||||
grep -q 'page: "manual"' "$search" || note 'the manual is not searchable from the settings search box'
|
||||
|
||||
if (( ${#findings[@]} > 0 )); then
|
||||
|
||||
Reference in New Issue
Block a user