Commit Graph
41 Commits
Author SHA1 Message Date
David Heinemeier Hansson f05ad16eaf Add shell bar runtime regression coverage 2026-05-25 15:09:37 +02:00
David Heinemeier Hansson 829c1fa4f7 Add shell plugin model tests 2026-05-25 14:18:39 +02:00
Ryan Hughes d23d46915f Namespace omarchy plugins 2026-05-22 23:35:27 -04:00
David Heinemeier Hansson 7b6a03fa08 Refine shell panel transitions and layout 2026-05-22 11:22:42 +02:00
David Heinemeier Hansson f9a2685aab Use capitalized camel for all classes 2026-05-20 22:00:10 +02:00
David Heinemeier Hansson 6090d46dfd Drop the daytime widget, use clock everywhere
Clock and daytime were near-duplicates with different click semantics
(clock toggles between formats on left-click and opens the timezone
selector on right-click; daytime was non-pressable with a hover tooltip).
Standardize on clock, since it's the more capable of the two.

- Delete widgets/daytime.qml and its FirstPartyWidgets entry.
- Migrate shell-defaults.json, shell.qml's builtin fallback, Bar.qml's
  fallback bar config, and the settings panel's builtin defaults so the
  center anchor and center-section entry both reference "clock".
- Rename the daytimeSettings form to clockSettings and rephrase
  "Tooltip format" → "Alternate format (click to toggle)" so the field
  label matches clock's actual behavior.
- Update the gallery dropdown options and bar/README docs.
2026-05-20 21:23:30 +02:00
David Heinemeier Hansson 04e7820ebe Drop Bar.qml's private ModuleButton, reuse WidgetButton
ModuleButton was a near-duplicate of WidgetButton with the same text /
active / keepSpace / tooltip / fontSize / fixedWidth / fixedHeight /
pressed signal surface, only differing in that it closed over the
enclosing root via QML's scoping rules instead of taking `bar` as a
property. Switch CustomCommandModule onto WidgetButton with
`bar: root` so we have one bar button component to maintain.
2026-05-20 20:32:31 +02:00
David Heinemeier Hansson 9baf3f7f79 Fix parseModuleJson undefined call in custom command modules
CustomCommandModule.update() in Bar.qml called root.parseModuleJson(raw)
but the function was removed in 3b970068 (the indicator split). Any
custom command module emitting waybar-style JSON would have crashed on
first poll.

Hoist the helper into Util so both call sites — the bar's custom command
module and BarIndicator.extractData — share one definition.
2026-05-20 19:46:47 +02:00
David Heinemeier Hansson bdf7bf76cb Extract clock and tray bar widgets 2026-05-20 19:11:00 +02:00
David Heinemeier Hansson cf4729ca2b Extract indicators bar widget 2026-05-20 18:32:00 +02:00
David Heinemeier Hansson 1e63e86133 Extract system update bar widget 2026-05-20 18:28:13 +02:00
David Heinemeier Hansson 4835119e48 Move first-party bar widget catalog out of Bar 2026-05-20 18:27:10 +02:00
David Heinemeier Hansson 647bb88ab2 Extract menu opener widget 2026-05-20 17:53:05 +02:00
David Heinemeier Hansson 1ff343428c Extract workspace switcher widget 2026-05-20 17:53:05 +02:00
David Heinemeier Hansson 4941fe4bf9 Replace calendar widget with daytime label 2026-05-20 16:59:38 +02:00
David Heinemeier Hansson 532db800d7 Remove legacy idle inhibitor widget 2026-05-20 16:33:48 +02:00
David Heinemeier Hansson 234cc5354d Keep active indicator delegates stable 2026-05-20 16:08:56 +02:00
David Heinemeier Hansson dc6468cdfa Stabilize indicator activation rendering 2026-05-20 16:03:51 +02:00
David Heinemeier Hansson fca1393c8c Append newly active bar indicators 2026-05-20 15:58:38 +02:00
David Heinemeier Hansson 5110b0d753 Guard bar tooltips with live hover state 2026-05-20 15:52:43 +02:00
David Heinemeier Hansson b22b0f8640 Prevent stacked bar tooltips 2026-05-20 15:43:21 +02:00
David Heinemeier Hansson 8703a46a70 Scope bar interactions to their screen 2026-05-20 15:15:16 +02:00
David Heinemeier Hansson 20ff942481 Fix bar icon positioning in horizontal mode 2026-05-20 14:56:42 +02:00
David Heinemeier Hansson fab0d69e87 Make settings and transparency controllable on vertical bars 2026-05-20 14:51:19 +02:00
David Heinemeier Hansson ea1b0e7ced Extract panels out into their own top-level concern 2026-05-20 13:51:39 +02:00
David Heinemeier Hansson 3b9700682c Split out indicators 2026-05-20 13:05:56 +02:00
Ryan Hughes ccc796a3e0 Consolidate utils 2026-05-19 19:03:11 -04:00
Ryan Hughes 6f72604f2c Add missing alpha tokens 2026-05-19 15:54:00 -04:00
Ryan Hughes 15f461c1df Add tooltip color tokens 2026-05-19 15:16:10 -04:00
David Heinemeier Hansson 0f5044167c Move from hypridle to QS 2026-05-19 12:02:28 +02:00
David Heinemeier Hansson 8fa463975a Remove dead code 2026-05-19 10:50:36 +02:00
David Heinemeier Hansson eff07700e0 Respect style corner radius 2026-05-19 09:47:26 +02:00
Ryan Hughes f1e6fe86b7 Remove legacy battery bar module 2026-05-18 21:27:00 -04:00
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 1a457118a5 Ensure you can click to open another panel while one is open 2026-05-18 22:38:53 +02:00
David Heinemeier Hansson 1dc2f1ec79 Introduce power panel 2026-05-18 20:47:38 +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
Ryan Hughes e9e5040bf3 Refresh idle indicator on bar IPC 2026-05-18 10:17:01 -04:00
David Heinemeier Hansson 0fe985b45d Promote shell to its own top-level directory 2026-05-18 14:56:59 +02:00