Commit Graph
1010 Commits
Author SHA1 Message Date
Ryan Hughes 6fa6e6cc91 Merge remote-tracking branch 'origin/omarchy-shell' into omarchy-shell
# Conflicts:
#	shell/Ui/PillButton.qml
#	shell/plugins/bar/widgets/monitorPanel.qml
#	shell/plugins/bar/widgets/networkPanel.qml
2026-05-18 21:11:37 -04:00
Ryan Hughes 8b2bb217d6 Standardize shell UI theme tokens 2026-05-18 20:13:12 -04:00
David Heinemeier Hansson 196dcd2472 Open power panel on super + ctrl + p 2026-05-18 21:13:37 +02:00
Ryan Hughes b5f7ba02c2 Unify PillButton, CursorPill, ChoiceButton into qs.Ui.Button + ButtonGroup
The three components were three takes on the same shape \u2014 a clickable
rectangle with text/icon, a hot/hover state, an optional persistent
border, and an optional 'selected' or 'active' highlight. CursorPill
was a 30-line PillButton wrapper that added a hovered() signal;
ChoiceButton was effectively PillButton with selected: bool painting
an accent fill+border.

Collapse them into a single qs.Ui.Button. State flags compose
independently:

  hasCursor / hover         hot fill
  active                    persistent foreground-tint fill
  selected                  accent fill + accent border
  bordered: true            persistent 1px idle border (form primaries)
  focusable: true           Tab focus paints the accent ring
  pressed                   pressed fill

The hovered(bool) signal is now built-in, so CursorPill's wrapper is
unnecessary. ButtonGroup wraps a Row+Repeater for the form-style
'pick one of N' pattern; panel-cursor-driven cases still compose
Buttons directly in a Row with per-instance hasCursor wiring.

Theme tokens move into a new [style] section in shell.toml:

  border-width        = 1
  focus-border-width  = 3
  idle-border-alpha   = 0.4
  hot-fill-alpha      = 0.08
  selected-fill-alpha = 0.18
  pressed-fill-alpha  = 0.22
  focus-fill-alpha    = 0.22

Style.qml parses these out of the same shell.toml [font] / [bar]
already reads, and exposes pre-computed Style.hotFill / selectedFill /
pressedFill / idleBorderColor / selectedAccentFill / borderWidth +
the existing focusBorder* tokens. Themes that don't ship a [style]
section get the previous defaults unchanged.

Dev gallery consolidates three sections (PillButton, CursorPill,
ChoiceButton) into Button + ButtonGroup, with the cursor model
sections renamed accordingly.
2026-05-18 12:09:13 -04:00
Ryan Hughes 648bc54db1 Unify font sizes through qs.Commons.Style
Themes now drive typography the same way they drive colors: one [font]
base-size in shell.toml is the rem root, and every Style.font.<token>
(caption, bodySmall, body, subtitle, title, heading, display,
displayLarge, iconSmall, icon, iconLarge) derives from it via a fixed
multiplier. Themes can also pin individual tokens for stylistic
emphasis. base-size is clamped 11..13 until row-height tokens exist.

Bar dimensions move to the same singleton: [bar] size-horizontal /
size-vertical replace the hardcoded 26/28 in Bar.qml, exposed as
Style.bar.sizeHorizontal / sizeVertical.

Style.qml also resolves the fontconfig 'monospace' alias via fc-match
and exposes Style.font.resolvedFamily so panels can display the
concrete family. Watches ~/.config/fontconfig/fonts.conf so it tracks
'omarchy font set <name>'.

The qs.Ui kit (PillButton, Dropdown, Toggle, TextField, etc.) and
every first-party plugin (bar widgets, settings, menu, clipboard,
emoji, polkit, notifications, osd, image-picker, dev-gallery) now
bind to Style.font.* instead of pixel literals. Only three deliberate
display-scale outliers remain: the notification empty-state glyph and
the weather flyout's hero temperature pair, all commented.

Background plugin's applyTheme IPC fast-path also pushes shell.toml to
Style so theme swaps update typography and bar size without waiting
for inotify debounce.

