Commit Graph
100 Commits
Author SHA1 Message Date
Ryan Hughes 8baae47d48 Fix wifi frequency displays 2026-06-07 14:55:21 -04:00
Ryan Hughes 92246a50fb Enable plugin hot reloading for add / remove 2026-06-06 13:25:54 -04:00
Ryan Hughes 42bdf374dd Use Omarchy log upload endpoint 2026-06-06 13:25:54 -04:00
Ryan Hughes 1409f85745 Make the bar more easily swapable 2026-06-05 16:49:30 -04:00
Ryan Hughes add570dac2 Fix one-sided menu row borders 2026-06-04 12:11:41 -04:00
Ryan Hughes 0f715dff88 Lock screen improvements 2026-06-02 23:32:53 -04:00
Ryan Hughes e8a8fcf183 Fix theme switcher preload scrim race 2026-06-02 22:38:31 -04:00
Ryan Hughes d52b69c49b Fix button hover border layout shift 2026-06-02 22:19:09 -04:00
Ryan HughesandGitHub 62f3af2300 Merge pull request #4541 from bjarneo/normalize-color-names
Implement a new color system with inspiration from base24
2026-06-02 22:08:06 -04:00
Ryan Hughes 53357ace61 Rename purple theme color to magenta 2026-06-02 20:39:36 -04:00
Ryan Hughes 357b77c92c Register generated VS Code theme extension 2026-06-02 20:28:18 -04:00
Ryan Hughes 4087be7f79 Clean up semantic theme compatibility 2026-06-02 19:35:07 -04:00
Ryan Hughes 89bfa841c4 Restore semantic theme compatibility 2026-06-02 17:23:28 -04:00
Ryan Hughes 98ba4a9697 Bring on gradient borders 2026-06-02 11:17:13 -04:00
Ryan Hughes 30bafe7bb0 Make lock wallpaper lazy 2026-06-02 11:13:35 -04:00
Ryan Hughes fe70006736 Prevent disappearing wallpaper 2026-06-01 21:13:41 -04:00
Ryan Hughes 9c4ff68a43 Restore themed Hyprland gradients 2026-06-01 17:37:24 -04:00
Ryan Hughes 1bb439476a Add third-party plugin sources and installer
Let users add trusted plugin source repos and add/update/remove plugins
from them, alongside the existing in-shell plugin commands:

  omarchy plugin source <add|list|remove|refresh>
  omarchy plugin available
  omarchy plugin add | update | remove | validate

Each command is interactive (gum/fzf pickers, confirmation, an update
diff) in a TTY and fully flag-driven with --yes for scripts and agents.
Sources live in ~/.config/omarchy/plugins/sources.json and clone into
~/.cache/omarchy/plugin-sources/. The installer only copies files,
validates manifests against the shell's schema, and toggles enabled
state over IPC -- it never runs plugin code, hooks, or sudo.

