From 6377bfb8fdfc6f7a89dcdbb941bc660db61f0f66 Mon Sep 17 00:00:00 2001 From: Gabriel Brown Date: Tue, 18 Aug 2026 00:51:10 -0400 Subject: [PATCH] Route the Applications page and add its settings Wires the schema entries and routing the codex agent needs for default applications, weather, vitals refresh, notification timing, and capture, so its pages can be written against keys that already exist. Capture directories and encoder arguments are enums rather than free text. Both are handed to a recorder process, and a settings page has no reason to expose an arbitrary string there. ApplicationsPage.qml is a placeholder so the page id can be routed, registered, and searchable before the real page lands. It is owned by the other agent and expected to be replaced wholesale. Claude-Session: https://claude.ai/code/session_01BRvzt4H8XXLPVH5MyYdk9L --- .../quickshell/config/PreferenceSchema.qml | 87 +++++++++++++++++++ .../modules/settings/ApplicationsPage.qml | 19 ++++ .../modules/settings/SettingsShell.qml | 2 + .../modules/settings/SettingsSidebar.qml | 1 + config/dot/quickshell/modules/settings/qmldir | 1 + .../quickshell/services/SettingsSearch.qml | 2 +- config/dot/quickshell/services/ShellState.qml | 2 +- 7 files changed, 112 insertions(+), 2 deletions(-) create mode 100644 config/dot/quickshell/modules/settings/ApplicationsPage.qml diff --git a/config/dot/quickshell/config/PreferenceSchema.qml b/config/dot/quickshell/config/PreferenceSchema.qml index 473ea84..4270e1a 100644 --- a/config/dot/quickshell/config/PreferenceSchema.qml +++ b/config/dot/quickshell/config/PreferenceSchema.qml @@ -378,6 +378,93 @@ Singleton { detail: "Scales interface text everywhere; 1.00 is the design size" }, + // ── Weather ───────────────────────────────────────────────────────── + { + key: "temperatureUnit", type: "enum", def: "fahrenheit", group: "weather", + label: "Temperature unit", + detail: "Choose Fahrenheit or Celsius for the weather card", + options: [ + { value: "fahrenheit", label: "Fahrenheit" }, + { value: "celsius", label: "Celsius" } + ] + }, + { + key: "weatherRefreshMinutes", type: "int", def: 20, min: 5, max: 120, step: 5, + unit: "min", group: "weather", + label: "Weather refresh", + detail: "How often Panama updates the current conditions" + }, + + // ── Vitals refresh ────────────────────────────────────────────────── + { + key: "vitalsIntervalMs", type: "int", def: 2000, min: 500, max: 10000, step: 500, + unit: "ms", group: "vitals", + label: "Vitals refresh", + detail: "How often processor, memory, and graphics usage update" + }, + + // ── Notifications ─────────────────────────────────────────────────── + { + key: "notificationTimeoutMs", type: "int", def: 5000, min: 1000, max: 30000, step: 500, + unit: "ms", group: "notifications", + label: "Notification duration", + detail: "How long ordinary notification banners remain visible" + }, + { + key: "notificationTimeoutCriticalMs", type: "int", def: 0, min: 0, max: 60000, step: 1000, + unit: "ms", group: "notifications", + label: "Critical notification duration", + detail: "Zero keeps critical notification banners visible until dismissed" + }, + { + key: "notificationHistoryLimit", type: "int", def: 100, min: 10, max: 500, step: 10, + group: "notifications", + label: "Notification history", + detail: "Maximum notifications retained in the notification center" + }, + { + key: "maxVisibleToasts", type: "int", def: 4, min: 1, max: 8, step: 1, + group: "notifications", + label: "Visible banners", + detail: "Maximum notification banners shown at once" + }, + + // ── Capture ───────────────────────────────────────────────────────── + // Directories and encoder arguments are enums rather than free text: + // both are handed to a recorder process, and an arbitrary string there + // is a much larger surface than a settings page needs to expose. + { + key: "screenshotDir", type: "enum", def: "Pictures/Screenshots", group: "capture", + label: "Screenshot folder", + detail: "Folder under your home directory for screenshots", + options: [ + { value: "Pictures/Screenshots", label: "Pictures / Screenshots" }, + { value: "Pictures", label: "Pictures" }, + { value: "Desktop", label: "Desktop" } + ] + }, + { + key: "recordingDir", type: "enum", def: "Videos/Recordings", group: "capture", + label: "Recording folder", + detail: "Folder under your home directory for screen recordings", + options: [ + { value: "Videos/Recordings", label: "Videos / Recordings" }, + { value: "Videos", label: "Videos" }, + { value: "Desktop", label: "Desktop" } + ] + }, + { + key: "recorderArgs", type: "enum", def: "-c h264_vaapi -d /dev/dri/renderD128", + group: "capture", + label: "Recording encoder", + detail: "Hardware encoding keeps recording off the processor while gaming", + options: [ + { value: "-c h264_vaapi -d /dev/dri/renderD128", label: "VAAPI H.264" }, + { value: "-c hevc_vaapi -d /dev/dri/renderD128", label: "VAAPI HEVC" }, + { value: "-c libx264", label: "CPU x264" } + ] + }, + // ── Internal ──────────────────────────────────────────────────────── { key: "lastPage", type: "string", def: "home", group: "internal", diff --git a/config/dot/quickshell/modules/settings/ApplicationsPage.qml b/config/dot/quickshell/modules/settings/ApplicationsPage.qml new file mode 100644 index 0000000..d20d694 --- /dev/null +++ b/config/dot/quickshell/modules/settings/ApplicationsPage.qml @@ -0,0 +1,19 @@ +// Applications — PLACEHOLDER. +// +// Owned by the codex agent, which is building default-application handling and +// the autostart list. This stub exists only so the page id can be routed, +// registered, and searchable before that work lands; it is expected to be +// replaced wholesale rather than edited. + +import QtQuick +import qs.config + +SettingsPage { + title: "Applications" + lede: "Default applications and what starts with your session." + + SettingsCard { + title: "Being built" + subtitle: "Default browser, mail, files, and terminal, plus the autostart list, are on their way." + } +} diff --git a/config/dot/quickshell/modules/settings/SettingsShell.qml b/config/dot/quickshell/modules/settings/SettingsShell.qml index 81e54a6..d1ef625 100644 --- a/config/dot/quickshell/modules/settings/SettingsShell.qml +++ b/config/dot/quickshell/modules/settings/SettingsShell.qml @@ -102,6 +102,7 @@ Rectangle { case "accessibility": return accessibilityPage; case "power": return powerPage; case "datetime": return dateTimePage; + case "applications": return applicationsPage; case "services": return servicesPage; case "about": return aboutPage; default: return homePage; @@ -139,6 +140,7 @@ Rectangle { } Component { id: homePage; HomePage {} } + Component { id: applicationsPage; ApplicationsPage {} } Component { id: accessibilityPage; AccessibilityPage {} } Component { id: powerPage; PowerPage {} } Component { id: dateTimePage; DateTimePage {} } diff --git a/config/dot/quickshell/modules/settings/SettingsSidebar.qml b/config/dot/quickshell/modules/settings/SettingsSidebar.qml index 0f1d099..02ffacf 100644 --- a/config/dot/quickshell/modules/settings/SettingsSidebar.qml +++ b/config/dot/quickshell/modules/settings/SettingsSidebar.qml @@ -30,6 +30,7 @@ Rectangle { { page: "accessibility", label: "Accessibility", icon: "\u{F0208}" }, { page: "power", label: "Power & Lock", icon: "\u{F0425}" }, { page: "datetime", label: "Date & Time", icon: "\u{F0954}" }, + { page: "applications", label: "Applications", icon: "\u{F003B}" }, { page: "services", label: "Startup & Services", icon: "\u{F0493}" }, { page: "about", label: "About Panama", icon: "\u{F02FD}" } ] diff --git a/config/dot/quickshell/modules/settings/qmldir b/config/dot/quickshell/modules/settings/qmldir index 4cdb5c6..e6634d7 100644 --- a/config/dot/quickshell/modules/settings/qmldir +++ b/config/dot/quickshell/modules/settings/qmldir @@ -31,3 +31,4 @@ PowerPage 1.0 PowerPage.qml DateTimePage 1.0 DateTimePage.qml AccessibilityPage 1.0 AccessibilityPage.qml WallpaperPicker 1.0 WallpaperPicker.qml +ApplicationsPage 1.0 ApplicationsPage.qml diff --git a/config/dot/quickshell/services/SettingsSearch.qml b/config/dot/quickshell/services/SettingsSearch.qml index eaa30a9..e45028f 100644 --- a/config/dot/quickshell/services/SettingsSearch.qml +++ b/config/dot/quickshell/services/SettingsSearch.qml @@ -46,7 +46,7 @@ Singleton { { label: "Wi-Fi", 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: "Default applications", detail: "Browser, mail, files", page: "services" }, + { label: "Default applications", detail: "Browser, mail, files", page: "applications" }, { 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" } ] diff --git a/config/dot/quickshell/services/ShellState.qml b/config/dot/quickshell/services/ShellState.qml index 578b7f4..28bb534 100644 --- a/config/dot/quickshell/services/ShellState.qml +++ b/config/dot/quickshell/services/ShellState.qml @@ -92,7 +92,7 @@ Singleton { } function openSettings(page: string): void { - const allowed = ["home", "appearance", "displays", "connectivity", "home-phone", "desktop", "sound", "notifications", "screen-intelligence", "shortcuts", "accessibility", "power", "datetime", "services", "about"]; + const allowed = ["home", "appearance", "displays", "connectivity", "home-phone", "desktop", "sound", "notifications", "screen-intelligence", "shortcuts", "accessibility", "power", "datetime", "applications", "services", "about"]; root.settingsPage = allowed.indexOf(page) >= 0 ? page : "home"; DesktopPreferences.set("lastPage", root.settingsPage); root.settingsOpen = true;