Commit Graph
15 Commits
Author SHA1 Message Date
Ryan Hughes 1dd30e5c28 Extract qs.Ui.TextField, migrate wifi passphrase + settings + dynamic form 2026-05-18 00:22:50 -04:00
Ryan Hughes 3e9104de60 Extract CursorPill, consolidate panel-cursor pill bases 2026-05-17 23:16:56 -04:00
Ryan Hughes b751109c6b Extract PanelKeyCatcher, share key dispatch across wifi/audio/bluetooth 2026-05-17 23:14:12 -04:00
Ryan Hughes 6b915926b2 Promote bar/common to qs.Ui kit module 2026-05-17 22:33:08 -04:00
Ryan Hughes 408dada45d Panel UI atoms, keyboard-driven audio + bluetooth, dev gallery 2026-05-17 22:07:51 -04:00
Ryan Hughes d73690b945 Unified cursor chrome across DNS pills and wifi rows
The wifi panel now has full keyboard nav over both sections:
  h/l            walk the DNS provider pills
  j/k            walk the wifi network list (j from DNS drops into the
                 list; k from the top row goes back to DNS)
  Enter/Space    apply the highlighted DNS provider / connect to the
                 highlighted wifi network
  Esc            close the panel

Single-cursor model. The visible cursor lives at the panel root via
focusSection + dnsIndex + selectedIndex. Mouse hover doesn't draw its
own highlight — onContainsMouseChanged on each row/pill MOVES the
cursor instead. Mouse leaving doesn't clear it (the cursor stays where
attention was last; subsequent j/k pick up from there). Last action
wins, whether mouse or keyboard.

New Common.CursorSurface holds the shared chrome (fill + 1px border +
fade) and is the base for both NetworkRow and the new local
DnsProviderPill. Items pass only hasCursor + current and let the
surface render. Contract: items never read containsMouse for visuals.
That's what guarantees exactly one highlight on screen at any time.

DnsProviderPill replaces Common.PillButton for the DNS row because
PillButton's hover > active > background cascade fights the
single-cursor model — its built-in hover would draw a parallel
highlight on whatever pill the pointer is parked on, even after the
cursor moved elsewhere. PillButton stays where it fits (refresh icon,
other bar widgets) and is unchanged here.
2026-05-17 20:15:00 -04:00
Ryan Hughes e3fff41c0e Keyboard-driven wifi panel
The wifi panel was a bar-widget xdg-popup which Hyprland doesn't grant
keyboard focus to until the user clicks or hovers it — keys typed after
a SUPER+CTRL+W summon went to whatever previously had focus.

New shared Common.KeyboardPanel scaffolding: layer-shell PanelWindow
with WlrKeyboardFocus.Exclusive (granted at map time, the protocol-level
equivalent of focus-on-launch for xdg-toplevels), full-screen anchored
with a Region mask that subtracts the bar strip so bar widgets stay
clickable, MouseArea for outside-click dismissal, TransformWatcher for
reactive anchor-position tracking. API is a subset of Common.PopupCard
(no centerOnBar / triggerMode / containsMouse yet — adding when the
other bar popups migrate).

networkPanel.qml uses it. Adds full keyboard navigation:
  j/k or Up/Down  — move selection
  Return/Space    — connect (or disconnect if already connected)
  x               — forget the highlighted network
  r               — refresh scan
  Esc             — close

ListView (with positionViewAtIndex on currentIndex) replaces the
Repeater+Column inside Flickable so the selected row stays visible as
j/k walks past the cap. A 1.5s Timer re-polls detailsProc while open
so the connection details (IP, gateway, signal) populate when routing
actually comes up after a connect rather than waiting for re-summon.

Rows: lock glyph on the right for protected-and-not-connected, X
(forget) for connected — aligned to the same 22-wide column. Connect
glyph in the passphrase prompt switched to a check, no separate cancel
(Esc handles it).

SUPER+CTRL+W in utilities.lua now toggles this panel via
omarchy-shell-ipc instead of launching Impala. Right-click on the bar
icon still launches Impala as a fallback for hidden SSIDs / enterprise
auth / iwd edge cases.
2026-05-17 18:18:53 -04:00
David Heinemeier Hansson 27497b19bf Expose DNS setting in the network widget 2026-05-17 19:51:29 +02:00
David Heinemeier Hansson 8c01563c46 Don't need notifications for changes that are obvious 2026-05-17 19:51:29 +02:00
David Heinemeier Hansson 49f19b617a Better spacing 2026-05-16 15:55:33 +02:00
David Heinemeier Hansson 6cb880908a More spacing tweaks 2026-05-15 19:14:52 +02:00
Ryan Hughes 96c5e048cb Drive Wi-Fi widget from iwctl with scrollable network list 2026-05-15 02:40:26 -04:00
Ryan Hughes 5086654d51 Hide Wi-Fi manager button when no Wi-Fi station is present
On ethernet-only machines (no wl* device) the button was offering to
open a tool the user can't usefully act on.
2026-05-14 02:21:48 -04:00
Ryan Hughes ece9267995 Show network connection details and gracefully handle iwd-only setups
Network panel now polls 'ip route get 1.1.1.1' for the active interface
and renders a key/value grid with IP/CIDR, gateway, link speed +
duplex (ethernet) or signal/freq/bitrate (Wi-Fi). One bash script
collects everything in TSV.

Wi-Fi list now works on Omarchy's default iwd+impala stack: when
nmcli isn't installed, falls back to 'iwctl station <dev> get-networks'
and parses the connected/SSID/signal/security columns. The list is
hidden entirely when no Wi-Fi station device exists (ethernet-only
machines).

Right-click on the bar widget and the bottom 'Open Wi-Fi manager
(Impala)' button both run omarchy-launch-wifi directly (was wrapped
in extra OMARCHY_PATH= env that wasn't actually doing anything).
2026-05-14 02:21:48 -04:00
Ryan Hughes c72a8756b3 Add omarchy-shell with a plugin registry 2026-05-14 02:21:48 -04:00