Files
Panama/config/dot/hypr/DESKTOP-PARITY.md
T
Gabriel Brown 41dd91eb75 Write down where all of this came from
Section G, the closeout.

UPSTREAM-INSPIRATION gains the second and largest borrowing round: what
was taken from omarchy, end-4, caelestia, ML4W and HyDE, what was
rebuilt rather than transplanted, and -- the part that matters more --
what was declined and why. Wallpaper-derived colour is declined on
identity, because dynamic colour is how rices end up looking like each
other. Audio visualisers are declined because a continuously repainting
equaliser is the GPU-pegging animation this project avoids. Patching
application internals to theme them is declined because the maintenance
is unbounded and lands on whoever is holding the desktop that day.

DESKTOP-PARITY gains a Portable machines section, which it has never
had, because until yesterday Panama was a desktop configuration in the
code as well as on the machine. Nine rows, one of them honest about not
having run on hardware with a lid. The remaining-gaps list gains the
four things now known to be missing rather than the one.

The README stops describing a desktop from before yesterday: migrations
in the install flow, the welcome and cheatsheet and manual, and laptops
working with every surface hiding itself where the hardware is absent.

The plan records its own outcome per section, including the two places
the work departed from it: D2's template renderer deferred once D1
removed the duplication it existed to fix, and E1 inverted after using
it for an afternoon.
2026-08-22 07:48:24 -04:00

9.3 KiB

Panama desktop parity

This is the living inventory for the GNOME-to-Hyprland transition. It records real behavior, not a one-for-one count of extensions: an enabled extension with no configured action is not treated as missing functionality.

Last live audit: 2026-08-17, Fedora 44, Hyprland 0.56.2, Quickshell 0.3.0.

Daily desktop surfaces

Capability Panama implementation Status
App launcher and run dialog Vicinae; Wofi emergency fallback Live
App grid Vicinae applications provider Live
Hidden applications GNOME App Hider list in Vicinae provider config Live
Tiling and dynamic workspaces Hyprland Lua config, Forge keymap preserved Live
Overview Continuum filmstrip, large workspace preview, cross-workspace search Live
Minimize SUPER+SHIFT+X sends to scratchpad; SUPER+X restores Live
Dock Quickshell dock with GNOME favorites and intellihide Live
Panel Workspaces, CPU/RAM/GPU, clock, weather, quiet event capsule, media, clipboard, tray, status Live
Clipboard history Vicinae owns capture/storage; Quickshell provides the panel Live
Notifications Quickshell server, toasts, grouped history, DND, clear actions Live
Date menu Two-column Daybook with Agenda, Ongoing activity, Notifications, month calendar, weather, and media Live
Ongoing activity Focus, Caffeine, recording, screen sharing, camera, and microphone state with direct controls Live
Calendar agenda Existing GNOME, Google, iCloud, and Nextcloud sources through Evolution Data Server Live
Control Center Wi-Fi, Bluetooth, audio input/output, Caffeine, Night Light, Focus, Home Assistant favorites, and KDE Connect phone continuity Live
Focus sessions Persistent workspace-bound timer, DND/caffeine coordination, Signal Glass controls Live
Brightness Appears only when a backlight device exists Live, not applicable on this monitor
AppIndicator / tray Native StatusNotifierItem host and themed menus Live
Screenshot and recording Quickshell picker, grim/slurp/satty/wf-recorder Live
Screen text and code recognition Local Tesseract/ZBar Read mode, selectable Prism result sheet Live after package install
Lock, idle, and power hyprlock, hypridle, login1, Quickshell power menu Live
Wallpaper hyprpaper Live
Keyring and authorization gnome-keyring and hyprpolkitagent Live
Portals and screen sharing xdg-desktop-portal-hyprland plus GTK portal Live
Removable media udiskie plus udisks notifications Live
Autostart apps Nextcloud, Bitwarden, and RustDesk system service/tray 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 health and recovery Settings → System Health, Check System Health in Vicinae, a degraded-only bar indicator, redacted reports, and bounded Panama-owned repairs Live

Portable machines

Panama was a desktop configuration until 2026-08-22, in the code as well as on the machine: there was no reference to a battery, a lid, or a power source anywhere in it, and hypridle.conf said "This is a desktop" in its own header.

