Commit Graph
49 Commits
Author SHA1 Message Date
Ryan Hughes e8fc2ef08f Re-implement better scaling with new icon spacing 2026-05-22 13:30:53 -04:00
David Heinemeier Hansson b5079bdbad Revert "Provide better scaling"
This reverts commit 3ea8d9ffb7.
2026-05-22 17:41:30 +02:00
Ryan Hughes 3ea8d9ffb7 Provide better scaling 2026-05-22 11:30:43 -04:00
David Heinemeier Hansson ed3320cb8d Just emojis 2026-05-20 14:12:06 +02:00
David Heinemeier Hansson 41425481db app-launcher to just launcher 2026-05-20 13:57:22 +02: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 0422716374 More cleanup 2026-05-19 18:06:08 -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
David Heinemeier Hansson abf0a68b54 Drop walker + elephant 2026-05-19 20:54:20 +02:00
David Heinemeier Hansson 7ea4e1ab04 Switch hyprlock to QS 2026-05-19 17:08:14 +02:00
Ryan Hughes 7800937b29 Use accent border for popup surfaces 2026-05-19 01:54:08 -04:00
Ryan Hughes 832244c10e Refine shell cursor highlights 2026-05-19 01:02:16 -04:00
Ryan Hughes 8b2bb217d6 Standardize shell UI theme tokens 2026-05-18 20:13:12 -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 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 1eab0cffc9 Integrate swaybg and swayosd into the new shell 2026-05-16 20:34:09 +02:00
Ryan Hughes 079be0a1a7 Slim down comments in shell.toml.tpl
Keep only the non-obvious bits: the override mechanism, what counts as
"active" on the bar, the flyout text-color constraint, the
notifications-border convention, and the image-picker alpha modulation.
Drop comments that just restated the key names.
2026-05-16 00:37:12 -04:00
Ryan Hughes f404a81c6a Consolidate omarchy-shell colors into a single shell.toml surface
Five plugins each owned their own colors.toml watcher with subtly
different parsers, plus two ad-hoc per-theme override files
(notifications.json, image-picker-colors.json). This collapses all of
that into one source of truth: Commons/Color.qml watches colors.toml +
shell.toml and exposes Color.bar.*, Color.popups.*, Color.notifications.*,
Color.menu.*, Color.imagePicker.* for every surface to bind to.

shell.toml is generated by the existing template pipeline from
default/themed/shell.toml.tpl. Themes can ship their own shell.toml to
override individual keys; everything missing falls back to the
foundational palette via root.pick(). Settings panel is intentionally
not themable beyond the foundational tokens.

last-horizon and solitude ship a minimal shell.toml to preserve their
historical 'notification border matches Hyprland active border'
behavior, which previously came from parsing the theme's hyprland.conf
(now removed).
2026-05-16 00:30:27 -04:00
David Heinemeier Hansson 78de3c76d2 Merge branch 'dev' into omarchy-shell 2026-05-15 18:33:09 +02:00
David Heinemeier Hansson 3d3c77f53d Fix the gum coloring 2026-05-15 18:03:21 +02:00
Ryan Hughes c101591284 Replace mako with quickshell-backed notification daemon
Adds first-party omarchy.notifications service plugin that hosts a
freedesktop notification server and renders popups + a history popup
inside the shell. Uninstalls mako and retargets every helper, keybind,
indicator, and migration entry to the new daemon.

Plugin (default/quickshell/omarchy-shell/plugins/notifications/):
- Service.qml: NotificationServer, popupModel + pendingModel + pastModel
  (two-tier history, see below), DND via PersistentProperties +
  cache-file backstop, image cache for /tmp screenshots, IpcHandler with
  toggleDnd/setDnd/isDnd/showHistory/clear/clearPending/markAllSeen/
  dismissAll/dismissOne/invokeLast/dismiss, per-theme override file
  ~/.config/omarchy/current/theme/notifications.json honoring
  borderColor/backgroundColor/textColor/countdownColor.
