More GNOME Settings parity.
Region & Language is new. The locale is localectl's, and Panama stores no
copy of it -- there is exactly one system locale, so a preference here
would be a second source of truth that drifts the moment anything else
changes it. Codes are resolved against iso-codes into "Portuguese
(Brazil)" the way GNOME does, with the code kept visible because it is
what actually gets written and someone choosing between two Spanish
variants needs to see it. Changing it is privileged and only applies to
programs started afterwards, so the page says a sign-out is needed
rather than claiming the new language is in use.
The service is called SystemLocale, not Locale: QML has a built-in
Locale value type that silently shadows a singleton of that name, and
every binding then reads properties off the wrong thing. The page
rendered empty with nothing but "cannot read property of undefined" to
explain it.
About now answers what GNOME's About answers -- model, processor,
memory, disk, OS, kernel, windowing system -- where before it listed
only Panama's own component versions. Graphics is joined from
GraphicsDevices rather than read again, because two readouts of the same
hardware are two things that can disagree. Placeholder DMI strings
("To Be Filled By O.E.M.") are filtered out, and unreadable facts are
omitted rather than shown as "Unknown".
The Fedora hand-off card was one row listing five subjects that opened
the network panel regardless. Naming a panel and then not opening it
reads as a broken button rather than a deliberate hand-off. Each subject
now opens the panel that owns it, and openGnomePanel takes an optional
subpage so "Users" reaches System's users page the way GNOME's own
desktop entry does, instead of dropping the user on System's front page.
Printers and online accounts are not repeated here; they stay with the
network hardware on Network & Devices.
One bug this surfaced, caught by the hyprland write contract: the Lua
config key and the hyprctl option name genuinely differ for tap to
click. hl.config wants input.touchpad.tap_to_click; getoption answers to
input:touchpad:tap-to-click. Either spelling used for both fails -- a
hyphen is not a Lua identifier, and the underscored name is not a known
option -- which is what the schema's two separate fields are for.
Claude-Session: https://claude.ai/code/session_01BRvzt4H8XXLPVH5MyYdk9L
107 lines
3.0 KiB
QML
107 lines
3.0 KiB
QML
import QtQuick
|
|
import Quickshell
|
|
import qs.config
|
|
import qs.services
|
|
|
|
SettingsPage {
|
|
id: root
|
|
|
|
title: "About Panama"
|
|
lede: "A curated Hyprland desktop built around focus, speed, and good taste."
|
|
|
|
Component.onCompleted: {
|
|
if (!MachineInfo.scanned)
|
|
MachineInfo.refresh();
|
|
if (GraphicsDevices.devices.length === 0)
|
|
GraphicsDevices.refresh();
|
|
}
|
|
|
|
SettingsCard {
|
|
title: "Panama Desktop"
|
|
subtitle: "Tokyo Night Moon · Prism glass · native tiling"
|
|
|
|
TextRow {
|
|
label: "Hyprland"
|
|
value: SystemSettings.hyprlandVersion || "Detecting…"
|
|
}
|
|
TextRow {
|
|
label: "Quickshell"
|
|
value: SystemSettings.quickshellVersion
|
|
}
|
|
TextRow {
|
|
label: "Display"
|
|
value: SystemSettings.monitorName || "Detecting…"
|
|
}
|
|
TextRow {
|
|
label: "Configuration"
|
|
detail: Quickshell.shellDir
|
|
value: "Local"
|
|
divider: false
|
|
}
|
|
}
|
|
|
|
// What GNOME's About panel answers and this page did not: what am I running
|
|
// on. The rows come from MachineInfo, except graphics, which is joined from
|
|
// GraphicsDevices rather than read a second time -- two readouts of the same
|
|
// hardware are two things that can disagree.
|
|
SettingsCard {
|
|
title: "This machine"
|
|
subtitle: "Hardware and system, as the kernel reports it."
|
|
|
|
Repeater {
|
|
model: MachineInfo.facts
|
|
|
|
TextRow {
|
|
id: machineRow
|
|
required property var modelData
|
|
required property int index
|
|
|
|
label: machineRow.modelData.label
|
|
value: machineRow.modelData.value
|
|
}
|
|
}
|
|
|
|
Repeater {
|
|
model: GraphicsDevices.devices
|
|
|
|
TextRow {
|
|
id: gpuRow
|
|
required property var modelData
|
|
required property int index
|
|
|
|
label: GraphicsDevices.devices.length > 1
|
|
? "Graphics " + (gpuRow.index + 1)
|
|
: "Graphics"
|
|
value: gpuRow.modelData.name
|
|
divider: gpuRow.index < GraphicsDevices.devices.length - 1
|
|
}
|
|
}
|
|
|
|
TextRow {
|
|
visible: MachineInfo.scanned && MachineInfo.facts.length === 0
|
|
label: "Hardware"
|
|
detail: "The system did not report anything readable"
|
|
value: "Unavailable"
|
|
divider: false
|
|
}
|
|
}
|
|
|
|
SettingsCard {
|
|
title: "Design principles"
|
|
|
|
TextRow {
|
|
label: "Curated by default"
|
|
detail: "Strong choices instead of an incoherent matrix of switches"
|
|
}
|
|
TextRow {
|
|
label: "Quiet while idle"
|
|
detail: "No continuous decorative repaint loops"
|
|
}
|
|
TextRow {
|
|
label: "Real system boundaries"
|
|
detail: "Every control either works or clearly hands off to its owner"
|
|
divider: false
|
|
}
|
|
}
|
|
}
|