Capability Panama implementation Status
Battery level services/Battery.qml reads sysfs the way Vitals reads procfs; bar indicator hides entirely without a battery Live
Power source panama-hw ac; a machine with no mains supply reports as on wall power, so a desktop is never treated as running out Live
Charge threshold Power page control, only where the firmware exposes a ceiling; written through panama-sudo Live
Idle timings per power source hypridle holds one set at a time, so panama-idle rebuilds its config when the charger comes or goes Live
Lock on lid close hypridle's before_sleep_cmd already locks, so a lid-close suspend is a locked suspend Live
Clamshell / docked A logind handle-lid-switch inhibitor held while an external display is connected. No lid watcher, and a failure returns logind's default Live, untested on a lid
Display arrangement on reconnect Displays.plannedRestore() reapplies a confirmed layout, refusing when the stored mode is not offered Live
Charger and low-battery notices StatusEvents; the charger is ambient so DND quiets it, critical battery is not Live
Hardware predicates panama-hw: laptop, battery, ac, lid-closed, external-monitor, clamshell, touchpad, nvidia Live

The clamshell path is the one row that has not run on hardware with a lid. Everything testable about it is tested; the end-to-end behaviour of closing a real lid on a docked machine is not, and the helper's header says so rather than letting silence imply otherwise.

System health and recovery

Panama stays silent while the desktop is healthy. A compact bar indicator appears only for actionable warnings or errors and opens the same System Health page available from Settings and the Vicinae command Check System Health. The terminal summary is available with:

~/.config/quickshell/scripts/panama-doctor --summary

The doctor reports authored, redacted observations about Panama-owned services, tools, links, and configured integrations. It does not read secrets, clipboard or notification contents, calendar events, SSIDs, or device addresses. Repairs are a small allow-list: Panama user services, Panama-owned links and launcher commands, duplicate Panama Caffeine inhibitors, and a confirmed shell restart. They never install packages, invoke sudo, delete user data, or rewrite arbitrary configuration.

Generic Fedora configuration remains with the system tools that own it. The final System Health card hands network settings, users, sharing, color profiles, and digital wellbeing to their exact GNOME Settings panels rather than presenting inert Hyprland controls.

GNOME extension migration

GNOME extension Result
Forge Replaced by Hyprland tiling and the original keymap
Dash to Dock Replaced by the Quickshell dock
AppIndicator Replaced by the Quickshell system tray
Clipboard Indicator Replaced by the bar clipboard panel and Vicinae history
Emoji Copy Replaced by Vicinae emoji search on SUPER+.
Vitals Replaced by the CPU, memory, and GPU bar readouts
Weather O'Clock Replaced by bar weather and the date-menu weather card
Caffeine Replaced by a real logind inhibitor in quick settings
Blur My Shell / Openbar / User Theme Replaced by the Prism shell and compositor blur
Bluetooth Quick Connect Replaced by the full Bluetooth picker
Wi-Fi QR Replaced by an on-demand QR-code sharing flow in Control Center's Wi-Fi panel; the code is generated only while shown and written to tmpfs, never persisted
GSConnect Replaced by capability-aware KDE Connect phone continuity in Control Center; the paired iPhone exposes file, clipboard, and Ring actions when reachable
Home Assistant Replaced by secure favorites in Control Center; explicit private environment values take precedence over the existing GNOME extension and Secret Service setup
Custom Hot Corners Extended No action was configured, so there is no behavior to port
App Hider Hidden app list is now applied in Vicinae
Allow Locked Remote Desktop Mutter-specific patch; RustDesk is independent, but lock-screen access needs a real remote test

System UI still worth adding

These are not blockers for normal use, but they are the remaining places where a polished general-purpose desktop can go beyond the current shell.

  1. A real external RustDesk test while hyprlock is active. Local process state cannot prove what a remote client sees or whether input is accepted.
  2. Closing a real lid on a docked laptop. The inhibitor, the predicates and the decision are all tested; the physical gesture is not.
  3. A keyboard-layout change notice. Hyprland reports the active keymap but not a change event Quickshell already consumes, so this needs either polling or new event plumbing, and a single-layout machine cannot test it.
  4. Sticky keys, slow keys and bounce keys. AccessX is an X11 server feature with no Wayland equivalent; GNOME, macOS and Windows all ship these.
  5. An on-screen keyboard, for a touch or convertible machine.

KDE Connect, the printer UI, Tesseract, and ZBar are installed and remain tracked in setup/packages/hyprland-packages.

Global menu decision

A macOS-style global application menu is not being shipped. Quickshell can render a DBusMenu that an application already exports, but it does not provide an application-menu registrar or a reliable focused-window-to-menu association. Hyprland has no cross-toolkit global-menu protocol, and the daily applications audited here do not consistently export one: GTK 4/Nautilus and Electron apps are the important failures.

That would produce a premium-looking empty strip for most windows and a working menu for a minority, which is worse than omitting it. Relevant references:

A future focused-window menu could expose compositor actions such as float, move, fullscreen, and close. It should not be labeled as an application menu.