Also guard 'plugin bar add' so only known bar-widget ids enter the
layout (rejecting typos/non-widgets like a stray '--help').
2026-05-29 16:55:15 -04:00
Ryan Hughes 5bab2dd230 Run Voxtype configure from dictation indicator 2026-05-29 14:36:26 -04:00
Ryan Hughes 007393387a Fix Bluetooth panel device list handling 2026-05-28 15:04:41 -04:00
Ryan Hughes 801c2b00c8 Fix and improve bar drag and drop XP 2026-05-27 22:59:46 -04:00
Ryan Hughes f8e82dac6b Improve omarchy-config-shell-bar 2026-05-27 16:44:43 -04:00
Ryan Hughes 752ecaf6e7 add model-usage plugin 2026-05-27 16:44:24 -04:00
Ryan Hughes c70ed3cdcd Add tailscale plugin 2026-05-26 11:27:11 -04:00
Ryan Hughes 4cd6593ba3 Use plugin IPC routes 2026-05-23 04:32:20 -04:00
Ryan Hughes 25b7dede1d Teach plugin command manifests 2026-05-23 04:32:20 -04:00
Ryan Hughes 4f0bdb790b Make built-in widgets plugins 2026-05-23 04:32:20 -04:00
Ryan Hughes fc180af54e Add default AI and launch command 2026-05-23 04:32:20 -04:00
Ryan Hughes db7e393104 Better universal copy / paste
Works in Nautilus and other places as expected now
2026-05-23 02:10:51 -04:00
Ryan Hughes dcfedbf89c Add close tab on SUPER + W 2026-05-22 23:36:05 -04:00
Ryan Hughes 7e81e04110 Add plugin management util 2026-05-22 23:35:41 -04:00
Ryan Hughes d23d46915f Namespace omarchy plugins 2026-05-22 23:35:27 -04:00
Ryan Hughes 1e2a3156a9 Add google meet pip 2026-05-22 16:16:57 -04:00
Ryan Hughes 877bef80d0 Add always show option 2026-05-22 16:16:48 -04:00
Ryan Hughes 952b33b981 Make indicators customizable 2026-05-22 15:05:55 -04:00
Ryan Hughes e8fc2ef08f Re-implement better scaling with new icon spacing 2026-05-22 13:30:53 -04:00
Ryan Hughes 3ea8d9ffb7 Provide better scaling 2026-05-22 11:30:43 -04:00
Ryan Hughes d13854857e Add MultiSelect 2026-05-21 16:35:26 -04:00
Ryan Hughes 0762b20e3e Fix freezing before setting 2026-05-20 22:29:15 -04:00
Ryan Hughes f0f58fea2f Fix display not showing current scale 2026-05-20 11:49:25 -04:00
Ryan Hughes da53c0ff60 Add Pi theme based on system theme
Based entirely on the work of @robzolkos in #5711. That attempt was
adapted to better fit the standard templating system while also adding
color mixing for use in other themes.
2026-05-20 01:53:34 -04:00
Ryan Hughes ae6f2e7ac7 Add color mixing 2026-05-20 01:45:20 -04:00
Ryan Hughes 8678dac385 Edge to edge blur 2026-05-19 21:59:06 -04:00
Ryan Hughes 26281b3863 Prevent maching the check causing spontaneous locking 2026-05-19 21:01:15 -04:00
Ryan Hughes ad271c1fcb Fix stream displays 2026-05-19 20:44:54 -04:00
Ryan Hughes b6803aa269 Fix bluetooth 2026-05-19 19:59:27 -04:00
Ryan Hughes 1f3a827701 consolidate logic 2026-05-19 19:18:56 -04:00
Ryan Hughes ccc796a3e0 Consolidate utils 2026-05-19 19:03:11 -04:00
Ryan Hughes 0422716374 More cleanup 2026-05-19 18:06:08 -04:00
Ryan Hughes 72c9331c72 Make lock screen behave like a lock screen 2026-05-19 17:20:45 -04:00
Ryan Hughes 201a003537 More tokens 2026-05-19 16:55:56 -04:00
Ryan Hughes b45795127d Rearrange common tokens 2026-05-19 16:06:48 -04:00
Ryan Hughes 6f72604f2c Add missing alpha tokens 2026-05-19 15:54:00 -04:00
Ryan Hughes c26a957b8f Add color tokens for app-launcher 2026-05-19 15:54:00 -04:00
Ryan Hughes 877c5d02f8 Add color tokens for menu 2026-05-19 15:34:19 -04:00
Ryan Hughes 15f461c1df Add tooltip color tokens 2026-05-19 15:16:10 -04:00
Ryan Hughes b59a8d0bb0 Add Battle.net installer 2026-05-19 14:09:04 -04:00
Ryan Hughes 7800937b29 Use accent border for popup surfaces 2026-05-19 01:54:08 -04:00
Ryan Hughes d76cf3d0d2 Align muted volume OSD glyph 2026-05-19 01:37:43 -04:00
Ryan Hughes 75962b98ea Fix audio panel scroll clipping 2026-05-19 01:32:32 -04:00
Ryan Hughes 8a74d28449 Show forget action for saved Wi-Fi networks 2026-05-19 01:15:07 -04:00
Ryan Hughes 832244c10e Refine shell cursor highlights 2026-05-19 01:02:16 -04:00
Ryan Hughes efd46234f0 Improve dynamic widget settings forms 2026-05-18 23:46:21 -04:00
Ryan Hughes 61e7d2f307 Use singular microphone label 2026-05-18 23:10:24 -04:00
Ryan Hughes fca58df0a5 Clean up audio device choices 2026-05-18 22:46:30 -04:00
Ryan Hughes 34ff56ae19 Detect PipeWire playback streams by sink role 2026-05-18 21:51:21 -04: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
Ryan Hughes 44dff2d23d Bar settings: use qs.Ui.ButtonGroup for the position picker
The custom PositionButtonGroup component wrapped Repeater + Button
directly without setting bordered: true on the delegates. After the
recent Button changes (idle non-bordered Buttons have zero border
width), the non-selected position chips lost their visible chip
structure entirely \u2014 they rendered as floating text labels and read
as unclickable.

