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:
@@ -37,13 +37,13 @@ Last live audit: 2026-08-17, Fedora 44, Hyprland 0.56.2, Quickshell 0.3.0.
|
|||||||
| Autostart apps | Nextcloud, Bitwarden, and RustDesk system service/tray | Live |
|
| Autostart apps | Nextcloud, Bitwarden, and RustDesk system service/tray | Live |
|
||||||
| Printer administration | CUPS with the `system-config-printer` graphical interface | Live |
|
| Printer administration | CUPS with the `system-config-printer` graphical interface | Live |
|
||||||
| System settings | The Settings app for display policy, appearance, desktop, sound, focus, shortcuts, and services; labeled GNOME hardware/account handoffs | Live |
|
| System settings | The Settings app for display policy, appearance, desktop, sound, focus, shortcuts, and services; labeled GNOME hardware/account handoffs | Live |
|
||||||
| System health and recovery | Settings → System Health, `Panama: Check System Health` in Vicinae, a degraded-only bar indicator, redacted reports, and bounded Panama-owned repairs | Live |
|
| System health and recovery | Settings → System Health, `Check System Health` in Vicinae, a degraded-only bar indicator, redacted reports, and bounded Panama-owned repairs | Live |
|
||||||
|
|
||||||
## System health and recovery
|
## System health and recovery
|
||||||
|
|
||||||
Panama stays silent while the desktop is healthy. A compact bar indicator
|
Panama stays silent while the desktop is healthy. A compact bar indicator
|
||||||
appears only for actionable warnings or errors and opens the same **System
|
appears only for actionable warnings or errors and opens the same **System
|
||||||
Health** page available from Settings and the Vicinae command **Panama: Check
|
Health** page available from Settings and the Vicinae command **Check
|
||||||
System Health**. The terminal summary is available with:
|
System Health**. The terminal summary is available with:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ such rather than half-reimplemented.
|
|||||||
|
|
||||||
The stable internal `services` route renders **System Health**. It is reachable
|
The stable internal `services` route renders **System Health**. It is reachable
|
||||||
from the Settings sidebar and its live 54px footer, the degraded-only bar
|
from the Settings sidebar and its live 54px footer, the degraded-only bar
|
||||||
indicator, and Vicinae's **Panama: Check System Health** command. Healthy scans
|
indicator, and Vicinae's **Check System Health** command. Healthy scans
|
||||||
reserve no bar space and produce no notification.
|
reserve no bar space and produce no notification.
|
||||||
|
|
||||||
`services/Health.qml` owns the last accepted redacted snapshot. It invokes
|
`services/Health.qml` owns the last accepted redacted snapshot. It invokes
|
||||||
|
|||||||
@@ -109,6 +109,19 @@ case "$action" in
|
|||||||
clipboard) qs ipc call clipboard open ;;
|
clipboard) qs ipc call clipboard open ;;
|
||||||
overview) qs ipc call overview open ;;
|
overview) qs ipc call overview open ;;
|
||||||
settings) qs ipc call settings open ;;
|
settings) qs ipc call settings open ;;
|
||||||
|
|
||||||
|
# Jump straight to one settings page. The launcher's per-page commands are
|
||||||
|
# the only caller, and they are generated from the page list itself, so the
|
||||||
|
# pattern below is a boundary check rather than a whitelist: an unknown page
|
||||||
|
# would leave the settings window showing nothing at all.
|
||||||
|
settings-page)
|
||||||
|
page="${2:-}"
|
||||||
|
if [[ ! "$page" =~ ^[a-z][a-z-]*$ ]]; then
|
||||||
|
printf 'Usage: panama-action settings-page PAGE\n' >&2
|
||||||
|
exit 2
|
||||||
|
fi
|
||||||
|
qs ipc call settings page "$page"
|
||||||
|
;;
|
||||||
health) qs ipc call health open ;;
|
health) qs ipc call health open ;;
|
||||||
|
|
||||||
dnd)
|
dnd)
|
||||||
@@ -149,7 +162,7 @@ case "$action" in
|
|||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
printf 'Usage: panama-action {%s}\n' \
|
printf 'Usage: panama-action {%s}\n' \
|
||||||
'control-center|notifications|calendar|clipboard|overview|settings|health|dnd|caffeine|night-light|focus-start|focus-end|capture|intelligence|screenshot|microphone|gallery|restart-shell' >&2
|
'control-center|notifications|calendar|clipboard|overview|settings|settings-page PAGE|health|dnd|caffeine|night-light|focus-start|focus-end|capture|intelligence|screenshot|microphone|gallery|restart-shell' >&2
|
||||||
exit 2
|
exit 2
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|||||||
+203
@@ -0,0 +1,203 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
"""Generate one launcher command per settings page.
|
||||||
|
|
||||||
|
Settings has a search index and the launcher has script commands, but they did
|
||||||
|
not know about each other: finding a setting meant opening Settings first and
|
||||||
|
searching there. These commands close that gap, so typing "night light" into the
|
||||||
|
launcher opens the page that owns it.
|
||||||
|
|
||||||
|
The vocabulary is derived from the same sources the in-app search uses --
|
||||||
|
the page list in SettingsSidebar.qml, the group routing in SettingsSearch.qml,
|
||||||
|
and the labels in PreferenceSchema.qml -- so a setting that is searchable inside
|
||||||
|
Settings is searchable from the launcher without anyone maintaining a second
|
||||||
|
list.
|
||||||
|
|
||||||
|
panama-settings-commands write the commands
|
||||||
|
panama-settings-commands --check fail if what is on disk is stale
|
||||||
|
|
||||||
|
Run it after adding a settings page or renaming a setting.
|
||||||
|
"""
|
||||||
|
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import re
|
||||||
|
import sys
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
REPO = Path(__file__).resolve().parents[4]
|
||||||
|
SHELL = REPO / "config/dot/quickshell"
|
||||||
|
SIDEBAR = SHELL / "modules/settings/SettingsSidebar.qml"
|
||||||
|
SEARCH = SHELL / "services/SettingsSearch.qml"
|
||||||
|
SCHEMA = SHELL / "config/PreferenceSchema.qml"
|
||||||
|
OUTPUT_DIR = REPO / "config/local/share/vicinae/scripts"
|
||||||
|
|
||||||
|
# Home is what the plain "Open Settings" command already lands on, so a second
|
||||||
|
# command for it would be a duplicate under a different name.
|
||||||
|
SKIP_PAGES = {"home"}
|
||||||
|
|
||||||
|
# Enough vocabulary to find the page, not so much that one page matches
|
||||||
|
# everything. Ordered by the schema, so the settings at the top of a page --
|
||||||
|
# the ones it is named for -- are the ones that survive the cut.
|
||||||
|
MAX_KEYWORDS = 12
|
||||||
|
|
||||||
|
GENERATED_MARKER = "# Generated by scripts/panama-settings-commands -- do not edit by hand."
|
||||||
|
|
||||||
|
|
||||||
|
class ParseError(RuntimeError):
|
||||||
|
"""A source file did not look the way this generator expects."""
|
||||||
|
|
||||||
|
|
||||||
|
def read(path: Path) -> str:
|
||||||
|
try:
|
||||||
|
return path.read_text(encoding="utf-8")
|
||||||
|
except OSError as error:
|
||||||
|
raise ParseError(f"could not read {path}") from error
|
||||||
|
|
||||||
|
|
||||||
|
def pages() -> list[tuple[str, str]]:
|
||||||
|
"""The settings pages, in sidebar order, as (id, label)."""
|
||||||
|
source = read(SIDEBAR)
|
||||||
|
found = re.findall(r'\{ page: "([a-z-]+)", label: "([^"]+)"', source)
|
||||||
|
if not found:
|
||||||
|
raise ParseError("no pages found in SettingsSidebar.qml")
|
||||||
|
return [(page, label) for page, label in found if page not in SKIP_PAGES]
|
||||||
|
|
||||||
|
|
||||||
|
def group_pages() -> dict[str, str]:
|
||||||
|
source = read(SEARCH)
|
||||||
|
table = re.search(r"readonly property var groupPages: \(\{(.*?)\n \}\)", source, re.S)
|
||||||
|
if not table:
|
||||||
|
raise ParseError("groupPages not found in SettingsSearch.qml")
|
||||||
|
return dict(re.findall(r'"([A-Za-z]+)":\s*"([a-z-]+)"', table.group(1)))
|
||||||
|
|
||||||
|
|
||||||
|
def extra_labels() -> dict[str, list[str]]:
|
||||||
|
"""Settings the system owns rather than Panama, which have no schema entry."""
|
||||||
|
source = read(SEARCH)
|
||||||
|
table = re.search(r"readonly property var extraEntries: \[(.*?)\n \]", source, re.S)
|
||||||
|
if not table:
|
||||||
|
return {}
|
||||||
|
labels: dict[str, list[str]] = {}
|
||||||
|
for label, page in re.findall(r'\{ label: "([^"]+)".*?page: "([a-z-]+)" \}', table.group(1)):
|
||||||
|
labels.setdefault(page, []).append(label)
|
||||||
|
return labels
|
||||||
|
|
||||||
|
|
||||||
|
def schema_labels() -> list[tuple[str, str]]:
|
||||||
|
"""(group, label) for every user-facing setting, in schema order."""
|
||||||
|
source = read(SCHEMA)
|
||||||
|
entries: list[tuple[str, str]] = []
|
||||||
|
chunks = source.split("key: ")
|
||||||
|
for chunk in chunks[1:]:
|
||||||
|
# Internal state is not a setting anyone searches for.
|
||||||
|
if re.search(r"internal:\s*true", chunk[:600]):
|
||||||
|
continue
|
||||||
|
group = re.search(r'group:\s*"([A-Za-z]+)"', chunk[:600])
|
||||||
|
label = re.search(r'label:\s*"([^"]+)"', chunk[:600])
|
||||||
|
if group and label:
|
||||||
|
entries.append((group.group(1), label.group(1)))
|
||||||
|
if not entries:
|
||||||
|
raise ParseError("no labelled settings found in PreferenceSchema.qml")
|
||||||
|
return entries
|
||||||
|
|
||||||
|
|
||||||
|
def keywords_for(page: str, routing: dict[str, str], schema: list[tuple[str, str]],
|
||||||
|
extras: dict[str, list[str]]) -> list[str]:
|
||||||
|
words: list[str] = []
|
||||||
|
for group, label in schema:
|
||||||
|
if routing.get(group) == page:
|
||||||
|
lowered = label.lower()
|
||||||
|
if lowered not in words:
|
||||||
|
words.append(lowered)
|
||||||
|
for label in extras.get(page, []):
|
||||||
|
lowered = label.lower()
|
||||||
|
if lowered not in words:
|
||||||
|
words.append(lowered)
|
||||||
|
return words[:MAX_KEYWORDS]
|
||||||
|
|
||||||
|
|
||||||
|
def command_for(page: str, label: str, words: list[str]) -> str:
|
||||||
|
"""One launcher command, titled "Settings: <page>".
|
||||||
|
|
||||||
|
The qualifier is not product branding -- that was deliberately dropped from
|
||||||
|
every command title. It is here because a bare page label collides with the
|
||||||
|
feature of the same name: "Screen Intelligence" is both a thing you open and
|
||||||
|
a page of settings about it, and two commands sharing one title are
|
||||||
|
indistinguishable in a launcher. Qualifying the page also groups all of them
|
||||||
|
under one word, which is what typing "settings" is for.
|
||||||
|
"""
|
||||||
|
# "settings" is always a keyword so typing it lists every page at once.
|
||||||
|
vocabulary = ["settings"] + [word for word in words if word != "settings"]
|
||||||
|
keywords = ", ".join(f'"{word}"' for word in vocabulary)
|
||||||
|
return f"""#!/usr/bin/env bash
|
||||||
|
{GENERATED_MARKER}
|
||||||
|
# @vicinae.schemaVersion 1
|
||||||
|
# @vicinae.title Settings: {label}
|
||||||
|
# @vicinae.mode silent
|
||||||
|
# @vicinae.icon ../../icons/hicolor/scalable/apps/panama-settings.svg
|
||||||
|
# @vicinae.description Open {label} in Settings.
|
||||||
|
# @vicinae.keywords [{keywords}]
|
||||||
|
|
||||||
|
exec "$HOME/.config/quickshell/scripts/panama-action" settings-page {page}
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
def build() -> dict[Path, str]:
|
||||||
|
routing = group_pages()
|
||||||
|
schema = schema_labels()
|
||||||
|
extras = extra_labels()
|
||||||
|
files: dict[Path, str] = {}
|
||||||
|
for page, label in pages():
|
||||||
|
words = keywords_for(page, routing, schema, extras)
|
||||||
|
files[OUTPUT_DIR / f"settings-{page}.sh"] = command_for(page, label, words)
|
||||||
|
return files
|
||||||
|
|
||||||
|
|
||||||
|
def existing() -> set[Path]:
|
||||||
|
return {path for path in OUTPUT_DIR.glob("settings-*.sh")}
|
||||||
|
|
||||||
|
|
||||||
|
def main(arguments: list[str]) -> int:
|
||||||
|
check = arguments == ["--check"]
|
||||||
|
if arguments and not check:
|
||||||
|
print(__doc__, file=sys.stderr)
|
||||||
|
return 2
|
||||||
|
|
||||||
|
try:
|
||||||
|
files = build()
|
||||||
|
except ParseError as error:
|
||||||
|
# Loud and empty-handed: writing a partial set would silently drop the
|
||||||
|
# pages whose source stopped parsing.
|
||||||
|
print(f"panama-settings-commands: {error}", file=sys.stderr)
|
||||||
|
return 2
|
||||||
|
|
||||||
|
stale = [path for path, body in files.items()
|
||||||
|
if not path.is_file() or path.read_text(encoding="utf-8") != body]
|
||||||
|
orphaned = sorted(existing() - set(files))
|
||||||
|
|
||||||
|
if check:
|
||||||
|
for path in stale:
|
||||||
|
print(f"stale: {path.name}", file=sys.stderr)
|
||||||
|
for path in orphaned:
|
||||||
|
print(f"orphaned: {path.name}", file=sys.stderr)
|
||||||
|
if stale or orphaned:
|
||||||
|
print("panama-settings-commands: run it without --check to regenerate",
|
||||||
|
file=sys.stderr)
|
||||||
|
return 1
|
||||||
|
print(f"panama-settings-commands: {len(files)} commands are current")
|
||||||
|
return 0
|
||||||
|
|
||||||
|
for path in orphaned:
|
||||||
|
path.unlink()
|
||||||
|
print(f"removed {path.name}")
|
||||||
|
for path, body in files.items():
|
||||||
|
path.write_text(body, encoding="utf-8")
|
||||||
|
path.chmod(0o755)
|
||||||
|
print(f"panama-settings-commands: wrote {len(files)} commands"
|
||||||
|
+ (f", removed {len(orphaned)}" if orphaned else ""))
|
||||||
|
return 0
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
raise SystemExit(main(sys.argv[1:]))
|
||||||
@@ -64,6 +64,22 @@ Singleton {
|
|||||||
{ label: "Bluetooth", detail: "Managed by GNOME Settings", page: "connectivity" },
|
{ label: "Bluetooth", detail: "Managed by GNOME Settings", page: "connectivity" },
|
||||||
{ label: "Printers", detail: "Managed by GNOME Settings", page: "connectivity" },
|
{ label: "Printers", detail: "Managed by GNOME Settings", page: "connectivity" },
|
||||||
{ label: "Default applications", detail: "Browser, mail, files", page: "applications" },
|
{ label: "Default applications", detail: "Browser, mail, files", page: "applications" },
|
||||||
|
{ label: "Output volume", detail: "Choose the output device and its level", page: "sound" },
|
||||||
|
{ label: "Input volume", detail: "Choose the microphone and its level", page: "sound" },
|
||||||
|
{ label: "Per-application volume", detail: "Set the level of each application separately", page: "sound" },
|
||||||
|
{ label: "Event sounds", detail: "Play alerts and interface event sounds", page: "sound" },
|
||||||
|
{ label: "Saved passwords", detail: "The login keyring and what is stored in it", page: "privacy" },
|
||||||
|
{ label: "Camera and microphone", detail: "Which applications may use them", page: "privacy" },
|
||||||
|
{ label: "Screen sharing", detail: "Which applications may capture the screen", page: "privacy" },
|
||||||
|
{ label: "File history and trash", detail: "What is remembered and when it is cleared", page: "privacy" },
|
||||||
|
{ label: "Device security", detail: "Secure boot and firmware protections", page: "privacy" },
|
||||||
|
{ label: "Language", detail: "The system language, applied to programs started afterwards", page: "region" },
|
||||||
|
{ label: "Regional formats", detail: "How dates, times, and numbers are written", page: "region" },
|
||||||
|
{ label: "Online accounts", detail: "Sign in to mail, calendar, and contacts", page: "accounts" },
|
||||||
|
{ label: "Home Assistant", detail: "Connect the desktop to a Home Assistant server", page: "home-phone" },
|
||||||
|
{ label: "Phone", detail: "Pair a phone for messages and notifications", page: "home-phone" },
|
||||||
|
{ label: "System information", detail: "Kernel, distribution, and hardware", page: "about" },
|
||||||
|
{ label: "Desktop version", detail: "Which Hyprland and Quickshell this session runs", page: "about" },
|
||||||
{ label: "Restore defaults", detail: "Return every Panama setting to its shipped value", page: "desktop" },
|
{ label: "Restore defaults", detail: "Return every Panama setting to its shipped value", page: "desktop" },
|
||||||
{ label: "Keyboard shortcuts", detail: "Every shortcut the compositor has bound", page: "shortcuts" },
|
{ label: "Keyboard shortcuts", detail: "Every shortcut the compositor has bound", page: "shortcuts" },
|
||||||
{ label: "System Health", detail: "Check Panama services, integrations, tools, and recovery actions", page: "services" },
|
{ label: "System Health", detail: "Check Panama services, integrations, tools, and recovery actions", page: "services" },
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# @vicinae.schemaVersion 1
|
# @vicinae.schemaVersion 1
|
||||||
# @vicinae.title Panama: Screenshot and Recording
|
# @vicinae.title Screenshot and Recording
|
||||||
# @vicinae.mode silent
|
# @vicinae.mode silent
|
||||||
# @vicinae.icon ../../icons/hicolor/scalable/apps/panama-settings.svg
|
# @vicinae.icon ../../icons/hicolor/scalable/apps/panama-settings.svg
|
||||||
# @vicinae.description Open the polished screenshot and screen-recording picker.
|
# @vicinae.description Open the polished screenshot and screen-recording picker.
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# @vicinae.schemaVersion 1
|
# @vicinae.schemaVersion 1
|
||||||
# @vicinae.title Panama: Check System Health
|
# @vicinae.title Check System Health
|
||||||
# @vicinae.mode silent
|
# @vicinae.mode silent
|
||||||
# @vicinae.icon ../../icons/hicolor/scalable/apps/panama-settings.svg
|
# @vicinae.icon ../../icons/hicolor/scalable/apps/panama-settings.svg
|
||||||
# @vicinae.description Review Panama services, integrations, and recovery actions.
|
# @vicinae.description Review Panama services, integrations, and recovery actions.
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# @vicinae.schemaVersion 1
|
# @vicinae.schemaVersion 1
|
||||||
# @vicinae.title Panama: End Focus Session
|
# @vicinae.title End Focus Session
|
||||||
# @vicinae.mode silent
|
# @vicinae.mode silent
|
||||||
# @vicinae.icon ../../icons/hicolor/scalable/apps/panama-settings.svg
|
# @vicinae.icon ../../icons/hicolor/scalable/apps/panama-settings.svg
|
||||||
# @vicinae.description End the current focus timer and restore its previous states.
|
# @vicinae.description End the current focus timer and restore its previous states.
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# @vicinae.schemaVersion 1
|
# @vicinae.schemaVersion 1
|
||||||
# @vicinae.title Panama: Open Calendar
|
# @vicinae.title Open Calendar
|
||||||
# @vicinae.mode silent
|
# @vicinae.mode silent
|
||||||
# @vicinae.icon ../../icons/hicolor/scalable/apps/panama-settings.svg
|
# @vicinae.icon ../../icons/hicolor/scalable/apps/panama-settings.svg
|
||||||
# @vicinae.description Open the calendar, synchronized agenda, and ongoing activity.
|
# @vicinae.description Open the calendar, synchronized agenda, and ongoing activity.
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# @vicinae.schemaVersion 1
|
# @vicinae.schemaVersion 1
|
||||||
# @vicinae.title Panama: Open Clipboard
|
# @vicinae.title Open Clipboard
|
||||||
# @vicinae.mode silent
|
# @vicinae.mode silent
|
||||||
# @vicinae.icon ../../icons/hicolor/scalable/apps/panama-settings.svg
|
# @vicinae.icon ../../icons/hicolor/scalable/apps/panama-settings.svg
|
||||||
# @vicinae.description Open Panama's compact clipboard history surface.
|
# @vicinae.description Open Panama's compact clipboard history surface.
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# @vicinae.schemaVersion 1
|
# @vicinae.schemaVersion 1
|
||||||
# @vicinae.title Panama: Open Control Center
|
# @vicinae.title Open Control Center
|
||||||
# @vicinae.mode silent
|
# @vicinae.mode silent
|
||||||
# @vicinae.icon ../../icons/hicolor/scalable/apps/panama-settings.svg
|
# @vicinae.icon ../../icons/hicolor/scalable/apps/panama-settings.svg
|
||||||
# @vicinae.description Open Wi-Fi, Bluetooth, audio, phone, and Home controls.
|
# @vicinae.description Open Wi-Fi, Bluetooth, audio, phone, and Home controls.
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# @vicinae.schemaVersion 1
|
# @vicinae.schemaVersion 1
|
||||||
# @vicinae.title Panama: Open Mission Control
|
# @vicinae.title Open Mission Control
|
||||||
# @vicinae.mode silent
|
# @vicinae.mode silent
|
||||||
# @vicinae.icon ../../icons/hicolor/scalable/apps/panama-settings.svg
|
# @vicinae.icon ../../icons/hicolor/scalable/apps/panama-settings.svg
|
||||||
# @vicinae.description See every workspace, tiled window, and scratchpad window.
|
# @vicinae.description See every workspace, tiled window, and scratchpad window.
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# @vicinae.schemaVersion 1
|
# @vicinae.schemaVersion 1
|
||||||
# @vicinae.title Panama: Open Notifications
|
# @vicinae.title Open Notifications
|
||||||
# @vicinae.mode silent
|
# @vicinae.mode silent
|
||||||
# @vicinae.icon ../../icons/hicolor/scalable/apps/panama-settings.svg
|
# @vicinae.icon ../../icons/hicolor/scalable/apps/panama-settings.svg
|
||||||
# @vicinae.description Open notification history and the unified date center.
|
# @vicinae.description Open notification history and the unified date center.
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# @vicinae.schemaVersion 1
|
# @vicinae.schemaVersion 1
|
||||||
# @vicinae.title Panama: Open Prism Gallery
|
# @vicinae.title Open Prism Gallery
|
||||||
# @vicinae.mode silent
|
# @vicinae.mode silent
|
||||||
# @vicinae.icon ../../icons/hicolor/scalable/apps/panama-settings.svg
|
# @vicinae.icon ../../icons/hicolor/scalable/apps/panama-settings.svg
|
||||||
# @vicinae.description Open the living gallery of Panama's production components.
|
# @vicinae.description Open the living gallery of Panama's production components.
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# @vicinae.schemaVersion 1
|
# @vicinae.schemaVersion 1
|
||||||
# @vicinae.title Panama: Open Settings
|
# @vicinae.title Open Settings
|
||||||
# @vicinae.mode silent
|
# @vicinae.mode silent
|
||||||
# @vicinae.icon ../../icons/hicolor/scalable/apps/panama-settings.svg
|
# @vicinae.icon ../../icons/hicolor/scalable/apps/panama-settings.svg
|
||||||
# @vicinae.description Configure the Panama desktop from its native Settings app.
|
# @vicinae.description Configure the Panama desktop from its native Settings app.
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# @vicinae.schemaVersion 1
|
# @vicinae.schemaVersion 1
|
||||||
# @vicinae.title Panama: Capture Entire Screen
|
# @vicinae.title Capture Entire Screen
|
||||||
# @vicinae.mode silent
|
# @vicinae.mode silent
|
||||||
# @vicinae.icon ../../icons/hicolor/scalable/apps/panama-settings.svg
|
# @vicinae.icon ../../icons/hicolor/scalable/apps/panama-settings.svg
|
||||||
# @vicinae.description Save an immediate screenshot of the complete desktop.
|
# @vicinae.description Save an immediate screenshot of the complete desktop.
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# @vicinae.schemaVersion 1
|
# @vicinae.schemaVersion 1
|
||||||
# @vicinae.title Panama: Restart Desktop Shell
|
# @vicinae.title Restart Desktop Shell
|
||||||
# @vicinae.mode silent
|
# @vicinae.mode silent
|
||||||
# @vicinae.icon ../../icons/hicolor/scalable/apps/panama-settings.svg
|
# @vicinae.icon ../../icons/hicolor/scalable/apps/panama-settings.svg
|
||||||
# @vicinae.description Restart Quickshell if a desktop surface becomes unresponsive.
|
# @vicinae.description Restart Quickshell if a desktop surface becomes unresponsive.
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# @vicinae.schemaVersion 1
|
# @vicinae.schemaVersion 1
|
||||||
# @vicinae.title Panama: Screen Intelligence
|
# @vicinae.title Screen Intelligence
|
||||||
# @vicinae.mode silent
|
# @vicinae.mode silent
|
||||||
# @vicinae.icon ../../icons/hicolor/scalable/apps/panama-settings.svg
|
# @vicinae.icon ../../icons/hicolor/scalable/apps/panama-settings.svg
|
||||||
# @vicinae.description Select part of the screen for OCR, QR, or code recognition.
|
# @vicinae.description Select part of the screen for OCR, QR, or code recognition.
|
||||||
|
|||||||
+10
@@ -0,0 +1,10 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Generated by scripts/panama-settings-commands -- do not edit by hand.
|
||||||
|
# @vicinae.schemaVersion 1
|
||||||
|
# @vicinae.title Settings: About
|
||||||
|
# @vicinae.mode silent
|
||||||
|
# @vicinae.icon ../../icons/hicolor/scalable/apps/panama-settings.svg
|
||||||
|
# @vicinae.description Open About in Settings.
|
||||||
|
# @vicinae.keywords ["settings", "system information", "desktop version"]
|
||||||
|
|
||||||
|
exec "$HOME/.config/quickshell/scripts/panama-action" settings-page about
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Generated by scripts/panama-settings-commands -- do not edit by hand.
|
||||||
|
# @vicinae.schemaVersion 1
|
||||||
|
# @vicinae.title Settings: Accessibility
|
||||||
|
# @vicinae.mode silent
|
||||||
|
# @vicinae.icon ../../icons/hicolor/scalable/apps/panama-settings.svg
|
||||||
|
# @vicinae.description Open Accessibility in Settings.
|
||||||
|
# @vicinae.keywords ["settings", "magnifier", "magnifier follows in steps", "dim inactive windows", "dim amount", "pointer size", "text size"]
|
||||||
|
|
||||||
|
exec "$HOME/.config/quickshell/scripts/panama-action" settings-page accessibility
|
||||||
+10
@@ -0,0 +1,10 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Generated by scripts/panama-settings-commands -- do not edit by hand.
|
||||||
|
# @vicinae.schemaVersion 1
|
||||||
|
# @vicinae.title Settings: Online Accounts
|
||||||
|
# @vicinae.mode silent
|
||||||
|
# @vicinae.icon ../../icons/hicolor/scalable/apps/panama-settings.svg
|
||||||
|
# @vicinae.description Open Online Accounts in Settings.
|
||||||
|
# @vicinae.keywords ["settings", "online accounts"]
|
||||||
|
|
||||||
|
exec "$HOME/.config/quickshell/scripts/panama-action" settings-page accounts
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Generated by scripts/panama-settings-commands -- do not edit by hand.
|
||||||
|
# @vicinae.schemaVersion 1
|
||||||
|
# @vicinae.title Settings: Appearance
|
||||||
|
# @vicinae.mode silent
|
||||||
|
# @vicinae.icon ../../icons/hicolor/scalable/apps/panama-settings.svg
|
||||||
|
# @vicinae.description Open Appearance in Settings.
|
||||||
|
# @vicinae.keywords ["settings", "24-hour time", "show seconds", "show weekday", "processor", "memory", "graphics", "inner gaps", "outer gaps", "border width", "corner radius", "unfocused window opacity", "focused window opacity"]
|
||||||
|
|
||||||
|
exec "$HOME/.config/quickshell/scripts/panama-action" settings-page appearance
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Generated by scripts/panama-settings-commands -- do not edit by hand.
|
||||||
|
# @vicinae.schemaVersion 1
|
||||||
|
# @vicinae.title Settings: Applications
|
||||||
|
# @vicinae.mode silent
|
||||||
|
# @vicinae.icon ../../icons/hicolor/scalable/apps/panama-settings.svg
|
||||||
|
# @vicinae.description Open Applications in Settings.
|
||||||
|
# @vicinae.keywords ["settings", "default applications"]
|
||||||
|
|
||||||
|
exec "$HOME/.config/quickshell/scripts/panama-action" settings-page applications
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Generated by scripts/panama-settings-commands -- do not edit by hand.
|
||||||
|
# @vicinae.schemaVersion 1
|
||||||
|
# @vicinae.title Settings: Network & Devices
|
||||||
|
# @vicinae.mode silent
|
||||||
|
# @vicinae.icon ../../icons/hicolor/scalable/apps/panama-settings.svg
|
||||||
|
# @vicinae.description Open Network & Devices in Settings.
|
||||||
|
# @vicinae.keywords ["settings", "wi-fi", "bluetooth", "printers"]
|
||||||
|
|
||||||
|
exec "$HOME/.config/quickshell/scripts/panama-action" settings-page connectivity
|
||||||
+10
@@ -0,0 +1,10 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Generated by scripts/panama-settings-commands -- do not edit by hand.
|
||||||
|
# @vicinae.schemaVersion 1
|
||||||
|
# @vicinae.title Settings: Date & Time
|
||||||
|
# @vicinae.mode silent
|
||||||
|
# @vicinae.icon ../../icons/hicolor/scalable/apps/panama-settings.svg
|
||||||
|
# @vicinae.description Open Date & Time in Settings.
|
||||||
|
# @vicinae.keywords ["settings", "timezone", "network time"]
|
||||||
|
|
||||||
|
exec "$HOME/.config/quickshell/scripts/panama-action" settings-page datetime
|
||||||
+10
@@ -0,0 +1,10 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Generated by scripts/panama-settings-commands -- do not edit by hand.
|
||||||
|
# @vicinae.schemaVersion 1
|
||||||
|
# @vicinae.title Settings: Desktop & Dock
|
||||||
|
# @vicinae.mode silent
|
||||||
|
# @vicinae.icon ../../icons/hicolor/scalable/apps/panama-settings.svg
|
||||||
|
# @vicinae.description Open Desktop & Dock in Settings.
|
||||||
|
# @vicinae.keywords ["settings", "automatically hide the dock", "reveal delay", "hide delay", "focus session length", "resize by dragging the border", "border grab area", "show the resize cursor", "snap distance between windows", "snap distance to screen edges", "snapping respects gaps", "master area size", "master area position"]
|
||||||
|
|
||||||
|
exec "$HOME/.config/quickshell/scripts/panama-action" settings-page desktop
|
||||||
+10
@@ -0,0 +1,10 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Generated by scripts/panama-settings-commands -- do not edit by hand.
|
||||||
|
# @vicinae.schemaVersion 1
|
||||||
|
# @vicinae.title Settings: Displays
|
||||||
|
# @vicinae.mode silent
|
||||||
|
# @vicinae.icon ../../icons/hicolor/scalable/apps/panama-settings.svg
|
||||||
|
# @vicinae.description Open Displays in Settings.
|
||||||
|
# @vicinae.keywords ["settings", "game-aware hdr", "variable refresh rate", "direct scanout", "night light", "schedule automatically", "color temperature", "turns on at", "turns off at", "arrange displays", "monitor position", "primary display"]
|
||||||
|
|
||||||
|
exec "$HOME/.config/quickshell/scripts/panama-action" settings-page displays
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Generated by scripts/panama-settings-commands -- do not edit by hand.
|
||||||
|
# @vicinae.schemaVersion 1
|
||||||
|
# @vicinae.title Settings: Home & Phone
|
||||||
|
# @vicinae.mode silent
|
||||||
|
# @vicinae.icon ../../icons/hicolor/scalable/apps/panama-settings.svg
|
||||||
|
# @vicinae.description Open Home & Phone in Settings.
|
||||||
|
# @vicinae.keywords ["settings", "home assistant", "phone"]
|
||||||
|
|
||||||
|
exec "$HOME/.config/quickshell/scripts/panama-action" settings-page home-phone
|
||||||
+10
@@ -0,0 +1,10 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Generated by scripts/panama-settings-commands -- do not edit by hand.
|
||||||
|
# @vicinae.schemaVersion 1
|
||||||
|
# @vicinae.title Settings: Mouse & Touchpad
|
||||||
|
# @vicinae.mode silent
|
||||||
|
# @vicinae.icon ../../icons/hicolor/scalable/apps/panama-settings.svg
|
||||||
|
# @vicinae.description Open Mouse & Touchpad in Settings.
|
||||||
|
# @vicinae.keywords ["settings", "pointer focus", "pointer speed", "hide pointer after", "natural scrolling", "acceleration", "scroll speed", "left-handed", "middle-click paste", "tap to click", "disable while typing", "drag lock", "middle-click by pressing both buttons"]
|
||||||
|
|
||||||
|
exec "$HOME/.config/quickshell/scripts/panama-action" settings-page mouse
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Generated by scripts/panama-settings-commands -- do not edit by hand.
|
||||||
|
# @vicinae.schemaVersion 1
|
||||||
|
# @vicinae.title Settings: Notifications & Focus
|
||||||
|
# @vicinae.mode silent
|
||||||
|
# @vicinae.icon ../../icons/hicolor/scalable/apps/panama-settings.svg
|
||||||
|
# @vicinae.description Open Notifications & Focus in Settings.
|
||||||
|
# @vicinae.keywords ["settings", "notification duration", "critical notification duration", "notification history", "visible banners"]
|
||||||
|
|
||||||
|
exec "$HOME/.config/quickshell/scripts/panama-action" settings-page notifications
|
||||||
+10
@@ -0,0 +1,10 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Generated by scripts/panama-settings-commands -- do not edit by hand.
|
||||||
|
# @vicinae.schemaVersion 1
|
||||||
|
# @vicinae.title Settings: Power & Lock
|
||||||
|
# @vicinae.mode silent
|
||||||
|
# @vicinae.icon ../../icons/hicolor/scalable/apps/panama-settings.svg
|
||||||
|
# @vicinae.description Open Power & Lock in Settings.
|
||||||
|
# @vicinae.keywords ["settings", "turn the screen off after", "lock the screen after", "suspend after", "lock before sleeping"]
|
||||||
|
|
||||||
|
exec "$HOME/.config/quickshell/scripts/panama-action" settings-page power
|
||||||
+10
@@ -0,0 +1,10 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Generated by scripts/panama-settings-commands -- do not edit by hand.
|
||||||
|
# @vicinae.schemaVersion 1
|
||||||
|
# @vicinae.title Settings: Privacy & Security
|
||||||
|
# @vicinae.mode silent
|
||||||
|
# @vicinae.icon ../../icons/hicolor/scalable/apps/panama-settings.svg
|
||||||
|
# @vicinae.description Open Privacy & Security in Settings.
|
||||||
|
# @vicinae.keywords ["settings", "saved passwords", "camera and microphone", "screen sharing", "file history and trash", "device security"]
|
||||||
|
|
||||||
|
exec "$HOME/.config/quickshell/scripts/panama-action" settings-page privacy
|
||||||
+10
@@ -0,0 +1,10 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Generated by scripts/panama-settings-commands -- do not edit by hand.
|
||||||
|
# @vicinae.schemaVersion 1
|
||||||
|
# @vicinae.title Settings: Region & Language
|
||||||
|
# @vicinae.mode silent
|
||||||
|
# @vicinae.icon ../../icons/hicolor/scalable/apps/panama-settings.svg
|
||||||
|
# @vicinae.description Open Region & Language in Settings.
|
||||||
|
# @vicinae.keywords ["settings", "language", "regional formats"]
|
||||||
|
|
||||||
|
exec "$HOME/.config/quickshell/scripts/panama-action" settings-page region
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Generated by scripts/panama-settings-commands -- do not edit by hand.
|
||||||
|
# @vicinae.schemaVersion 1
|
||||||
|
# @vicinae.title Settings: Screen Intelligence
|
||||||
|
# @vicinae.mode silent
|
||||||
|
# @vicinae.icon ../../icons/hicolor/scalable/apps/panama-settings.svg
|
||||||
|
# @vicinae.description Open Screen Intelligence in Settings.
|
||||||
|
# @vicinae.keywords ["settings", "screenshot folder", "recording folder", "recording encoder"]
|
||||||
|
|
||||||
|
exec "$HOME/.config/quickshell/scripts/panama-action" settings-page screen-intelligence
|
||||||
+10
@@ -0,0 +1,10 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Generated by scripts/panama-settings-commands -- do not edit by hand.
|
||||||
|
# @vicinae.schemaVersion 1
|
||||||
|
# @vicinae.title Settings: System Health
|
||||||
|
# @vicinae.mode silent
|
||||||
|
# @vicinae.icon ../../icons/hicolor/scalable/apps/panama-settings.svg
|
||||||
|
# @vicinae.description Open System Health in Settings.
|
||||||
|
# @vicinae.keywords ["settings", "system health", "copy health report"]
|
||||||
|
|
||||||
|
exec "$HOME/.config/quickshell/scripts/panama-action" settings-page services
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Generated by scripts/panama-settings-commands -- do not edit by hand.
|
||||||
|
# @vicinae.schemaVersion 1
|
||||||
|
# @vicinae.title Settings: Keyboard
|
||||||
|
# @vicinae.mode silent
|
||||||
|
# @vicinae.icon ../../icons/hicolor/scalable/apps/panama-settings.svg
|
||||||
|
# @vicinae.description Open Keyboard in Settings.
|
||||||
|
# @vicinae.keywords ["settings", "keyboard layout", "layout variant", "keyboard options", "num lock on login", "repeat delay", "repeat rate", "keyboard shortcuts"]
|
||||||
|
|
||||||
|
exec "$HOME/.config/quickshell/scripts/panama-action" settings-page shortcuts
|
||||||
+10
@@ -0,0 +1,10 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Generated by scripts/panama-settings-commands -- do not edit by hand.
|
||||||
|
# @vicinae.schemaVersion 1
|
||||||
|
# @vicinae.title Settings: Sound
|
||||||
|
# @vicinae.mode silent
|
||||||
|
# @vicinae.icon ../../icons/hicolor/scalable/apps/panama-settings.svg
|
||||||
|
# @vicinae.description Open Sound in Settings.
|
||||||
|
# @vicinae.keywords ["settings", "output volume", "input volume", "per-application volume", "event sounds"]
|
||||||
|
|
||||||
|
exec "$HOME/.config/quickshell/scripts/panama-action" settings-page sound
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# @vicinae.schemaVersion 1
|
# @vicinae.schemaVersion 1
|
||||||
# @vicinae.title Panama: Start Focus Session
|
# @vicinae.title Start Focus Session
|
||||||
# @vicinae.mode silent
|
# @vicinae.mode silent
|
||||||
# @vicinae.icon ../../icons/hicolor/scalable/apps/panama-settings.svg
|
# @vicinae.icon ../../icons/hicolor/scalable/apps/panama-settings.svg
|
||||||
# @vicinae.description Start the configured focus timer with DND and Caffeine.
|
# @vicinae.description Start the configured focus timer with DND and Caffeine.
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# @vicinae.schemaVersion 1
|
# @vicinae.schemaVersion 1
|
||||||
# @vicinae.title Panama: Toggle Caffeine
|
# @vicinae.title Toggle Caffeine
|
||||||
# @vicinae.mode silent
|
# @vicinae.mode silent
|
||||||
# @vicinae.icon ../../icons/hicolor/scalable/apps/panama-settings.svg
|
# @vicinae.icon ../../icons/hicolor/scalable/apps/panama-settings.svg
|
||||||
# @vicinae.description Keep the display awake and block automatic sleep.
|
# @vicinae.description Keep the display awake and block automatic sleep.
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# @vicinae.schemaVersion 1
|
# @vicinae.schemaVersion 1
|
||||||
# @vicinae.title Panama: Toggle Do Not Disturb
|
# @vicinae.title Toggle Do Not Disturb
|
||||||
# @vicinae.mode silent
|
# @vicinae.mode silent
|
||||||
# @vicinae.icon ../../icons/hicolor/scalable/apps/panama-settings.svg
|
# @vicinae.icon ../../icons/hicolor/scalable/apps/panama-settings.svg
|
||||||
# @vicinae.description Pause or resume notification banners, with OSD confirmation.
|
# @vicinae.description Pause or resume notification banners, with OSD confirmation.
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# @vicinae.schemaVersion 1
|
# @vicinae.schemaVersion 1
|
||||||
# @vicinae.title Panama: Toggle Microphone Mute
|
# @vicinae.title Toggle Microphone Mute
|
||||||
# @vicinae.mode silent
|
# @vicinae.mode silent
|
||||||
# @vicinae.icon ../../icons/hicolor/scalable/apps/panama-settings.svg
|
# @vicinae.icon ../../icons/hicolor/scalable/apps/panama-settings.svg
|
||||||
# @vicinae.description Mute or unmute the default microphone with OSD feedback.
|
# @vicinae.description Mute or unmute the default microphone with OSD feedback.
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# @vicinae.schemaVersion 1
|
# @vicinae.schemaVersion 1
|
||||||
# @vicinae.title Panama: Toggle Night Light
|
# @vicinae.title Toggle Night Light
|
||||||
# @vicinae.mode silent
|
# @vicinae.mode silent
|
||||||
# @vicinae.icon ../../icons/hicolor/scalable/apps/panama-settings.svg
|
# @vicinae.icon ../../icons/hicolor/scalable/apps/panama-settings.svg
|
||||||
# @vicinae.description Toggle the warm display color temperature.
|
# @vicinae.description Toggle the warm display color temperature.
|
||||||
|
|||||||
@@ -93,12 +93,20 @@ about each other, so finding a setting means opening Settings first.
|
|||||||
- Generator gets a `--check` staleness mode, matching `panama-settings-docs`.
|
- Generator gets a `--check` staleness mode, matching `panama-settings-docs`.
|
||||||
- Contract: every page has a command, every command resolves to a real page.
|
- Contract: every page has a command, every command resolves to a real page.
|
||||||
|
|
||||||
**Open question for Gabriel:** the existing launcher commands are titled
|
|
||||||
"Panama: Open Settings", which the debranding pass did not touch. Keep the prefix
|
|
||||||
so desktop commands group together in the launcher, or drop it to match the rest?
|
|
||||||
|
|
||||||
**Done when** the launcher is the fastest way to reach any setting.
|
**Done when** the launcher is the fastest way to reach any setting.
|
||||||
|
|
||||||
|
**Landed 2026-08-19.** The product prefix is gone from all eighteen hand-written
|
||||||
|
commands. The nineteen generated ones are titled "Settings: <page>" -- not
|
||||||
|
branding, which was the thing being dropped, but a qualifier: a bare page label
|
||||||
|
collides with the feature of the same name ("Screen Intelligence" is both a thing
|
||||||
|
you open and a page about it), and two commands sharing a title are
|
||||||
|
indistinguishable in a launcher.
|
||||||
|
|
||||||
|
Six pages turned out to have no search vocabulary at all -- sound, privacy,
|
||||||
|
region, accounts, home-phone, about -- because their contents come from the
|
||||||
|
system rather than our schema. That was an in-app search gap too: "volume" found
|
||||||
|
nothing in Settings either. They now carry entries, so both surfaces improved.
|
||||||
|
|
||||||
## Phase 5 — Keychain and secrets (medium, security-sensitive)
|
## Phase 5 — Keychain and secrets (medium, security-sensitive)
|
||||||
|
|
||||||
`panama-keyring` knows whether the keyring is locked and can unlock it. Nothing
|
`panama-keyring` knows whether the keyring is locked and can unlock it. Nothing
|
||||||
|
|||||||
@@ -38,6 +38,24 @@ declare -A expected=(
|
|||||||
[restart-shell.sh]=restart-shell
|
[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"
|
mkdir -p "$work/home/.config/quickshell/scripts"
|
||||||
cat >"$work/home/.config/quickshell/scripts/panama-action" <<'EOF'
|
cat >"$work/home/.config/quickshell/scripts/panama-action" <<'EOF'
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
@@ -60,7 +78,11 @@ for script_name in "${!expected[@]}"; do
|
|||||||
|| fail "$script_name is rejected by Vicinae"
|
|| fail "$script_name is rejected by Vicinae"
|
||||||
|
|
||||||
title="$(sed -n 's/^# @vicinae.title //p' "$script")"
|
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"
|
[[ -z ${seen_titles[$title]+x} ]] || fail "duplicate launcher title: $title"
|
||||||
seen_titles[$title]=1
|
seen_titles[$title]=1
|
||||||
|
|
||||||
@@ -74,7 +96,7 @@ for script_name in "${!expected[@]}"; do
|
|||||||
|| fail "$script_name does not use the Panama application identity"
|
|| fail "$script_name does not use the Panama application identity"
|
||||||
|
|
||||||
if [[ $script_name == check-system-health.sh ]]; then
|
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"
|
|| fail "health command has the wrong title: $title"
|
||||||
grep -Fxq '# @vicinae.schemaVersion 1' "$script" \
|
grep -Fxq '# @vicinae.schemaVersion 1' "$script" \
|
||||||
|| fail 'health command does not use schema version 1'
|
|| fail 'health command does not use schema version 1'
|
||||||
|
|||||||
Reference in New Issue
Block a user