Dev gallery (omarchy dev ui-preview) now ships a Typography section
that renders the full scale and theme tokens live, and its summon
command is fixed (omarchy-shell-ipc -> omarchy-shell).
2026-05-18 11:33:19 -04:00
David Heinemeier Hansson bbdc485a62 Open the right panels 2026-05-18 15:54:21 +02:00
David Heinemeier Hansson acf617e05e No animations for any of these pickers 2026-05-18 15:53:49 +02:00
David Heinemeier Hansson 0fe985b45d Promote shell to its own top-level directory 2026-05-18 14:56:59 +02:00
David Heinemeier Hansson d782705878 Match offset and color to existing notifications 2026-05-18 14:34:11 +02:00
David Heinemeier Hansson ff40026b7b Use consistent corner radius for themes 2026-05-18 14:30:49 +02:00
David Heinemeier Hansson b0f5d941ba Switch to running quickshell as a systemd service that is auto-restarted if it crashes 2026-05-18 13:58:07 +02:00
David Heinemeier Hansson 8424718d1b No animations on bar location changes 2026-05-18 13:56:26 +02:00
Ryan Hughes ae17436089 Update bindings 2026-05-18 03:19:58 -04:00
Ryan Hughes d6708ffe69 Consolidate nested READMEs into docs/; trim drift 2026-05-18 03:16:28 -04:00
Ryan Hughes 2314c821a3 Move Ui kit notes into the gallery, drop Ui/README.md 2026-05-18 03:05:14 -04:00
Ryan Hughes d01d1dcdb3 Add qs.Ui.NumberField; migrate weather + spacer settings 2026-05-18 02:58:56 -04:00
Ryan Hughes 259cda3342 Bar settings: widget settings open as modal overlay inside the panel 2026-05-18 02:53:25 -04:00
Ryan Hughes c17ab99fa4 Stay Awake: filled red coffee cup when active, empty cup at rest 2026-05-18 02:45:19 -04:00
Ryan Hughes 2a6749dc6c Stay Awake: fix state detection, rename, notify on toggle 2026-05-18 02:40:19 -04:00
Ryan Hughes 8272c6d881 Remove legacy bar widget modules 2026-05-18 02:33:43 -04:00
Ryan Hughes 713a32e61d Bar settings + Add widget: include widget description in option rows 2026-05-18 02:20:00 -04:00
Ryan Hughes 135d21cae2 Bar settings + Add widget: button-style trigger, fit inside panel 2026-05-18 02:18:07 -04:00
Ryan Hughes 030963768b Dropdown/SearchableDropdown: arrow keys + row padding 2026-05-18 02:08:03 -04:00
Ryan Hughes 7cdf35e462 Fix gallery navigation: arrow keys, cursor stuck past ChoiceButton, scroll bounce 2026-05-18 01:57:26 -04:00
Ryan Hughes 54da1a90ab Gallery: scroll initial cursor target into view on open 2026-05-18 01:47:29 -04:00
Ryan Hughes b8188ce46c Gallery: replicate the panel cursor model from wifi/audio/bluetooth/monitor 2026-05-18 01:43:23 -04:00
Ryan Hughes 91a87470a2 Add hasCursor + hovered surface to four kit primitives 2026-05-18 01:31:37 -04:00
Ryan Hughes 23f1ba1b3f Dropdown/SearchableDropdown: 4px spacing between popup rows 2026-05-18 01:17:35 -04:00
Ryan Hughes 4b05472768 Gallery PanelToolTip swatch follows theme corners, PanelActionButton uses MDI cog 2026-05-18 01:15:50 -04:00
Ryan Hughes 9c656df0ac Fix monitor brightness h/l doing nothing: id shadowing root property 2026-05-18 01:05:33 -04:00
Ryan Hughes 72939ac530 Fix Dropdown/SearchableDropdown integration issues 2026-05-18 00:59:40 -04:00
Ryan Hughes 8ec794a1b4 Fix brightness slider h/l bouncing to zero 2026-05-18 00:55:46 -04:00
Ryan Hughes 0d6c58a2df Bar settings: nerd font glyphs + SearchableDropdown for "+ Add widget" 2026-05-18 00:54:53 -04:00
Ryan Hughes db4fa1f760 Add qs.Ui.Dropdown, SearchableDropdown, Toggle rounded variant 2026-05-18 00:52:59 -04:00
Ryan Hughes 4b4df8b4f5 Fold settings ActionPill + IconButton into qs.Ui kit 2026-05-18 00:29:26 -04:00
Ryan Hughes 4529988676 Migrate monitorPanel onto the keyboard-driven panel chassis 2026-05-18 00:24:53 -04:00
Ryan Hughes 1dd30e5c28 Extract qs.Ui.TextField, migrate wifi passphrase + settings + dynamic form 2026-05-18 00:22:50 -04:00
Ryan Hughes 64115a9cb4 Read cornerRadius from Hyprland instead of the quickshell-menu.json toggle 2026-05-17 23:31:47 -04:00
Ryan Hughes b1e3a23088 Gallery covers new components; add qs.Ui kit README 2026-05-17 23:19:54 -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 daed74733b Extract ChoiceButton + Toggle from bar settings into qs.Ui 2026-05-17 23:10:42 -04:00
Ryan Hughes 5e3659fb8d Promote cornerRadius + focus tokens to qs.Commons.Style singleton 2026-05-17 23:08:08 -04:00
Ryan Hughes 2167bdbe95 Fix gallery ScrollView sizing so Slider and Composed render 2026-05-17 22:52:28 -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 6ecca2962d Positioning without anim and with explicit buttons 2026-05-17 22:10:43 +02:00
David Heinemeier Hansson c706a244d7 Correct the forecast 2026-05-17 21:55:42 +02:00