- components/NotificationCard.qml: theme-driven card (Color.foreground/
  background/border tokens from Commons/Color.qml), 32x32 icon slot,
  Nerd Font glyph fallback via omarchy-glyph hint, hero image strip
  for screenshot/image-path notifications, hover-pause progress bar,
  uses bar.fontFamily so all surfaces share one font.

Filtering and DND:
- transient hint and CLI-style senders (app_name in notify-send /
  omarchy-action) bypass history but still pop.
- DND only allows omarchy-action toasts and notify-send -u critical
  through; real-app urgency=critical (Discord, Slack, Vesktop) is
  silenced and lands in pending instead.
- Pending vs past split surfaced via tabs in the bar widget popup;
  past tab is auto-pruned at the 15-minute mark.
- Click-to-jump: notifications without a libnotify default action focus
  the matching Hyprland window via class lookup.

Shell host:
- shell.qml: generic first-party service loader (mirrors the existing
  noctalia-compat path) and an alias for the bar so plugins can read
  barSize / barHidden / position for anchoring.
- Commons/Color.qml: parses the theme's hyprland.conf for
  $activeBorderColor so notifications match Hyprland window borders;
  picks the explicit accent= key over the color4= alias.

Bar widget rebase (plugins/bar/widgets/notificationCenter.qml):
- Drops the chunk-1 stub server, binds count/dnd state to the service,
  hosts the history popup via PopupCard so it drops down from the
  notification glyph the same way Quick Settings does.
- Pending/Past tabs, dismiss-individual close X, mark-all-as-seen and
  clear-recent action buttons, theme-driven palette.

Quick Settings rework (plugins/bar/widgets/controlCenter.qml):
- DND tile binds directly to service.doNotDisturb for instant feedback.
- Drops the volume slider (already in audioPanel) and the no-op Theme
  tile; adds a Bluetooth toggle bound to Quickshell.Bluetooth.
- Bigger 44x44 wallet was scaled back to 32x32 for tighter rows.

Notification scripts (bin/omarchy-*):
- omarchy-notification-send: passes glyph as a custom hint instead of
  prepending to the summary; adds -a omarchy-action and -u urgency
  automatically; supports -e/--transient passthrough.
- User-action toasts in the capture / toggle / hyprland / default-*
  scripts and bindings/utilities.lua now tag themselves
  -a omarchy-action so DND treats them as intent-based bypass.
- omarchy-toggle-notification-silencing, omarchy-notification-dismiss,
  default/waybar/indicators/notification-silencing.sh, and the Hyprland
  comma-keybinds all route through omarchy-shell-ipc notifications.
- omarchy-capture-screenshot / -screenrecording set the image-path
  hint properly so the hero-image rendering kicks in.