Replace the bespoke component with qs.Ui.ButtonGroup (which sets
bordered: true on each chip) inside a Column with a 'Position' label,
and drop the now-unused PositionButtonGroup definition. All four
options now read as clickable chips and the chosen value still paints
the accent fill+border.
2026-05-18 12:41:55 -04:00
Ryan Hughes d4bf8d0eea omarchy dev ui-preview: jump to a specific section via argument
Pass a section name to open the gallery with the cursor already on
that component instead of scrolling from the top. Useful when
iterating on a single widget.

  omarchy dev ui-preview              # default position
  omarchy dev ui-preview button       # land on the Button section
  omarchy dev ui-preview button-group # land on ButtonGroup
  omarchy dev ui-preview slider       # land on Slider, etc.

The bin script forwards the argument as {"section": "..."} in the
shell summon payload. The gallery's open(payloadJson) parses it,
clamps against visibleSections (unknown names fall back to default),
and sets focusSection + selectedIndex inside the existing Qt.callLater
so the cursor's hasCursor bindings fire ensureCursorVisible
automatically.
2026-05-18 12:36:46 -04:00
Ryan Hughes b25dd100e3 Make Button state composition visible in ButtonGroup and the gallery
Three small fixes around the new Button + ButtonGroup so the cursor is
always visible and the section reads as a single Button showing flag
combinations.

ButtonGroup now exposes cursorIndex + hovered(index, isHovered) so
panels can drive a single Button's hasCursor without reaching past
ButtonGroup's API. Every chip gets bordered: true so the row reads as
a real picker — distinct outlines, not just a tinted fill that vanishes
into the background.

Button's border treatment grows two paths so the cursor is always
visible regardless of other state: bordered + hot recolors the border
to the accent and thickens to the focus-ring width, and selected + hot
thickens the existing accent border to the focus-ring width (so the
cursor landing on the chosen option still reads as cursor presence,
instead of disappearing into the selected fill).

Gallery's Button section pairs each demo button with a small caption
('idle', 'active', 'icon only', 'icon + active', 'bordered +
focusable') so the row reads as one Button with its state flags side
by side rather than five unrelated buttons. The ButtonGroup section
gets the cursor wiring (cursorIndex + onHovered) plus an
onFocusedChanged auto-scroll so the cursor visual is reachable via
j/k h/l from the panel cursor model.
2026-05-18 12:33:24 -04:00
Ryan Hughes 8b858d4093 Add outline cursor mode to CursorSurface for slider rows
Wide content rows (slider rows in audio / monitor panels) opted out of
the cursor fill by setting fill: "transparent" on their CursorSurface,
which left them with no cursor visual at all — j/k landed there
silently with no way to know what was selected.

Add an `outline: bool` flag to CursorSurface. When true, hasCursor
paints an accent border (Style.focusBorderColor at
Style.focusBorderWidth) instead of a fill, leaving the row's chrome
fully visible underneath. Use for slider rows where a fill would
obscure the track.

Audio output / input slider rows and the monitor brightness row opt
in. The dev gallery's slider section replaces its bespoke Rectangle
wrapper with the same CursorSurface { outline: true }, so what the
gallery documents is what the panels ship.
2026-05-18 12:19:23 -04: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 42dee4d399 Standardize cursor chrome to fill-only across qs.Ui
CursorSurface defines the canonical cursor chrome: a tinted fill, no
border. Three components had inconsistent treatments that the recent
standardization pass left half-finished:

- PillButton kept a 1px foreground border on hot (cursor or hover)
  via a cursorBordered: true default.
- CursorPill specifically had to override cursorBordered: false to
  match the rest of the kit.
- ChoiceButton thickened its border to 2px on hasCursor, which mixed
  the cursor visual with the Tab-focus visual.

Drop the cursorBordered escape hatch from PillButton (no caller other
than CursorPill ever used it), drop CursorPill's now-redundant
override, and remove hasCursor from ChoiceButton's border.width
thickening. Update Toggle's class comment (it still claimed cursor
mirrored Tab focus, which f3ba5055 broke without updating the doc).

Now: hot/hasCursor = fill only, activeFocus = accent border ring,
selected/active = stronger fill or accent border per component
semantic. One canonical pattern across the kit.
2026-05-18 11:52:23 -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 c26cf49f7d Fix settings widget dialog and fallback defaults 2026-05-18 10:17:01 -04:00
Ryan Hughes f48eef58e0 Trim doc and comment drift in qs.Ui kit 2026-05-18 10:17:01 -04:00
Ryan Hughes e9e5040bf3 Refresh idle indicator on bar IPC 2026-05-18 10:17:01 -04: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 a1e11f68b8 Add omarchy dev ui-preview to open the qs.Ui dev gallery 2026-05-18 02:49:04 -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