Convert British spellings to American across the repo
colour -> color, behaviour -> behavior, centre -> center, favourite -> favorite, and about twenty other pairs, applied consistently across comments, docs, error/UI copy, and a handful of QML identifiers that used the British spelling as their actual name: SystemSettings' serialiseValue/serialiseTable/normaliseGradient, Displays' normaliseModes, Wallpaper's normalisePolicy, SettingsBackup's serialiseHomeState, DateTime's ntpSynchronised property, Clipboard's _normalise helper, and ShortcutCapture's cancelled signal (with its onCancelled handler in ShortcutsPage.qml). Every call site and the two tests that assert on the literal source text (settings-ownership and settings-backup-live contracts) were updated in lockstep. Left untouched: config/dot/espanso/match/packages/misspell-en/ is a vendored third-party autocorrect dictionary -- its entries are typo corrections, not our prose, and rewriting them would fight the package's own purpose (and any future re-sync from upstream). The already-American `favorites` property (Home page pinned accessories) was never actually misspelled -- only nearby comments and error strings said "favourites" -- so no data migration was needed there. Claude-Session: https://claude.ai/code/session_01E6TJUAh41HaP25MVHWkhRZ
This commit is contained in:
@@ -90,7 +90,7 @@
|
||||
- Produces: `ShellState.openOverview(workspaceId)`, filmstrip selection, large workspace preview, cross-workspace window search
|
||||
|
||||
- [x] Add requested-overview-workspace state without coupling `ShellState` to the focus service.
|
||||
- [x] Replace the centred equal-card row with a top filmstrip and a large selected-workspace preview.
|
||||
- [x] Replace the centered equal-card row with a top filmstrip and a large selected-workspace preview.
|
||||
- [x] Keep the trailing dynamic-workspace card and one-shot thumbnail capture behavior.
|
||||
- [x] Add wheel navigation over the strip and keep the overview mapped while switching workspaces.
|
||||
- [x] Add a keyboard-focused search field and filtered cross-workspace window results.
|
||||
|
||||
@@ -328,7 +328,7 @@ FileView {
|
||||
printErrors: false
|
||||
atomicWrites: true
|
||||
onSaved: root.saveError = ""
|
||||
onSaveFailed: error => root.saveError = "Could not save Home favourites."
|
||||
onSaveFailed: error => root.saveError = "Could not save Home favorites."
|
||||
JsonAdapter {
|
||||
id: values
|
||||
property bool initialized: false
|
||||
|
||||
@@ -15,10 +15,10 @@ holds the shipped defaults; one JSON file is the truth both sides read.
|
||||
- Verify every write by reading the value back (`hyprctl getoption`), never by
|
||||
trusting an exit code.
|
||||
- No UI-supplied string is interpolated into `eval`, a shell command, or a config
|
||||
value. Numbers range-checked, choices allow-listed, colours hex-validated.
|
||||
value. Numbers range-checked, choices allow-listed, colors hex-validated.
|
||||
- A missing or malformed `settings.json` degrades to shipped defaults. The Lua
|
||||
read is `pcall`-wrapped so it can never take down the compositor config.
|
||||
- Tokyo Night Moon and Prism stay the only identity; customisation adjusts its
|
||||
- Tokyo Night Moon and Prism stay the only identity; customization adjusts its
|
||||
parameters, it does not replace it.
|
||||
- Motion stays event-driven at every setting. No idle repaint.
|
||||
- Do not restart the running Quickshell process during development; it hot-reloads.
|
||||
@@ -30,7 +30,7 @@ holds the shipped defaults; one JSON file is the truth both sides read.
|
||||
## Stage 0 — Stop the lying (ship first, standalone)
|
||||
|
||||
The display-policy toggles report success while doing nothing. This is a
|
||||
correctness bug in shipped behaviour and does not depend on any of the
|
||||
correctness bug in shipped behavior and does not depend on any of the
|
||||
architecture below.
|
||||
|
||||
**Files:** Modify `config/dot/quickshell/services/SystemSettings.qml`;
|
||||
@@ -40,7 +40,7 @@ Test `tests/quickshell/settings-hyprland-write-contract.sh`
|
||||
asserts via `hyprctl getoption` that the compositor value actually changed —
|
||||
and that a rejected write leaves `lastError` non-empty.
|
||||
- [x] Run it; confirm it fails against the current `hyprctl keyword` implementation.
|
||||
- [x] Add a single `applyOptions(values)` boundary that serialises validated values
|
||||
- [x] Add a single `applyOptions(values)` boundary that serializes validated values
|
||||
into `hl.config{}` and runs them through `hyprctl eval`.
|
||||
- [x] Route `setAutoHdr`, `setVrrPolicy`, and `setDirectScanoutPolicy` through it.
|
||||
- [x] Treat "wrote it back and read it back equal" as the only success condition;
|
||||
@@ -134,9 +134,9 @@ Test `tests/hypr/prefs-fallback-contract.sh`
|
||||
- [x] Implement a dependency-free JSON reader exposing `prefs.get(key, fallback)`,
|
||||
`pcall`-wrapped, reading `$XDG_CONFIG_HOME/panama/settings.json`.
|
||||
- [x] Require it first in `hyprland.lua`, before `looks`.
|
||||
- [x] Convert the appearance and behaviour literals in `looks.lua` and `input.lua`
|
||||
- [x] Convert the appearance and behavior literals in `looks.lua` and `input.lua`
|
||||
to `prefs.get("<key>", <current literal>)`, keeping every current value as
|
||||
the fallback so shipped behaviour is byte-identical.
|
||||
the fallback so shipped behavior is byte-identical.
|
||||
- [x] Extend `PreferenceSchema.qml` with the Hyprland-owned keys, each carrying
|
||||
the `hl.config` path it maps to.
|
||||
- [x] Have `SystemSettings` derive its `eval` payload from that mapping, so a new
|
||||
@@ -208,7 +208,7 @@ Modify all eleven `*Page.qml`; Test `tests/quickshell/settings-rows-contract.sh`
|
||||
- [ ] Move the remaining pages (Home, Displays, Connectivity, Sound,
|
||||
Notifications, Screen Intelligence, Services, About) onto `SettingsPage`.
|
||||
|
||||
**Exit criteria:** no shipped behaviour value is reachable only by editing a file.
|
||||
**Exit criteria:** no shipped behavior value is reachable only by editing a file.
|
||||
|
||||
**Landed (first pass).** `SettingsPage` plus `ToggleRow`, `SliderRow`,
|
||||
`ChoiceRow`, `ActionRow`, and `TextRow`. A row names a schema key and needs
|
||||
@@ -218,7 +218,7 @@ explanation, bounds, and unit from the schema, and writes through
|
||||
apply-and-verify and local keys straight to the store. Rows never need to know
|
||||
which kind they hold.
|
||||
|
||||
`DesktopPreview` is the direction-B centrepiece: two tiled windows drawn at the
|
||||
`DesktopPreview` is the direction-B centerpiece: two tiled windows drawn at the
|
||||
settings actually in effect, scaled by the ratio between the preview's width and
|
||||
the real monitor's, so a 10px gap on a 4500px display looks as small as it is.
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
|
||||
|
||||
**Goal:** Expand Panama Quick Settings into the approved Control Center with secure Home Assistant favourites and capability-aware iPhone continuity.
|
||||
**Goal:** Expand Panama Quick Settings into the approved Control Center with secure Home Assistant favorites and capability-aware iPhone continuity.
|
||||
|
||||
**Architecture:** Two executable Python helpers own the external boundaries: KDE Connect CLI/D-Bus and the Home Assistant REST API/credential lookup. Quickshell singletons normalize those JSON contracts for focused Home and Phone components inside the existing Quick Settings window; Ongoing and Signal Glass consume transfer lifecycle without duplicating state.
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
- Only one of Wi-Fi, Bluetooth, sink, source, Home, and Phone may be expanded at once.
|
||||
- Never print Home Assistant tokens, Authorization headers, clipboard text, certificate fingerprints, IP addresses, response bodies, or full local file paths.
|
||||
- Home Assistant tokens remain in the gitignored environment file or Secret Service; never write one into tracked content.
|
||||
- Home Assistant toggle commands accept only entity IDs from the configured favourites snapshot.
|
||||
- Home Assistant toggle commands accept only entity IDs from the configured favorites snapshot.
|
||||
- KDE Connect actions derive from advertised plugins; no fake battery or remote-input control is allowed.
|
||||
- Every Home toggle, file chooser, file send, clipboard send, and Ring action requires a user click.
|
||||
- Home toggle success, phone Ring, and clipboard success remain globally quiet.
|
||||
@@ -49,8 +49,8 @@
|
||||
- `config/dot/quickshell/modules/quicksettings/QuickSettings.qml` — tighter top attachment and service preparation.
|
||||
- `config/dot/quickshell/modules/quicksettings/QuickSettingsPanel.qml` — expanded composition and exclusive section routing.
|
||||
- `config/dot/quickshell/modules/quicksettings/ControlSectionHeader.qml` — quiet section label and optional trailing action.
|
||||
- `config/dot/quickshell/modules/quicksettings/HomeControls.qml` — four favourites, expanded configured list, loading/stale/failure states.
|
||||
- `config/dot/quickshell/modules/quicksettings/HomeTile.qml` — one domain-aware favourite tile.
|
||||
- `config/dot/quickshell/modules/quicksettings/HomeControls.qml` — four favorites, expanded configured list, loading/stale/failure states.
|
||||
- `config/dot/quickshell/modules/quicksettings/HomeTile.qml` — one domain-aware favorite tile.
|
||||
- `config/dot/quickshell/modules/quicksettings/PhoneControls.qml` — approved compact Continuity Card.
|
||||
- `config/dot/quickshell/modules/quicksettings/RecentExchange.qml` — one session-local completed transfer row.
|
||||
- `config/dot/quickshell/modules/bar/StatusCluster.qml` — reachable-phone glyph inside the existing click target.
|
||||
@@ -340,7 +340,7 @@ Expected: all tests PASS and the fake server records no unexpected route.
|
||||
- [ ] **Step 5: Add and run the redacted live contract**
|
||||
|
||||
The contract runs `probe` and `snapshot`, validates the schema, and prints only
|
||||
`PASS (configured=true, N favourites; contents redacted)`. It must pipe JSON to
|
||||
`PASS (configured=true, N favorites; contents redacted)`. It must pipe JSON to
|
||||
`jq` without printing friendly names, entity IDs, URL, or raw errors.
|
||||
|
||||
- [ ] **Step 6: Commit Task 2**
|
||||
@@ -599,7 +599,7 @@ git commit -m "Build the Panama Control Center"
|
||||
|
||||
- [ ] **Step 1: Update desktop documentation**
|
||||
|
||||
Mark Home Assistant favourites and KDE Connect phone integration Live. Document
|
||||
Mark Home Assistant favorites and KDE Connect phone integration Live. Document
|
||||
the 430-pixel Control Center, two-pixel bar attachment, environment/keyring
|
||||
configuration precedence, BlueBubbles messaging boundary, and current iOS
|
||||
capabilities. Remove those two items from `System UI still worth adding` while
|
||||
@@ -628,7 +628,7 @@ inspect only the new process's journal for QML errors or warnings.
|
||||
- [ ] **Step 4: Perform read-only live checks**
|
||||
|
||||
Verify the Control Center reports one reachable phone with the confirmed action
|
||||
names and seven configured Home favourites without printing identities. Open
|
||||
names and seven configured Home favorites without printing identities. Open
|
||||
and close the panel, expand Home and Phone, and confirm Wi-Fi, Bluetooth, audio,
|
||||
Focus, Caffeine, Night Light, settings, power, Escape, and outside-click remain
|
||||
usable. Do not trigger an external-device action.
|
||||
|
||||
@@ -503,7 +503,7 @@ Accounts destinations while this feature was in review. Merge commit `4ef2f01`
|
||||
preserves those routes and the newer Settings navigation architecture, keeps
|
||||
the stable `services` route rendered by `HealthPage`, and leaves
|
||||
`ServicesPage.qml` retired. Its useful Fedora handoffs for Users, Sharing,
|
||||
Colour profiles, and Digital wellbeing now live in the boundary-last System
|
||||
Color profiles, and Digital wellbeing now live in the boundary-last System
|
||||
Health card alongside the existing network handoff, with focused static and
|
||||
isolated runtime coverage.
|
||||
|
||||
|
||||
@@ -16,12 +16,12 @@ Panama gains a polished focus-session surface and a GNOME-like workspace overvie
|
||||
|
||||
## Signal Glass surface
|
||||
|
||||
- The main capsule is a top-centred blurred glass surface below the bar, carrying Panama's Prism edge, Tokyo Night Moon palette, and event-driven open/close motion.
|
||||
- The main capsule is a top-centered blurred glass surface below the bar, carrying Panama's Prism edge, Tokyo Night Moon palette, and event-driven open/close motion.
|
||||
- Its primary row shows the focus icon, workspace label, remaining time, and whether DND and Caffeine are being held.
|
||||
- Clicking the primary row activates the bound workspace and dismisses the capsule without ending the session.
|
||||
- The action row contains Pause or Resume, Workspace, and End.
|
||||
- Workspace opens the Continuum overview with the session's bound workspace selected.
|
||||
- A labelled close button hides the capsule while the session continues.
|
||||
- A labeled close button hides the capsule while the session continues.
|
||||
- While a session exists, a compact bar indicator remains visible. Clicking it reopens the capsule, so dismissal never makes the running session undiscoverable.
|
||||
- No focus UI animates while idle. The only periodic update is the once-per-second remaining-time text while a session is running and not paused.
|
||||
|
||||
|
||||
@@ -107,7 +107,7 @@ Devices and Desktop & Dock. Its page contains three cards.
|
||||
|
||||
1. **Home Assistant** shows connection health, discovered-light count, Refresh,
|
||||
and Open Home Assistant.
|
||||
2. **Control Center favourites** shows selected accessories as a two-column
|
||||
2. **Control Center favorites** shows selected accessories as a two-column
|
||||
card shelf. Each item exposes a drag handle, editable alias, source friendly
|
||||
name, and Remove action. Dragging reorders the list; the first four are
|
||||
explicitly marked as the resting Control Center shelf.
|
||||
|
||||
@@ -55,7 +55,7 @@ $ hyprctl getoption decoration:rounding -j → "int": 4
|
||||
`eval` is also strictly more capable than `keyword` — it can set *any* config
|
||||
value, including gradients, animation curves, and nested tables. It executes
|
||||
arbitrary Lua, so the existing "never interpolate UI text into a command" rule
|
||||
must extend to it: values are validated and serialised numerically, never
|
||||
must extend to it: values are validated and serialized numerically, never
|
||||
concatenated from user input.
|
||||
|
||||
### Finding 2: three disconnected sources of truth for the same three values
|
||||
@@ -206,7 +206,7 @@ promote the ~40 hardcoded `Settings.qml` values into real controls, and give
|
||||
Appearance genuine content: accent pair, window rounding, gaps, border size,
|
||||
blur, animation speed, bar height, font scale, and wallpaper.
|
||||
|
||||
Appearance customisation stays inside the design language. The user picks how much
|
||||
Appearance customization stays inside the design language. The user picks how much
|
||||
of it there is — spacing, softness, motion — not a free-form palette editor that
|
||||
would let the Prism identity be dismantled by accident.
|
||||
|
||||
@@ -223,13 +223,13 @@ defaults, and Settings applies them live with `hyprctl eval`.
|
||||
|
||||
- No UI-supplied string is ever interpolated into an `eval`, a shell command, or
|
||||
a config value. Numbers are range-checked; choices are matched against an
|
||||
allow-list; colours are validated as hex before serialisation.
|
||||
allow-list; colors are validated as hex before serialization.
|
||||
- A malformed or absent `settings.json` must degrade to shipped defaults, never
|
||||
to a broken compositor.
|
||||
- `hyprctl keyword` is banned in this codebase. It exits 0 without acting.
|
||||
- Every write path must be observably verified — read the value back rather than
|
||||
trusting an exit code. Finding 1 exists because an exit code was trusted.
|
||||
- Tokyo Night Moon and Prism remain the only visual identity. Customisation
|
||||
- Tokyo Night Moon and Prism remain the only visual identity. Customization
|
||||
adjusts its parameters, it does not replace it.
|
||||
- Motion stays event-driven. No idle repaint, at any setting.
|
||||
- GNOME keeps ownership of hardware, accounts, printers, and users.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
Panama will expand the existing top-right Quick Settings popover into a complete
|
||||
Control Center. Wi-Fi, Bluetooth, Focus, Caffeine, Night Light, audio, account,
|
||||
settings, and power remain in place. Home Assistant favourites and lightweight
|
||||
settings, and power remain in place. Home Assistant favorites and lightweight
|
||||
iPhone continuity join that same surface instead of creating separate windows
|
||||
or permanent bar widgets.
|
||||
|
||||
@@ -18,7 +18,7 @@ the paired iPhone exposes only a useful subset of KDE Connect.
|
||||
|
||||
- Make the top-right popover feel like a complete desktop Control Center rather
|
||||
than a small collection of connectivity toggles.
|
||||
- Toggle the existing Home Assistant favourites without opening a browser.
|
||||
- Toggle the existing Home Assistant favorites without opening a browser.
|
||||
- Preserve the user's seven enabled Home Assistant lights and use Home
|
||||
Assistant friendly names and live states.
|
||||
- Show the paired iPhone's real reachability and expose Send File, Send
|
||||
@@ -67,7 +67,7 @@ The resting panel is ordered by frequency and scope:
|
||||
|
||||
1. Wi-Fi, Bluetooth, Caffeine, and Night Light toggle grid.
|
||||
2. Focus and audio controls.
|
||||
3. Home favourites.
|
||||
3. Home favorites.
|
||||
4. Phone continuity.
|
||||
5. User, Panama Settings, and power footer.
|
||||
|
||||
@@ -83,7 +83,7 @@ panel remains predictable.
|
||||
|
||||
## Home section
|
||||
|
||||
The resting Home card shows the first four enabled favourites in their saved
|
||||
The resting Home card shows the first four enabled favorites in their saved
|
||||
order. Each tile contains a domain-appropriate glyph, a friendly name, and a
|
||||
plain state such as `On`, `Off`, or `Unavailable`. Enabled lights use a quiet
|
||||
amber light treatment; Panama blue remains reserved for desktop selection and
|
||||
@@ -96,7 +96,7 @@ without a toast or Signal Glass event. A failure restores the last known state
|
||||
and displays a concise inline error inside the Home section.
|
||||
|
||||
The trailing `N accessories` action expands a full list of configured
|
||||
favourites inside the Control Center. No unconfigured Home Assistant entity is
|
||||
favorites inside the Control Center. No unconfigured Home Assistant entity is
|
||||
shown. An `Open Home Assistant` action launches the configured base URL.
|
||||
|
||||
If Home Assistant is unreachable, Panama retains the last good states for the
|
||||
@@ -165,7 +165,7 @@ reliable byte progress for this device.
|
||||
Add `scripts/panama-home-assistant`, a small local bridge with four commands:
|
||||
|
||||
- `probe` reports configuration and API availability without entity details;
|
||||
- `snapshot` returns only configured favourites and normalized state;
|
||||
- `snapshot` returns only configured favorites and normalized state;
|
||||
- `toggle ENTITY_ID` calls the Home Assistant service for an allow-listed
|
||||
configured entity; and
|
||||
- `open` launches the configured Home Assistant URL.
|
||||
@@ -212,7 +212,7 @@ outside-click behavior remain intact.
|
||||
- Helpers never echo tokens, Authorization headers, clipboard text, entity
|
||||
response bodies, IP addresses, or full local file paths to logs.
|
||||
- Home Assistant commands accept only entity IDs present in the configured
|
||||
favourites snapshot.
|
||||
favorites snapshot.
|
||||
- KDE Connect device IDs and file paths are passed as separate process
|
||||
arguments, never interpolated into a shell command.
|
||||
- A user click is required for every Home toggle, phone ring, clipboard send,
|
||||
@@ -231,7 +231,7 @@ outside-click behavior remain intact.
|
||||
is offered.
|
||||
- Invalid or expired token: Home shows `Authentication required` without
|
||||
exposing the response body.
|
||||
- One malformed entity is omitted without suppressing healthy favourites.
|
||||
- One malformed entity is omitted without suppressing healthy favorites.
|
||||
|
||||
## Testing and verification
|
||||
|
||||
@@ -261,7 +261,7 @@ checks require an explicit user action from the finished Control Center.
|
||||
|
||||
## Documentation updates
|
||||
|
||||
- Update `config/dot/hypr/DESKTOP-PARITY.md` to mark Home Assistant favourites
|
||||
- Update `config/dot/hypr/DESKTOP-PARITY.md` to mark Home Assistant favorites
|
||||
and KDE Connect phone integration live.
|
||||
- Document Control Center behavior, credential resolution, and iOS limitations
|
||||
in `config/dot/hypr/README.md`.
|
||||
|
||||
@@ -52,7 +52,7 @@ The feature is deliberately local-first. Screen pixels are captured into Panama'
|
||||
- Tokyo Night Moon tokens are the only colors.
|
||||
- Processing uses a static status treatment; there is no spinner, pulse, shimmer, or idle animation.
|
||||
- OCR text is readable interface typography in a selectable editor, not a terminal-like dump.
|
||||
- The primary action is Copy. Network-leaving actions are visually secondary and clearly labelled.
|
||||
- The primary action is Copy. Network-leaving actions are visually secondary and clearly labeled.
|
||||
|
||||
## Settings and discoverability
|
||||
|
||||
|
||||
Reference in New Issue
Block a user