Mako removal (migrations/1778743515.sh):
- pkill -x mako, systemctl --user stop mako.service, pacman -Rns mako
  (uninstalling deletes /usr/lib/systemd/user/mako.service so D-Bus
  activation can't respawn it). Removes ~/.config/mako/ and the legacy
  toggle file. Restarts quickshell so it claims the bus name.
- Drops mako from install/omarchy-base.packages, autostart.lua,
  install/config/theme.sh + toggles.sh, default/themed/mako.ini.tpl,
  default/mako/, the omarchy-menu Mako restart row, bin/omarchy
  GROUP_DESCRIPTIONS, the settings panel catalogue, and the
  default/omarchy-skill paths table.
- Removed scripts: bin/omarchy-restart-mako,
  bin/omarchy-style-corners-mako.
- bin/omarchy-style-corners summary updated; corner radius for the
  notification card reads ~/.local/state/omarchy/toggles/quickshell-menu.json
  alongside the rest of the shell.
2026-05-14 14:21:07 -04:00
David Heinemeier Hansson cfc7bc0cda Better naming 2026-05-14 11:21:45 +02:00
Ryan Hughes 5c0f5669c9 Switch the image picker to IpcHandler 2026-05-14 02:21:48 -04:00
David Heinemeier HanssonandRyan Hughes b48f67058b Use consistent terms 2026-05-11 15:29:31 -04:00
David Heinemeier HanssonandRyan Hughes 333ec367df Let's build our own wall 2026-05-11 15:28:33 -04:00
David Heinemeier HanssonandRyan Hughes da822f6ffb Change from swaybg to skwd-wall
Nicer picker and support for movie bgs
2026-05-11 15:27:43 -04:00
Ryan Hughes f1bec15325 Update theme and SDDM to lua 2026-05-11 10:39:22 -04:00
David Heinemeier Hansson 887c7e3751 Set mako corners round or sharp 2026-05-10 11:50:19 +02:00
Luke HsiaoandGitHub 2a5db9ed78 Fix helix theme's word selection colors (#5630)
* Fix helix theme's word selection colors

Without this fix, if users enabled `editor.cursorline`, the word
selection would not be visually distinct from the cursorline selection.

Closes: https://github.com/basecamp/omarchy/issues/5580
Signed-off-by: Luke Hsiao <luke@hsiao.dev>

* Make Retro-82 color0 visually distinct from background

Signed-off-by: Luke Hsiao <luke@hsiao.dev>

* Make matte-black selection background distinct from color0

Signed-off-by: Luke Hsiao <luke@hsiao.dev>

---------

Signed-off-by: Luke Hsiao <luke@hsiao.dev>
2026-05-06 20:38:08 +02:00
David Heinemeier Hansson 7debca9f47 Add foot terminal as an option 2026-05-05 22:18:02 +02:00
David Heinemeier Hansson 7ce23d409f Style choose better 2026-05-05 13:28:09 +02:00
d904ed3afe Add dynamic theming for gum (#4467)
* Add dynamic theming for gum.

* Add migration.

* Fix migration script.

* Add omarchy-theme-reset utility.

* Move env variables into seperate file and update migration script.

* Migration adds the new hyprland config file to the users hyprland.conf.

* Add gum.env.conf to default env.conf instead.

* Reuse new omarchy-theme-refresh and update migration.

* Ensure no errors are thrown if the file can't be loaded

* Just apply this on the next theme selection

So it's not disruptive

---------

Co-authored-by: David Heinemeier Hansson <david@hey.com>
2026-05-03 20:26:03 +02:00
Luke HsiaoandGitHub d80c98f025 Make color0 distinct from background/foreground and fix helix theme (#5538)
* Make color0 distinct from background/foreground

The majority of themes have color0 available as a subtle offset from
the background. For flexoki-light, because color0 matched foreground, it
wasn't subtle, and would cause invisible text when used as a background
color (e.g., in text editor rulers). For vantablack, ethereal,
hackerman, and white, color0 matched background and would cause
invisible text when a theme wanted text to be de-emphasized.

This patch makes it consistently a subtle offset from background.

* Make helix selection theme colors more subtle

Helix is more usable if the selection background is subtle. This is
primarily because of [[1]], which makes a bright selection like we had
before often make the foreground text unreadable in the picker preview.

[1]: https://github.com/helix-editor/helix/issues/12405
2026-05-02 11:36:06 +02:00
Luke HsiaoandGitHub 3ce6e98022 Theme Helix with the current Omarchy theme (#5530)
Helix had no theme integration. Installing it from the menu just ran
omarchy-pkg-add and left the editor on whatever default theme it shipped
with, regardless of the active Omarchy palette.

This adds `default/themed/helix.toml.tpl` so the template
renderer produces a helix.toml on every theme switch, and
`omarchy-install-helix` that wires Helix up:
  - install the package
  - symlink `~/.config/helix/themes/omarchy.toml` at the rendered theme
  - seed a config.toml selecting that theme when the user has none

The install menu routes Helix through this script. omarchy-restart-helix
joins omarchy-theme-set and signals Helix with SIGUSR1 so theme changes
are live [[1]], the same way as other packages. Arch-based distros
package the binary as 'helix' rather than upstream 'hx', so the new
scripts target 'helix' and the installer ends with a hint about aliasing
'hx'.

[1]: https://docs.helix-editor.com/configuration.html
Ref: https://github.com/basecamp/omarchy/discussions/4986
2026-05-01 18:17:07 +02:00
Guido Vicino b50a388726 Fix low contrast for muted/faint text in Obsidian theme 2026-02-20 19:59:39 +01:00
Steve GodlewskiandGitHub 43ae186a80 Add Framework 16 RGB keyboard theme syncing (#4524)
* Add framwork 16 RGB syncing

* fixed install script, fixed color changing when style changes

* added framework scripts to the main install scripts

* renamed theme-set scripts, added migration

* use omarchy-pkg-add, shared keyboard template, tracked udev rule

* call the install file from the migration file
2026-02-18 21:19:30 +01:00
David Heinemeier Hansson 4d48409926 Just rely on terminal for coloring
We don't need a full theme
2026-02-10 08:31:15 +01:00
David Heinemeier HanssonandGitHub ffafe1727e Add Tmux (#4562)
* Add Tmux

Being able to use a unified terminal setup between local and remote
hosts has some real advantages.

* Renaming is more important than reloading

* Self-explanatory, really

* Add alias for it

* Attach to last used session or start a new if we have none

* Just stick to n/p

* Make it a clean 10x

* We don't need this

* Keep similar fixes together

* Keep bindings together

* Hate looking at that 0

* Add way to refresh theme from its templates (when they've changed)

* Fix
2026-02-09 23:01:46 +01:00
David Heinemeier Hansson ba14cd36dd Sync keyboard colors with theme if asusctl is installed 2026-02-05 09:05:30 +01:00
David Heinemeier Hansson 72b3b930c7 Drop the needless active_border_color/active_tab_background settings in favor of just using accent
Closes #4121
2026-01-08 10:32:21 +01:00
David Heinemeier Hansson 5603fb50fd Dramatically simplify omarchy-theme-set-obsidian
The cost is that only themes with a colors.toml file will get Obsidian
themeing.
2026-01-08 10:16:14 +01:00
David Heinemeier Hansson 2851687bbb Fix use of accent colors 2026-01-08 09:18:22 +01:00
David Heinemeier Hansson 3da8c2a023 Extract (almost) all chromium.theme files to use a template based on the background color 2026-01-05 21:47:23 +01:00
David Heinemeier HanssonandGitHub 4a07b94cb6 Use theme config templates with singular color definition (#4053)
* Attempt to templaterize the theme specific files

* Cleanup

* Slim down

* Combine render into -set

* Pull out the dynamic template rendering again, but simpler

* Fix vars

* Variables are lowercase

* Better presentation

* Fix missing colors

* Provide stripped values too

* Fix colors for regular hex format

* Bring back explicit btop themes

They're too involved to derive from a basic color set

* Make an atomic swap of the theme directories

* No longer used by walker to cancel

* Explain why

* Remove redundant const

* Consistent const naming

* No longe have $THEMES_DIR

* Correct the blue

* Set opencode colors too

* Fix colors for readability

* Move the templates together with the others in default

* Split user themes and default themes

* Fix paths

* Look for both user themes and default themes

Plus speed things up

* Migrate to the new setup where default themes live inside omarchy

* Explicitly store the name of the current theme

* Cleanup

* No longer need omarchy-theme-next since themes are now fully rendered, not symlinks

* Get current theme name from the new theme.name file

* Look for user background images in dedicated directory

* Need yq for toml

* Need yq to parse colors.toml

* Look for backgrounds matching the new theme.name

We no longer have symlinks

* Migrate existing user backgrounds to the new proper location

* Install user backgrounds in the correct path

* Fix quoting

* Just rely on the system theme for opencode and get ready for USRSIG2 being available to live reload

* Fix template generation for rgb colors
2026-01-03 18:22:14 -08:00