Compare commits

...

185 Commits

Author SHA1 Message Date
David Heinemeier Hansson
e8bcad0c23 Fix template generation for rgb colors 2026-01-03 18:18:19 -08:00
David Heinemeier Hansson
a6b9bee8b9 Just rely on the system theme for opencode and get ready for USRSIG2 being available to live reload 2026-01-03 18:04:12 -08:00
David Heinemeier Hansson
edc964e458 Fix quoting 2026-01-03 17:55:37 -08:00
David Heinemeier Hansson
7194176fe5 Install user backgrounds in the correct path 2026-01-03 17:53:21 -08:00
David Heinemeier Hansson
2829279884 Migrate existing user backgrounds to the new proper location 2026-01-03 17:48:20 -08:00
David Heinemeier Hansson
63a4710a88 Look for backgrounds matching the new theme.name
We no longer have symlinks
2026-01-03 17:47:48 -08:00
David Heinemeier Hansson
b86fb24403 Need yq to parse colors.toml 2026-01-03 16:51:41 -08:00
David Heinemeier Hansson
615e13bbba Merge branch 'dev' into colors-gemini 2026-01-03 16:50:53 -08:00
David Heinemeier Hansson
de2757466b Add opencode (#4071) 2026-01-03 16:50:10 -08:00
David Heinemeier Hansson
6dfa5f0807 This would trigger before screensaver/hyprlock
So need a different way to deal with resetting of the idle timer
2026-01-03 16:21:22 -08:00
David Heinemeier Hansson
4e802d8058 No longer used either 2026-01-03 14:18:07 -08:00
David Heinemeier Hansson
5e75c2d3a9 Never did use pinning
Better served with our stable setup
2026-01-03 14:16:22 -08:00
David Heinemeier Hansson
2c8f71c179 Need yq for toml 2026-01-03 14:14:38 -08:00
David Heinemeier Hansson
f4f356659f Merge branch 'dev' into colors-gemini 2026-01-03 14:08:09 -08:00
David Heinemeier Hansson
d20ad9032f Label hyprwhspr as Dictation and launch setup post install 2026-01-03 14:02:38 -08:00
David Heinemeier Hansson
9e2ff7be1d Allow menu extensions to be set by the user
Closes #4012
Co-authored-by: @DarrenVictoriano
2026-01-03 13:57:26 -08:00
Ryan Hughes
e1b3a88126 Add hyprwhspr to AI install menu 2026-01-03 16:34:53 -05:00
Ryan Hughes
16a9bc295c Add --no-sudo and --print to debug 2026-01-03 16:34:53 -05:00
David Heinemeier Hansson
fdee76e2d2 Fix windowrule sizing changes 2026-01-03 13:31:50 -08:00
Justin Mißmahl
941e1c2dd8 omarchy remove dev (#4065)
Co-authored-by: JustinMissmahl <github@emeruslabs.com~>
2026-01-03 13:23:43 -08:00
David Heinemeier Hansson
c723411049 Comply with changed layerrule syntax in Hyprland 0.53 2026-01-03 13:10:43 -08:00
Ryan Hughes
c82b1bfb7e Add --print option to output keybindings to terminal 2026-01-03 13:34:30 -05:00
David Heinemeier Hansson
36095c1ac8 Fix with variable 2026-01-02 21:20:52 -08:00
David Heinemeier Hansson
57bbe425df Unused variable 2026-01-02 21:20:44 -08:00
Vaibhav Verma
d90bc6d3f3 Add theming support for VSCodium (#2519) 2026-01-02 21:09:17 -08:00
Omar Skalli
dbc3c006dd Make sure to re-install chromium google accounts when refreshing config (#1737) 2026-01-02 20:58:42 -08:00
David Heinemeier Hansson
807c74d405 The idle counter is reset between each listener
Re: #641
Co-authored-by: @marcinczenko
2026-01-02 20:31:16 -08:00
David Heinemeier Hansson
a9cea21463 Add missing up/down for moving workspaces to other monitors
Closes #844
Co-authored-by: @erdostom
2026-01-02 20:14:17 -08:00
David Heinemeier Hansson
fee7746362 Look for user background images in dedicated directory 2026-01-02 21:12:12 -07:00
Jeff Nunn
c832b7dc75 Skip "press any key" message when user cancels TUI or Web App install (#3866)
with Ctrl+C
2026-01-02 20:03:54 -08:00
David Heinemeier Hansson
b08b419bfc Use encapsulated reboot command 2026-01-02 19:49:52 -08:00
David Heinemeier Hansson
5d712d3ff1 Get current theme name from the new theme.name file 2026-01-01 16:43:02 -07:00
David Heinemeier Hansson
32dbe60a02 No longer need omarchy-theme-next since themes are now fully rendered, not symlinks 2026-01-01 16:26:47 -07:00
David Heinemeier Hansson
9ecf5a089b Cleanup 2026-01-01 16:23:48 -07:00
David Heinemeier Hansson
4ead763559 Explicitly store the name of the current theme 2026-01-01 16:22:17 -07:00
David Heinemeier Hansson
a308000390 Migrate to the new setup where default themes live inside omarchy 2026-01-01 16:13:44 -07:00
David Heinemeier Hansson
1b8da49425 Look for both user themes and default themes
Plus speed things up
2026-01-01 16:06:10 -07:00
David Heinemeier Hansson
934285b7c4 Fix paths 2026-01-01 16:03:15 -07:00
David Heinemeier Hansson
fdd3b6d787 Split user themes and default themes 2026-01-01 15:56:40 -07:00
David Heinemeier Hansson
0b04881a6f Move the templates together with the others in default 2026-01-01 15:35:02 -07:00
David Heinemeier Hansson
222386639b Fix colors for readability 2026-01-01 14:15:32 -07:00
David Heinemeier Hansson
a7d925de51 Set opencode colors too 2026-01-01 14:12:58 -07:00
David Heinemeier Hansson
8460be15c2 Correct the blue 2026-01-01 13:45:01 -07:00
David Heinemeier Hansson
a57e2b48e7 No longe have $THEMES_DIR 2026-01-01 13:05:10 -07:00
David Heinemeier Hansson
b07c54fff1 Consistent const naming 2026-01-01 12:58:19 -07:00
David Heinemeier Hansson
277495b875 Remove redundant const 2026-01-01 12:56:58 -07:00
David Heinemeier Hansson
d448664726 Explain why 2026-01-01 12:55:23 -07:00
David Heinemeier Hansson
14e140285f No longer used by walker to cancel 2026-01-01 12:55:16 -07:00
David Heinemeier Hansson
b95a4a44df Make an atomic swap of the theme directories 2026-01-01 12:52:04 -07:00
David Heinemeier Hansson
79b31144d0 Bring back explicit btop themes
They're too involved to derive from a basic color set
2026-01-01 12:41:23 -07:00
David Heinemeier Hansson
cf5f4423e1 Fix colors for regular hex format 2026-01-01 12:35:23 -07:00
David Heinemeier Hansson
01135724d4 Provide stripped values too 2026-01-01 12:33:45 -07:00
David Heinemeier Hansson
ff9474e0eb Fix missing colors 2026-01-01 12:33:36 -07:00
David Heinemeier Hansson
b14297ea21 Better presentation 2026-01-01 12:15:51 -07:00
David Heinemeier Hansson
3db3705370 Merge branch 'dev' into colors-gemini 2026-01-01 12:12:45 -07:00
David Heinemeier Hansson
bd6992c58c Variables are lowercase 2026-01-01 12:09:17 -07:00
David Heinemeier Hansson
3dc59e5404 Fix vars 2026-01-01 12:08:40 -07:00
David Heinemeier Hansson
3ecdcb262b Pull out the dynamic template rendering again, but simpler 2026-01-01 12:06:31 -07:00
David Heinemeier Hansson
8ea021744d Combine render into -set 2026-01-01 11:55:03 -07:00
David Heinemeier Hansson
6952e80710 Slim down 2026-01-01 11:49:08 -07:00
Pierre Olivier Martel
2643967424 Use omarchy-launch-audio stub in waybar and menu (#4043)
* Use omarchy-launch-audio in waybar

* Use omarchy-launch-audio in omarchy-menu
2025-12-31 18:13:12 -07:00
David Heinemeier Hansson
8abeac68dc Cleanup 2025-12-31 18:04:39 -07:00
Derek Wierson
64f254653f Fix windowrule syntax change for kanagawa theme (#4032) 2025-12-31 17:12:09 -07:00
Lázaro Nixon
687ac4567e Add github-copilot-cli to the AI install menu (#4041)
* Add github-copilot-cli to the AI install menu

* Mark the copilot package as coming from AUR

---------

Co-authored-by: David Heinemeier Hansson <david@hey.com>
2025-12-31 17:06:22 -07:00
Pierre Olivier Martel
72cecc600d Move btop binding to Control Panels utilities (#4042)
Co-authored-by: David Heinemeier Hansson <david@hey.com>
2025-12-31 17:03:23 -07:00
David Heinemeier Hansson
1cd2f5b979 Attempt to templaterize the theme specific files 2025-12-31 17:00:30 -07:00
Marco Troisi
7fbc139cb5 Google Maps as a default webapp (#4028)
* Google Maps as a default webapp

* Using icon from DashboardIcons
2025-12-30 16:27:01 -08:00
me
7c213db46d add fresh to omarchy-launch-editor (#4015)
fixes #4014
2025-12-30 16:22:41 -08:00
LunarLollipop
5dd4bec68a Fix Hyprland 0.53 windowrule syntax breaking changes (#4025)
* Fix Hyprland 0.53 windowrule syntax breaking changes

Hyprland 0.53 introduced breaking changes to windowrule syntax:

- Props now use `match:` prefix: `class:pattern` → `match:class pattern`
- Boolean effects require `on` suffix: `float` → `float on`
- Snake_case naming: `nofocus` → `no_focus`, `stayfocused` → `stay_focused`
- `noborder` replaced with `border_size 0`
- `noanim` replaced with `animation none`
- layerrule syntax: `noanim, X` → `animation none, match:namespace X`
- `misc:new_window_takes_over_fullscreen` → `misc:on_focus_under_fullscreen`

See: https://github.com/hyprwm/hyprland-wiki/pull/1278

* Correct for the new style

* Migrate the scrolltouchpad setting in userland too

* Need a reboot to pair with new Hyprland

---------

Co-authored-by: David Heinemeier Hansson <david@hey.com>
2025-12-30 16:21:59 -08:00
David Heinemeier Hansson
4311a00ca4 Just install latest node 2025-12-30 15:40:02 -08:00
Ryan Hughes
cd224e7ecd Merge pull request #3956 from ashddev/fix/nvidia-legacy-driver-for-older-gpus
fix(nvidia): install legacy NVIDIA driver on older GPUs
2025-12-28 13:42:13 -05:00
Ryan Hughes
7e12473f80 Don't continue if we don't have a GPU 2025-12-28 13:27:52 -05:00
Ryan Hughes
2c7480135a Add migration 2025-12-28 13:27:33 -05:00
Ryan Hughes
df0a019c6a Add migration 2025-12-28 12:34:13 -05:00
Jack Blakely
083715c8c6 Fix omarchy-update failing outside Hyprland session (#4002) 2025-12-28 08:46:44 -08:00
Ryan Hughes
d0aabc162a Add packages to others 2025-12-27 22:20:44 -05:00
Ryan Hughes
e416988d4e Rearrange and don't hard-fail 2025-12-27 22:20:38 -05:00
Ryan Hughes
314abce4e8 We know what we're doing 2025-12-27 21:47:17 -05:00
Ryan Hughes
fe8927b351 Simplify further 2025-12-27 21:46:43 -05:00
Ryan Hughes
13390441a9 Don't need to run this 2025-12-27 21:42:35 -05:00
Ryan Hughes
65a238d805 Simplify 2025-12-27 21:42:26 -05:00
Ryan Hughes
c535b19235 These already get installed or are dependencies 2025-12-27 21:06:04 -05:00
Ryan Hughes
9c8c789453 Simplify this check 2025-12-27 21:05:45 -05:00
Jan L. Große
2bc88ebf25 Update PostgresSQL version in installation script from 17 to 18 (#3990)
Bumping PostgresSQL DB from 17 to 18.
2025-12-26 21:11:03 +01:00
David Heinemeier Hansson
2573da8f5e Make impressionism the default 2025-12-24 22:40:19 +01:00
David Heinemeier Hansson
e44e937284 Ensure that noidle is turned off after update is complete
Closees #3982
Co-authored-by: @sgruendel
2025-12-24 19:25:18 +01:00
David Heinemeier Hansson
fd952c2323 Add The Backwater as a second Gruvbox background image 2025-12-24 18:27:49 +01:00
Ash Daly
4e09523127 fix(nvidia): do not install nvidia-580xx-dkms for GPUs older than Maxwell 2025-12-23 11:19:11 +00:00
Fredrik Mikal Wold
643cf35448 fix: stop paging git diff output when running omarchy-update (#3959)
* fix: stop paging git diff output when running omarchy-update

* Keep option list similar between the two

---------

Co-authored-by: David Heinemeier Hansson <david@hey.com>
2025-12-22 13:56:02 -08:00
Ash Daly
1fd1b65cd0 chore: add noconfirm to yay command 2025-12-21 16:13:53 +00:00
Ash Daly
9a704fdadb chore: edit comment 2025-12-21 16:12:06 +00:00
Ash Daly
a252a42772 fix(nvidia): install legacy driver on older GPUs 2025-12-21 16:11:05 +00:00
David Heinemeier Hansson
c59089e9f3 Use omarchy-launch-* stubs for all control panels 2025-12-18 16:24:55 -08:00
David Heinemeier Hansson
ca8f25fba1 Switch to our bluetooth launcher 2025-12-18 13:54:27 -08:00
David Heinemeier Hansson
dae89574dd Add Super + Ctrl + A/B for Audio and Bluetooth controls
Also, move waybar-less information notifications to Super + Ctrl + Alt +
T/B to make room. These are very specialized and probably not broadly
used.

Closes #3909
Co-authored-by: @ddVital
2025-12-18 09:19:38 -08:00
SantiagoH10
49a9ce14b8 fix: unquoted variable expansion was breaking omarchy-launch-about (#3933) 2025-12-18 09:08:13 -08:00
David Heinemeier Hansson
d2ea6ad183 Canceling the screensaver on mouse movement doesn't work with bluetooth mice
Could not get it to stop existing with a Logitech MX4 when connected via
bluetooth.
2025-12-17 15:04:10 -08:00
David Heinemeier Hansson
d5066561ca Got lost on a bad merge
Closes #3853
Co-authored-by: @nirabyte
2025-12-16 09:24:38 -08:00
Diogo Ferreira
fe9493bd86 openai-codex-bin -> openai-codex in menus (#3894)
This was done in a migration in 0588cc8e5b but the menu entry was never updated. So, installs after the migration will get the outdated version.

Added a new migration as well for those that installed after the
previous one.
2025-12-16 07:50:45 -08:00
David Heinemeier Hansson
f578880bc8 Guard against crash bug when scrolling over expand icon in tray
Closes #3892
2025-12-16 07:49:17 -08:00
David Heinemeier Hansson
7ce838565c Add missing dotnet-runtime-9.0 needed for Pinta
Closes #3859
2025-12-16 07:41:52 -08:00
Ryan Hughes
aacc40c954 Alert user if unable to restart 2025-12-15 19:58:59 -05:00
Ryan Hughes
f3b9ca2149 Prevent error if service doesn't exist 2025-12-15 18:47:13 -05:00
David Heinemeier Hansson
ee8f62d967 Only run update if limine-update is available
It won't be on grub
2025-12-15 14:48:44 -08:00
David Heinemeier Hansson
32592e2e28 Merge pull request #3852 from basecamp/dev
Omarchy 3.2.3
2025-12-15 14:09:38 -08:00
David Heinemeier Hansson
adf7fba2b3 Prepare for release 2025-12-15 10:20:44 -08:00
David Heinemeier Hansson
021d66f9b6 Channel changes should prompt a full update 2025-12-15 10:04:00 -08:00
David Heinemeier Hansson
1a34be257c Add backdoor to start alacritty
Will help folks who have trouble with ghostty to still get a terminal
going
2025-12-15 09:58:08 -08:00
David Heinemeier Hansson
1f4c50eddf Pull noidle setting out into its own step 2025-12-15 09:55:09 -08:00
Ryan Hughes
92af9f41f2 Reorder 2025-12-15 12:38:28 -05:00
Ryan Hughes
8ed20d0524 And create the folder 2025-12-15 12:35:47 -05:00
Ryan Hughes
2d00b2a02f Actually add the config in the migration 2025-12-15 12:35:05 -05:00
David Heinemeier Hansson
97396f5fb2 Fix excessive size for Fizzy 2025-12-15 08:28:28 -08:00
Wolfgang Woehl
46c85e49a3 Quit Walker before screensaver launch (#3873)
Screensaver launch is broken when Walker is open: It will fail to go fullscreen and exits right after input read's first iteration, due to the screensaver_in_focus() check. See https://github.com/basecamp/omarchy/issues/2992 for an example report.

This addition will silently quit an opened Walker menu before launching the screensaver terminal. It is mildly intrusive, alas, as a return from screensaver will not present the pre-screensaver state exactly.
2025-12-15 08:24:31 -08:00
David Heinemeier Hansson
8357dd3da2 Use the traffic light metaphor for channel setting 2025-12-14 12:40:12 -08:00
David Heinemeier Hansson
860624d3f4 Add channel setting menu 2025-12-14 12:34:20 -08:00
Ryan Hughes
a15d3740a9 Increase faillock to 10 2025-12-14 15:32:40 -05:00
Ryan Hughes
7b05dcfe0c Merge pull request #1894 from sgruendel/mkinitcpio_module_thunderbolt
Add thunderbolt module in omarchy hook.
2025-12-14 15:25:55 -05:00
Ryan Hughes
df8b69bf27 Add portal restart to pickup changes 2025-12-14 15:24:48 -05:00
David Heinemeier Hansson
f39c2a91a5 Run the migration after switching channel 2025-12-14 12:24:20 -08:00
Ryan Hughes
906baa8fee Rework migration 2025-12-14 15:19:35 -05:00
Ryan Hughes
457b954db5 Move module to a separate file 2025-12-14 15:19:25 -05:00
Ryan Hughes
9b78e3c571 Enable btrfs quota to allow space-aware algorithms to work
Co-authored-by: Raul Salinas <nacapulque@gmail.com>

Replaces #3858

Fixes #3850
Fixes #3055
2025-12-14 14:23:28 -05:00
Ryan Hughes
88e9c9db49 Tell the user what we're doing 2025-12-14 14:19:37 -05:00
Ryan Hughes
64a8d7bb04 Add new default limine location for archinstall
Co-authored-by: madhurdhama <madhurdhama@gmail.com>
2025-12-14 13:06:43 -05:00
Ryan Hughes
c11a1c7989 Merge pull request #3492 from SoAp9035/fix-limine-uki-path
fix the UKI directory checks in omarchy-refresh-limine
2025-12-14 12:51:46 -05:00
Ryan Hughes
c37ef6d78c Update limine logic to check all .conf locations
Co-authored-by: Tjalve Aarflot <tjalve.github@proton.me>
2025-12-14 12:47:21 -05:00
Ryan Hughes
4d5dab3e32 Add walker emergency mode entry 2025-12-14 11:33:43 -05:00
Ryan Hughes
133d54f600 Refresh daemon if we change it 2025-12-14 11:32:39 -05:00
Ryan Hughes
4194c649a1 Restarts handled via systemd now 2025-12-14 11:09:16 -05:00
Ryan Hughes
33eabb0c88 Change to non-git version 2025-12-13 20:29:31 -05:00
Ryan Hughes
573cbd8ec3 Prevent idle while updating 2025-12-13 19:12:25 -05:00
Ryan Hughes
fec0731c17 Merge pull request #3857 from basecamp/share-picker
Add better portal share picker
2025-12-13 00:50:27 -05:00
Ryan Hughes
abffb0abfe Add hyprland-preview-share-picker 2025-12-13 00:44:24 -05:00
Ryan Hughes
5789c0a1fb Add themes for share pickers 2025-12-13 00:44:24 -05:00
Søren H Johansen
4e37a766ac Remove deprecated and unsupported Kitty settings (#3849)
The following options are no longer recognized by Kitty and caused warnings during startup:

window_padding_height

show_window_resize_notification

single_instance

They have been removed to keep the configuration compatible with current Kitty versions.
2025-12-12 10:21:45 +01:00
David Heinemeier Hansson
ccc147229e Force an update of the index DBs
This will prevent folks from ending up with index DBs that are out of
sync with their channel
2025-12-11 15:33:36 +01:00
David Heinemeier Hansson
6bd9d510d6 Add back alacritty as a default install to deal with machines that can't run Ghostty
Alacritty is more broadly supported
2025-12-11 15:30:25 +01:00
Alessandro Scalzulli
a22668fe17 fix(mako): show notifications over fullscreen apps (#3838)
Added line  layer=overlay to core.ini config
2025-12-11 15:23:48 +01:00
Ahum Maitra
1c59f1ae62 enhancement : Fixed the messy and long command (#3842) 2025-12-11 15:22:46 +01:00
David Heinemeier Hansson
c67856b9b6 Clarify purpose 2025-12-08 10:59:25 +01:00
Timo Hubois
12cba29e2e feat(bitwarden): Use float by default (#3734)
- Similar to current 1Password configuration
2025-12-08 10:54:24 +01:00
David Heinemeier Hansson
20fde4d71a Add new Ethereal background image
Closes #3741
Co-authored-by: @s-pra1ham
2025-12-08 10:53:19 +01:00
jazzzooo
8780db4bf0 feat: support mullvad-browser private window launch (#3756) 2025-12-08 10:41:06 +01:00
David Heinemeier Hansson
b2bd95197a Include webapps in omarchy-refresh-applications 2025-12-08 10:38:13 +01:00
Dakota Chambers
c90e93b5fc Add Fizzy webapp (#3759)
* Add Fizzy webapp

* Replace icon
2025-12-08 10:34:17 +01:00
Lennart Ochel
3af42f6be1 Fix omarchy-launch-browser for microsoft-edge (#3763) 2025-12-08 10:30:57 +01:00
robergd83
03f04386ec Enable independent screensaver effects on multi-monitor setups (#3781)
Updated the `omarchy-cmd-screensaver` script to allow screensaver effects to run independently on each monitor in multi-display configurations.

Previously, the effect loop waited for all animations on all monitors to finish before starting the next effect. With this change, each monitor handles its own effect cycle independently, improving smoothness and responsiveness in multi-monitor setups.
2025-12-08 10:27:07 +01:00
Dimitrie Hoekstra
9dc8e0c051 Enable tiny-dfr and t2fanrd services on T2 Macs (#3792) 2025-12-08 10:24:07 +01:00
David Wales
c5ebad0b67 Add example to enable three-finger drag in input configuration (#3798)
* Add example to enable three-finger drag

* Clarify comment

---------

Co-authored-by: David Heinemeier Hansson <david@hey.com>
2025-12-08 10:22:09 +01:00
Miras Mustimov
9691e638b2 fix: avoid layout shift on screensaver close (#3804) 2025-12-08 10:18:46 +01:00
Lennart Breede
fef12b6c0e Added Iosevka to font menu (#3811) 2025-12-08 10:14:25 +01:00
David Heinemeier Hansson
fc04525f03 Suspend is not properly supported on a lot of computers
Can't suggest an option that doesn't work much of the time
2025-12-08 10:10:28 +01:00
David Heinemeier Hansson
cfbfb2ffed Offer reboot if kernel was changed during channel change
Closes #3787
2025-12-08 09:50:48 +01:00
Wolfgang Woehl
ddf0d1e8e0 Exit screensaver when mouse moves or clicks (#3723)
Turns out there are control codes for tracking mouse actions in xterm-compatible terminal emulators (mind blown).

This patch adds mouse action awareness to our beloved screensaver setup:

- on setup it sends the respective control codes for movement and click detection
- in the main loop it opens up the input reader to read raw bytes and, thus, enable to detect even so much as a mouse's squeak

Personally, I love swiping my trackpad to exit screensaver. But the explicit pressing-a-key to exit is nice, also.

And I don't know if many people have jitter issues with their mouses or trackpads. Reckon, if they had they wouldn't get to see the glory that TTE is anyway, ever :)

This is tested and working in Ghostty. Sorry for the low-effort testing.
2025-12-02 12:09:02 +01:00
David Heinemeier Hansson
029000abb0 Overloading doesn't work when you have two tiling groups next to each other 2025-12-01 15:51:50 +01:00
Stefan Gründel
0a9e7205c3 add bolt to omarchy base packages 2025-12-01 13:34:24 +01:00
Stefan Gründel
a810b8058b Merge branch 'dev' into mkinitcpio_module_thunderbolt 2025-12-01 13:29:23 +01:00
David Heinemeier Hansson
b9792f7ba1 Don't submit empty passwords on lock screen 2025-12-01 11:10:21 +01:00
Stefan Gründel
9450ac868e fix expand icon in post install message (#3691) 2025-11-30 21:01:35 +01:00
Ahmed Abdelhafiez
add215c464 fix: restore last notification command typo (#3694) 2025-11-30 21:01:21 +01:00
David Heinemeier Hansson
306714f825 Ensure Walker service is started automatically on boot for new installations
Ref: #1684
2025-11-30 20:51:19 +01:00
Ryan Hughes
8a37f3dce7 Merge pull request #3683 from basecamp/dev
Omarchy 3.2.2
2025-11-28 20:13:08 -05:00
David Heinemeier Hansson
03be87b42c Bump for upcoming release 2025-11-28 16:50:09 -08:00
David Heinemeier Hansson
d6aa65d03c Rely on new TTE 0.14.1 settings 2025-11-28 16:45:36 -08:00
David Heinemeier Hansson
1514e4e501 Merge branch 'master' into dev 2025-11-28 07:15:24 -08:00
Gary Allan Howard
91cf593b76 feat: Silently move active workspace to another workspace. (#3546)
* feat: silently move active window to target workspace

Adds a quality-of-life keybind:

  SUPER + ALT + SHIFT + [1-9, 0]

This silently moves the active window from the active workspace to the
chosen destination workspace. The destination workspace re-tiles
correctly upon receiving the window.

The currently active workspace remains active, and the moved window
retains focus throughout the operation (no workspace switch, no
animation, no extra UI noise).

Why:
- Provides fast, silent window reshuffling during multitasking.
- Avoids disruptive workspace switching.
- Matches Omarchy’s focus on efficient Hyprland ergonomics.
- Keeps the user anchored to their current workflow while reorganizing.

Testing:
1. Open multiple windows across several workspaces.
2. Focus a window on the active workspace.
3. Press SUPER + ALT + [1–9, 0].
4. Verify the window appears on the target workspace and re-tiles.
5. Confirm the **source workspace stays active**.
6. Confirm **focus remains on the moved window**.
7. Repeat with multiple applications and workspace combinations.

* We've frozen this old tiling config

* Put on Super + Shift + Alt

This is an alternative version of an existing move

* Fix description

---------

Co-authored-by: David Heinemeier Hansson <david@hey.com>
2025-11-28 07:14:51 -08:00
Raymond46
7327f95aa1 feat: restore the last notification keybinding (#3580)
* feat: restore the last notification.

* Stick with comma

---------

Co-authored-by: David Heinemeier Hansson <david@hey.com>
2025-11-28 07:09:04 -08:00
Alexander
a8b8eb6f5e Reset keyboard layout to default first one on the lock screen (#3541) 2025-11-28 07:06:54 -08:00
Jeff Nunn
16d0133037 Remove theme menu now sorts themes alphabetically (like list themes does) (#3635) 2025-11-28 07:05:08 -08:00
Patrick Lenz
68c3917386 Fix usage message in omarchy-branch-set script (#3634) 2025-11-28 06:58:18 -08:00
Jeff Nunn
2cfc3b0f9e Fixes Ristretto cursor visibility in Ghostty/neovim (#3620) 2025-11-28 06:57:44 -08:00
David Heinemeier Hansson
96f140b93f Do the update too 2025-11-28 05:03:44 -08:00
David Heinemeier Hansson
c97995b9ea Can just do it in one go 2025-11-28 05:03:04 -08:00
David Heinemeier Hansson
8d61c73465 Fix channel updating for edge 2025-11-28 05:00:34 -08:00
David Heinemeier Hansson
2b3c48b725 Fix issue with package DBs being wrong when switching to stable channel 2025-11-28 04:59:25 -08:00
David Heinemeier Hansson
e15b2ae78c Fix emoji picker would use a 3-column design and that it would bleed into other menus
Closes #3604
2025-11-28 13:41:05 +01:00
David Heinemeier Hansson
30a5f5846c Tweaks 2025-11-28 13:15:15 +01:00
Nathan Willson
7e44ab33ac feat: show link to changelog in update confirm window (#3651)
* Update version

* feat: show link to changelog in update confirm window

* Link to scrollable changelog

You may be updating more than one version at the time.

---------

Co-authored-by: Ryan Hughes <ryan@heyoodle.com>
Co-authored-by: David Heinemeier Hansson <david@hey.com>
2025-11-28 13:13:16 +01:00
David Heinemeier Hansson
6a181adf0d Reset all package DBs when changing channel 2025-11-28 13:03:55 +01:00
Ahmet Burhan Kayalı
930246aee5 Merge branch 'basecamp:master' into fix-limine-uki-path 2025-11-26 10:22:13 +03:00
SoAp9035
f9450e1fb7 Fix limine UKI cleanup path 2025-11-21 10:59:08 +03:00
Stefan Gründel
d6dc1c7b86 add bolt to omarchy base packages 2025-09-27 13:55:46 +02:00
Stefan Gruendel
e39269f9f0 add migration script 2025-09-23 20:52:17 +02:00
Stefan Gruendel
74f2900db1 Add thunderbolt module in omarchy hook. 2025-09-23 06:40:56 +02:00
263 changed files with 1617 additions and 2238 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

View File

@@ -1,7 +1,7 @@
#!/bin/bash #!/bin/bash
if (($# == 0)); then if (($# == 0)); then
echo "Usage: omarchy-channel-set [master|dev]" echo "Usage: omarchy-branch-set [master|dev]"
exit 1 exit 1
else else
branch="$1" branch="$1"

View File

@@ -9,7 +9,9 @@ fi
case "$channel" in case "$channel" in
"stable") omarchy-branch-set "master" && omarchy-refresh-pacman "stable" ;; "stable") omarchy-branch-set "master" && omarchy-refresh-pacman "stable" ;;
"edge") omarchy-branch-set "edge" && omarchy-refresh-pacman "stable" ;; "edge") omarchy-branch-set "master" && omarchy-refresh-pacman "edge" ;;
"dev") omarchy-branch-set "dev" && omarchy-refresh-pacman "edge" ;; "dev") omarchy-branch-set "dev" && omarchy-refresh-pacman "edge" ;;
*) echo "Unknown channel: $channel"; exit 1; ;; *) echo "Unknown channel: $channel"; exit 1; ;;
esac esac
omarchy-update -y

View File

@@ -11,21 +11,23 @@ exit_screensaver() {
exit 0 exit 0
} }
# Exit the screensaver on signals and input from keyboard and mouse
trap exit_screensaver SIGINT SIGTERM SIGHUP SIGQUIT trap exit_screensaver SIGINT SIGTERM SIGHUP SIGQUIT
printf '\033]11;rgb:00/00/00\007' # Set background color to black printf '\033]11;rgb:00/00/00\007' # Set background color to black
hyprctl keyword cursor:invisible true &>/dev/null hyprctl keyword cursor:invisible true &>/dev/null
while true; do tty=$(tty 2>/dev/null)
effect=$(tte 2>&1 | grep -oP '{\K[^}]+' | tr ',' ' ' | tr ' ' '\n' | sed -n '/^beams$/,$p' | grep -Ev '^(dev_worm)$' | sort -u | shuf -n1)
while true; do
tte -i ~/.config/omarchy/branding/screensaver.txt \ tte -i ~/.config/omarchy/branding/screensaver.txt \
--frame-rate 120 --canvas-width 0 --canvas-height 0 --reuse-canvas --anchor-canvas c --anchor-text c\ --frame-rate 120 --canvas-width 0 --canvas-height 0 --reuse-canvas --anchor-canvas c --anchor-text c\
--no-eol --no-restore-cursor $effect & --random-effect --exclude-effects dev_worm \
--no-eol --no-restore-cursor &
while pgrep -x tte >/dev/null; do while pgrep -t "${tty#/dev/}" -x tte >/dev/null; do
if read -n 1 -t 1 || ! screensaver_in_focus; then if read -n1 -t 1 || ! screensaver_in_focus; then
exit_screensaver exit_screensaver
fi fi
done done

View File

@@ -1,7 +1,34 @@
#!/bin/bash #!/bin/bash
NO_SUDO=false
PRINT_ONLY=false
while [[ $# -gt 0 ]]; do
case "$1" in
--no-sudo)
NO_SUDO=true
shift
;;
--print)
PRINT_ONLY=true
shift
;;
*)
echo "Unknown option: $1"
echo "Usage: omarchy-debug [--no-sudo] [--print]"
exit 1
;;
esac
done
LOG_FILE="/tmp/omarchy-debug.log" LOG_FILE="/tmp/omarchy-debug.log"
if [ "$NO_SUDO" = true ]; then
DMESG_OUTPUT="(skipped - --no-sudo flag used)"
else
DMESG_OUTPUT="$(sudo dmesg)"
fi
cat > "$LOG_FILE" <<EOF cat > "$LOG_FILE" <<EOF
Date: $(date) Date: $(date)
Hostname: $(hostname) Hostname: $(hostname)
@@ -15,7 +42,7 @@ $(inxi -Farz)
========================================= =========================================
DMESG DMESG
========================================= =========================================
$(sudo dmesg) $DMESG_OUTPUT
========================================= =========================================
JOURNALCTL (CURRENT BOOT, ERRORS ONLY) JOURNALCTL (CURRENT BOOT, ERRORS ONLY)
@@ -28,6 +55,11 @@ INSTALLED PACKAGES
$({ expac -S '%n %v (%r)' $(pacman -Qqe) 2>/dev/null; comm -13 <(pacman -Sql | sort) <(pacman -Qqe | sort) | xargs -r expac -Q '%n %v (AUR)'; } | sort) $({ expac -S '%n %v (%r)' $(pacman -Qqe) 2>/dev/null; comm -13 <(pacman -Sql | sort) <(pacman -Qqe | sort) | xargs -r expac -Q '%n %v (AUR)'; } | sort)
EOF EOF
if [ "$PRINT_ONLY" = true ]; then
cat "$LOG_FILE"
exit 0
fi
OPTIONS=("View log" "Save in current directory") OPTIONS=("View log" "Save in current directory")
if ping -c 1 8.8.8.8 >/dev/null 2>&1; then if ping -c 1 8.8.8.8 >/dev/null 2>&1; then
OPTIONS=("Upload log" "${OPTIONS[@]}") OPTIONS=("Upload log" "${OPTIONS[@]}")

View File

@@ -41,7 +41,7 @@ install_php() {
install_node() { install_node() {
echo -e "Installing Node.js...\n" echo -e "Installing Node.js...\n"
mise use --global node@lts mise use --global node
} }
case "$1" in case "$1" in

View File

@@ -12,7 +12,7 @@ if [[ -n "$choices" ]]; then
for db in $choices; do for db in $choices; do
case $db in case $db in
MySQL) sudo docker run -d --restart unless-stopped -p "127.0.0.1:3306:3306" --name=mysql8 -e MYSQL_ROOT_PASSWORD= -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql:8.4 ;; MySQL) sudo docker run -d --restart unless-stopped -p "127.0.0.1:3306:3306" --name=mysql8 -e MYSQL_ROOT_PASSWORD= -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql:8.4 ;;
PostgreSQL) sudo docker run -d --restart unless-stopped -p "127.0.0.1:5432:5432" --name=postgres17 -e POSTGRES_HOST_AUTH_METHOD=trust postgres:17 ;; PostgreSQL) sudo docker run -d --restart unless-stopped -p "127.0.0.1:5432:5432" --name=postgres18 -e POSTGRES_HOST_AUTH_METHOD=trust postgres:18 ;;
MariaDB) sudo docker run -d --restart unless-stopped -p "127.0.0.1:3306:3306" --name=mariadb11 -e MARIADB_ROOT_PASSWORD= -e MARIADB_ALLOW_EMPTY_ROOT_PASSWORD=true mariadb:11.8 ;; MariaDB) sudo docker run -d --restart unless-stopped -p "127.0.0.1:3306:3306" --name=mariadb11 -e MARIADB_ROOT_PASSWORD= -e MARIADB_ALLOW_EMPTY_ROOT_PASSWORD=true mariadb:11.8 ;;
Redis) sudo docker run -d --restart unless-stopped -p "127.0.0.1:6379:6379" --name=redis redis:7 ;; Redis) sudo docker run -d --restart unless-stopped -p "127.0.0.1:6379:6379" --name=redis redis:7 ;;
MongoDB) sudo docker run -d --restart unless-stopped -p "127.0.0.1:27017:27017" --name mongodb -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=admin123 mongo:noble ;; MongoDB) sudo docker run -d --restart unless-stopped -p "127.0.0.1:27017:27017" --name mongodb -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=admin123 mongo:noble ;;

View File

@@ -5,4 +5,4 @@ omarchy-pkg-add dropbox dropbox-cli libappindicator-gtk3 python-gpgme nautilus-d
echo "Starting Dropbox..." echo "Starting Dropbox..."
uwsm-app -- dropbox-cli start &>/dev/null & uwsm-app -- dropbox-cli start &>/dev/null &
echo "See Dropbox icon behind hover tray in top right and right-click for setup." echo "See Dropbox icon behind hover tray in top right and right-click for setup."

3
bin/omarchy-launch-audio Executable file
View File

@@ -0,0 +1,3 @@
#!/bin/bash
omarchy-launch-or-focus-tui wiremix

View File

@@ -3,8 +3,10 @@
default_browser=$(xdg-settings get default-web-browser) default_browser=$(xdg-settings get default-web-browser)
browser_exec=$(sed -n 's/^Exec=\([^ ]*\).*/\1/p' {~/.local,~/.nix-profile,/usr}/share/applications/$default_browser 2>/dev/null | head -1) browser_exec=$(sed -n 's/^Exec=\([^ ]*\).*/\1/p' {~/.local,~/.nix-profile,/usr}/share/applications/$default_browser 2>/dev/null | head -1)
if [[ $browser_exec =~ (firefox|zen|librewolf) ]]; then if [[ $browser_exec =~ (firefox|zen|librewolf|mullvad) ]]; then
private_flag="--private-window" private_flag="--private-window"
elif [[ $browser_exec =~ edge ]]; then
private_flag="--inprivate"
else else
private_flag="--incognito" private_flag="--incognito"
fi fi

View File

@@ -3,7 +3,7 @@
omarchy-cmd-present "$EDITOR" || EDITOR=nvim omarchy-cmd-present "$EDITOR" || EDITOR=nvim
case "$EDITOR" in case "$EDITOR" in
nvim | vim | nano | micro | hx | helix) nvim | vim | nano | micro | hx | helix | fresh)
exec omarchy-launch-tui "$EDITOR" "$@" exec omarchy-launch-tui "$EDITOR" "$@"
;; ;;
*) *)

View File

@@ -1,4 +1,4 @@
#!/bin/bash #!/bin/bash
cmd="$*" cmd="$*"
exec setsid uwsm-app -- xdg-terminal-exec --app-id=org.omarchy.terminal --title=Omarchy -e bash -c "omarchy-show-logo; $cmd; omarchy-show-done" exec setsid uwsm-app -- xdg-terminal-exec --app-id=org.omarchy.terminal --title=Omarchy -e bash -c "omarchy-show-logo; $cmd; if [ \$? -ne 130 ]; then omarchy-show-done; fi"

3
bin/omarchy-launch-opencode Executable file
View File

@@ -0,0 +1,3 @@
#!/bin/bash
exec setsid uwsm-app -- xdg-terminal-exec --app-id=org.omarchy.opencode -e bash -c 'cd ~/Work; opencode'

View File

@@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
APP_ID="org.omarchy.$(basename $1)" APP_ID="org.omarchy.$(basename "$1")"
LAUNCH_COMMAND="omarchy-launch-tui $@" LAUNCH_COMMAND="omarchy-launch-tui $@"
exec omarchy-launch-or-focus "$APP_ID" "$LAUNCH_COMMAND" exec omarchy-launch-or-focus "$APP_ID" "$LAUNCH_COMMAND"

View File

@@ -13,6 +13,9 @@ if [[ -f ~/.local/state/omarchy/toggles/screensaver-off ]] && [[ $1 != "force" ]
exit 1 exit 1
fi fi
# Silently quit Walker on overlay
walker -q
focused=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true).name') focused=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true).name')
terminal=$(xdg-terminal-exec --print-id) terminal=$(xdg-terminal-exec --print-id)

View File

@@ -3,6 +3,9 @@
# Lock the screen # Lock the screen
pidof hyprlock || hyprlock & pidof hyprlock || hyprlock &
# Set keyboard layout to default (first layout)
hyprctl switchxkblayout all 0 > /dev/null 2>&1
# Ensure 1password is locked # Ensure 1password is locked
if pgrep -x "1password" >/dev/null; then if pgrep -x "1password" >/dev/null; then
1password --lock & 1password --lock &

View File

@@ -173,7 +173,7 @@ show_setup_menu() {
options="$options\n Defaults\n󰱔 DNS\n Security\n Config" options="$options\n Defaults\n󰱔 DNS\n Security\n Config"
case $(menu "Setup" "$options") in case $(menu "Setup" "$options") in
*Audio*) omarchy-launch-or-focus-tui wiremix ;; *Audio*) omarchy-launch-audio ;;
*Wifi*) omarchy-launch-wifi ;; *Wifi*) omarchy-launch-wifi ;;
*Bluetooth*) omarchy-launch-bluetooth ;; *Bluetooth*) omarchy-launch-bluetooth ;;
*Power*) show_setup_power_menu ;; *Power*) show_setup_power_menu ;;
@@ -276,15 +276,16 @@ show_install_ai_menu() {
echo ollama echo ollama
) )
case $(menu "Install" "󱚤 Claude Code\n󱚤 Cursor CLI\n󱚤 Gemini\n󱚤 OpenAI Codex\n󱚤 LM Studio\n󱚤 Ollama\n󱚤 Crush\n󱚤 opencode") in case $(menu "Install" " Dictation [AUR]\n󱚤 Claude Code\n󱚤 Copilot CLI [AUR]\n󱚤 Cursor CLI\n󱚤 Gemini\n󱚤 OpenAI Codex\n󱚤 LM Studio\n󱚤 Ollama\n󱚤 Crush") in
*Dictation*) present_terminal "echo 'Installing Hyprwhspr from AUR...'; yay -S --noconfirm hyprwhspr && hyprwhspr setup" ;;
*Claude*) install "Claude Code" "claude-code" ;; *Claude*) install "Claude Code" "claude-code" ;;
*Copilot*) aur_install "Copilot CLI" "github-copilot-cli" ;;
*Cursor*) install "Cursor CLI" "cursor-cli" ;; *Cursor*) install "Cursor CLI" "cursor-cli" ;;
*OpenAI*) install "OpenAI Codex" "openai-codex-bin" ;;
*Gemini*) install "Gemini" "gemini-cli" ;; *Gemini*) install "Gemini" "gemini-cli" ;;
*OpenAI*) install "OpenAI Codex" "openai-codex" ;;
*Studio*) install "LM Studio" "lmstudio" ;; *Studio*) install "LM Studio" "lmstudio" ;;
*Ollama*) install "Ollama" $ollama_pkg ;; *Ollama*) install "Ollama" $ollama_pkg ;;
*Crush*) install "Crush" "crush-bin" ;; *Crush*) install "Crush" "crush-bin" ;;
*opencode*) install "opencode" "opencode" ;;
*) show_install_menu ;; *) show_install_menu ;;
esac esac
} }
@@ -302,18 +303,19 @@ show_install_gaming_menu() {
show_install_style_menu() { show_install_style_menu() {
case $(menu "Install" "󰸌 Theme\n Background\n Font") in case $(menu "Install" "󰸌 Theme\n Background\n Font") in
*Theme*) present_terminal omarchy-theme-install ;; *Theme*) present_terminal omarchy-theme-install ;;
*Background*) nautilus ~/.config/omarchy/current/theme/backgrounds ;; *Background*) omarchy-theme-bg-install ;;
*Font*) show_install_font_menu ;; *Font*) show_install_font_menu ;;
*) show_install_menu ;; *) show_install_menu ;;
esac esac
} }
show_install_font_menu() { show_install_font_menu() {
case $(menu "Install" " Meslo LG Mono\n Fira Code\n Victor Code\n Bistream Vera Mono" "--width 350") in case $(menu "Install" " Meslo LG Mono\n Fira Code\n Victor Code\n Bistream Vera Mono\n Iosevka" "--width 350") in
*Meslo*) install_font "Meslo LG Mono" "ttf-meslo-nerd" "MesloLGL Nerd Font" ;; *Meslo*) install_font "Meslo LG Mono" "ttf-meslo-nerd" "MesloLGL Nerd Font" ;;
*Fira*) install_font "Fira Code" "ttf-firacode-nerd" "FiraCode Nerd Font" ;; *Fira*) install_font "Fira Code" "ttf-firacode-nerd" "FiraCode Nerd Font" ;;
*Victor*) install_font "Victor Code" "ttf-victor-mono-nerd" "VictorMono Nerd Font" ;; *Victor*) install_font "Victor Code" "ttf-victor-mono-nerd" "VictorMono Nerd Font" ;;
*Bistream*) install_font "Bistream Vera Code" "ttf-bitstream-vera-mono-nerd" "BitstromWera Nerd Font" ;; *Bistream*) install_font "Bistream Vera Code" "ttf-bitstream-vera-mono-nerd" "BitstromWera Nerd Font" ;;
*Iosevka*) install_font "Iosevka" "ttf-iosevka-nerd" "Iosevka Nerd Font Mono" ;;
*) show_install_menu ;; *) show_install_menu ;;
esac esac
} }
@@ -364,10 +366,11 @@ show_install_elixir_menu() {
} }
show_remove_menu() { show_remove_menu() {
case $(menu "Remove" "󰣇 Package\n Web App\n TUI\n󰸌 Theme\n󰍲 Windows\n󰈷 Fingerprint\n Fido2") in case $(menu "Remove" "󰣇 Package\n Web App\n TUI\n󰵮 Development\n󰸌 Theme\n󰍲 Windows\n󰈷 Fingerprint\n Fido2") in
*Package*) terminal omarchy-pkg-remove ;; *Package*) terminal omarchy-pkg-remove ;;
*Web*) present_terminal omarchy-webapp-remove ;; *Web*) present_terminal omarchy-webapp-remove ;;
*TUI*) present_terminal omarchy-tui-remove ;; *TUI*) present_terminal omarchy-tui-remove ;;
*Development*) show_remove_development_menu ;;
*Theme*) present_terminal omarchy-theme-remove ;; *Theme*) present_terminal omarchy-theme-remove ;;
*Windows*) present_terminal "omarchy-windows-vm remove" ;; *Windows*) present_terminal "omarchy-windows-vm remove" ;;
*Fingerprint*) present_terminal "omarchy-setup-fingerprint --remove" ;; *Fingerprint*) present_terminal "omarchy-setup-fingerprint --remove" ;;
@@ -376,9 +379,54 @@ show_remove_menu() {
esac esac
} }
show_remove_development_menu() {
case $(menu "Remove" "󰫏 Ruby on Rails\n JavaScript\n Go\n PHP\n Python\n Elixir\n Zig\n Rust\n Java\n .NET\n OCaml\n Clojure") in
*Rails*) present_terminal "omarchy-remove-dev-env ruby" ;;
*JavaScript*) show_remove_javascript_menu ;;
*Go*) present_terminal "omarchy-remove-dev-env go" ;;
*PHP*) show_remove_php_menu ;;
*Python*) present_terminal "omarchy-remove-dev-env python" ;;
*Elixir*) show_remove_elixir_menu ;;
*Zig*) present_terminal "omarchy-remove-dev-env zig" ;;
*Rust*) present_terminal "omarchy-remove-dev-env rust" ;;
*Java*) present_terminal "omarchy-remove-dev-env java" ;;
*NET*) present_terminal "omarchy-remove-dev-env dotnet" ;;
*OCaml*) present_terminal "omarchy-remove-dev-env ocaml" ;;
*Clojure*) present_terminal "omarchy-remove-dev-env clojure" ;;
*) show_remove_menu ;;
esac
}
show_remove_javascript_menu() {
case $(menu "Remove" " Node.js\n Bun\n Deno") in
*Node*) present_terminal "omarchy-remove-dev-env node" ;;
*Bun*) present_terminal "omarchy-remove-dev-env bun" ;;
*Deno*) present_terminal "omarchy-remove-dev-env deno" ;;
*) show_remove_development_menu ;;
esac
}
show_remove_php_menu() {
case $(menu "Remove" " PHP\n Laravel\n Symfony") in
*PHP*) present_terminal "omarchy-remove-dev-env php" ;;
*Laravel*) present_terminal "omarchy-remove-dev-env laravel" ;;
*Symfony*) present_terminal "omarchy-remove-dev-env symfony" ;;
*) show_remove_development_menu ;;
esac
}
show_remove_elixir_menu() {
case $(menu "Remove" " Elixir\n Phoenix") in
*Elixir*) present_terminal "omarchy-remove-dev-env elixir" ;;
*Phoenix*) present_terminal "omarchy-remove-dev-env phoenix" ;;
*) show_remove_development_menu ;;
esac
}
show_update_menu() { show_update_menu() {
case $(menu "Update" " Omarchy\n Config\n󰸌 Extra Themes\n Process\n󰇅 Hardware\n Firmware\n Password\n Timezone\n Time") in case $(menu "Update" " Omarchy\n󰔫 Channel\n Config\n󰸌 Extra Themes\n Process\n󰇅 Hardware\n Firmware\n Password\n Timezone\n Time") in
*Omarchy*) present_terminal omarchy-update ;; *Omarchy*) present_terminal omarchy-update ;;
*Channel*) show_update_channel_menu ;;
*Config*) show_update_config_menu ;; *Config*) show_update_config_menu ;;
*Themes*) present_terminal omarchy-theme-update ;; *Themes*) present_terminal omarchy-theme-update ;;
*Process*) show_update_process_menu ;; *Process*) show_update_process_menu ;;
@@ -391,6 +439,14 @@ show_update_menu() {
esac esac
} }
show_update_channel_menu() {
case $(menu "Update channel" "🟢 Stable\n🟡 Edge\n🔴 Dev") in
*Stable*) present_terminal "omarchy-channel-set stable" ;;
*Edge*) present_terminal "omarchy-channel-set edge" ;;
*Dev*) present_terminal "omarchy-channel-set dev" ;;
*) show_update_menu ;;
esac
}
show_update_process_menu() { show_update_process_menu() {
case $(menu "Restart" " Hypridle\n Hyprsunset\n Swayosd\n󰌧 Walker\n󰍜 Waybar") in case $(menu "Restart" " Hypridle\n Hyprsunset\n Swayosd\n󰌧 Walker\n󰍜 Waybar") in
*Hypridle*) omarchy-restart-hypridle ;; *Hypridle*) omarchy-restart-hypridle ;;
@@ -434,10 +490,9 @@ show_update_password_menu() {
} }
show_system_menu() { show_system_menu() {
case $(menu "System" " Lock\n󱄄 Screensaver\n󰤄 Suspend\n󰜉 Restart\n󰐥 Shutdown") in case $(menu "System" " Lock\n󱄄 Screensaver\n󰜉 Restart\n󰐥 Shutdown") in
*Lock*) omarchy-lock-screen ;; *Lock*) omarchy-lock-screen ;;
*Screensaver*) omarchy-launch-screensaver force ;; *Screensaver*) omarchy-launch-screensaver force ;;
*Suspend*) systemctl suspend ;;
*Restart*) omarchy-cmd-reboot ;; *Restart*) omarchy-cmd-reboot ;;
*Shutdown*) omarchy-cmd-shutdown ;; *Shutdown*) omarchy-cmd-shutdown ;;
*) back_to show_main_menu ;; *) back_to show_main_menu ;;
@@ -468,6 +523,10 @@ go_to_menu() {
esac esac
} }
# Allow user extensions and overrides
USER_EXTENSIONS="$HOME/.config/omarchy/extensions/menu.sh"
[[ -f $USER_EXTENSIONS ]] && source "$USER_EXTENSIONS"
if [[ -n "$1" ]]; then if [[ -n "$1" ]]; then
BACK_TO_EXIT=true BACK_TO_EXIT=true
go_to_menu "$1" go_to_menu "$1"

View File

@@ -212,18 +212,26 @@ prioritize_entries() {
cut -f2- cut -f2-
} }
monitor_height=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true) | .height') output_keybindings() {
menu_height=$((monitor_height * 40 / 100)) build_keymap_cache
build_keymap_cache {
dynamic_bindings
static_bindings
} |
sort -u |
parse_keycodes |
parse_bindings |
prioritize_entries
}
{ if [[ "$1" == "--print" || "$1" == "-p" ]]; then
dynamic_bindings output_keybindings
static_bindings else
} | monitor_height=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true) | .height')
sort -u | menu_height=$((monitor_height * 40 / 100))
parse_keycodes |
parse_bindings | output_keybindings |
prioritize_entries | walker --dmenu -p 'Keybindings' --width 800 --height "$menu_height"
walker --dmenu -p 'Keybindings' --width 800 --height "$menu_height" fi

View File

@@ -1,7 +0,0 @@
#!/bin/bash
PINNED_PACKAGES_FILE="$OMARCHY_PATH/install/packages.pinned"
if [[ -f $PINNED_PACKAGES_FILE ]]; then
tr '\r\n' ',' <"$PINNED_PACKAGES_FILE" | sed 's/,$//'
fi

View File

@@ -10,4 +10,8 @@ mkdir -p ~/.local/share/applications
cp ~/.local/share/omarchy/applications/*.desktop ~/.local/share/applications/ cp ~/.local/share/omarchy/applications/*.desktop ~/.local/share/applications/
cp ~/.local/share/omarchy/applications/hidden/*.desktop ~/.local/share/applications/ cp ~/.local/share/omarchy/applications/hidden/*.desktop ~/.local/share/applications/
# Refresh the webapps
bash $OMARCHY_PATH/install/packaging/icons.sh
bash $OMARCHY_PATH/install/packaging/webapps.sh
update-desktop-database ~/.local/share/applications update-desktop-database ~/.local/share/applications

19
bin/omarchy-refresh-chromium Executable file
View File

@@ -0,0 +1,19 @@
#!/bin/bash
CONFIG_FILE="$HOME/.config/chromium-flags.conf"
INSTALL_GOOGLE_ACCOUNTS=false
# Check if google accounts were installed
if [[ -f "$CONFIG_FILE" ]] && \
grep -q -- "--oauth2-client-id" "$CONFIG_FILE" && \
grep -q -- "--oauth2-client-secret" "$CONFIG_FILE"; then
INSTALL_GOOGLE_ACCOUNTS=true
fi
# Refresh the Chromium configuration
omarchy-refresh-config chromium-flags.conf
# Re-install Google accounts if previously configured
if [[ "$INSTALL_GOOGLE_ACCOUNTS" == true ]]; then
omarchy-install-chromium-google-account
fi

View File

@@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
if [[ -f /boot/EFI/linux/omarchy_linux.efi ]] && [[ -f /boot/EFI/linux/$(cat /etc/machine-id)_linux.efi ]]; then if [[ -f /boot/EFI/Linux/omarchy_linux.efi ]] && [[ -f /boot/EFI/Linux/$(cat /etc/machine-id)_linux.efi ]]; then
echo "Cleanup extra UKI" echo "Cleanup extra UKI"
sudo rm -f /boot/EFI/Linux/$(cat /etc/machine-id)_linux.efi sudo rm -f /boot/EFI/Linux/$(cat /etc/machine-id)_linux.efi
fi fi

View File

@@ -17,4 +17,6 @@ else
fi fi
echo echo
sudo pacman -Syu --noconfirm
# Reset all package DBs and then update
sudo pacman -Syyu --noconfirm

View File

@@ -3,6 +3,7 @@
# Ensure walker is set to autostart # Ensure walker is set to autostart
mkdir -p ~/.config/autostart/ mkdir -p ~/.config/autostart/
cp $OMARCHY_PATH/autostart/walker.desktop ~/.config/autostart/ cp $OMARCHY_PATH/autostart/walker.desktop ~/.config/autostart/
systemctl --user daemon-reload
omarchy-refresh-config walker/config.toml omarchy-refresh-config walker/config.toml
omarchy-refresh-config elephant/calc.toml omarchy-refresh-config elephant/calc.toml

102
bin/omarchy-remove-dev-env Executable file
View File

@@ -0,0 +1,102 @@
#!/bin/bash
if [[ -z "$1" ]]; then
echo "Usage: omarchy-remove-dev-env <ruby|node|bun|deno|go|php|laravel|symfony|python|elixir|phoenix|zig|rust|java|dotnet|ocaml|clojure>" >&2
exit 1
fi
remove_php() {
sudo pacman -Rns --noconfirm php composer php-sqlite xdebug 2>/dev/null || true
}
case "$1" in
ruby)
echo -e "Removing Ruby...\n"
mise uninstall ruby --all
mise rm -g ruby
rm -f ~/.gemrc
;;
node)
echo -e "Removing Node.js...\n"
mise uninstall node --all
mise rm -g node
;;
bun)
echo -e "Removing Bun...\n"
mise uninstall bun --all
mise rm -g bun
;;
deno)
echo -e "Removing Deno...\n"
mise uninstall deno --all
mise rm -g deno
;;
go)
echo -e "Removing Go...\n"
mise uninstall go --all
mise rm -g go
;;
php)
echo -e "Removing PHP...\n"
remove_php
;;
laravel)
echo -e "Removing Laravel...\n"
composer global remove laravel/installer 2>/dev/null || true
;;
symfony)
echo -e "Removing Symfony CLI...\n"
sudo pacman -Rns --noconfirm symfony-cli 2>/dev/null || true
;;
python)
echo -e "Removing Python...\n"
mise uninstall python --all
mise rm -g python
rm -rf ~/.local/bin/uv ~/.local/bin/uvx ~/.cargo/bin/uv 2>/dev/null || true
;;
elixir|phoenix)
echo -e "Removing Elixir/Erlang...\n"
mise uninstall elixir --all
mise uninstall erlang --all
mise rm -g elixir
mise rm -g erlang
;;
zig)
echo -e "Removing Zig...\n"
mise uninstall zig --all
mise uninstall zls --all
mise rm -g zig
mise rm -g zls
;;
rust)
echo -e "Removing Rust...\n"
rustup self uninstall -y 2>/dev/null || true
;;
java)
echo -e "Removing Java...\n"
mise uninstall java --all
mise rm -g java
;;
dotnet)
echo -e "Removing .NET...\n"
mise uninstall dotnet --all
mise rm -g dotnet
;;
ocaml)
echo -e "Removing OCaml...\n"
opam switch remove default -y 2>/dev/null || true
rm -rf ~/.opam 2>/dev/null || true
sudo rm -f /usr/local/bin/opam 2>/dev/null || true
;;
clojure)
echo -e "Removing Clojure...\n"
mise uninstall clojure --all
mise rm -g clojure
;;
*)
echo "Unknown environment: $1"
exit 1
;;
esac
echo -e "\nDone!"

View File

@@ -1,22 +1,22 @@
#!/bin/bash #!/bin/bash
pkill elephant restart_services() {
pkill walker if systemctl --user is-enabled elephant.service &>/dev/null; then
systemctl --user restart elephant.service
fi
if systemctl --user is-enabled app-walker@autostart.service &>/dev/null; then
systemctl --user restart app-walker@autostart.service
else
echo -e "\e[31mUnable to restart Walker -- RESTART MANUALLY\e[0m"
fi
}
# Detect if we're running as root (from pacman hook)
if [[ $EUID -eq 0 ]]; then if [[ $EUID -eq 0 ]]; then
# Get the owner of this script to determine which user to run as
SCRIPT_OWNER=$(stat -c '%U' "$0") SCRIPT_OWNER=$(stat -c '%U' "$0")
USER_UID=$(id -u "$SCRIPT_OWNER") USER_UID=$(id -u "$SCRIPT_OWNER")
# Restart services as the script owner
systemd-run --uid="$SCRIPT_OWNER" --setenv=XDG_RUNTIME_DIR="/run/user/$USER_UID" \ systemd-run --uid="$SCRIPT_OWNER" --setenv=XDG_RUNTIME_DIR="/run/user/$USER_UID" \
bash -c " bash -c "$(declare -f restart_services); restart_services"
systemctl --user restart elephant.service
setsid walker --gapplication-service &
"
else else
elephant service enable 2>/dev/null restart_services
systemctl --user restart elephant.service
setsid walker --gapplication-service &
fi fi

7
bin/omarchy-theme-bg-install Executable file
View File

@@ -0,0 +1,7 @@
#!/bin/bash
CURRENT_THEME_NAME=$(cat "$HOME/.config/omarchy/current/theme.name")
THEME_USER_BACKGROUNDS="$HOME/.config/omarchy/backgrounds/$CURRENT_THEME_NAME"
mkdir -p "$THEME_USER_BACKGROUNDS"
nautilus "$THEME_USER_BACKGROUNDS"

View File

@@ -2,10 +2,12 @@
# Cycles through the background images available # Cycles through the background images available
BACKGROUNDS_DIR="$HOME/.config/omarchy/current/theme/backgrounds/" THEME_NAME=$(cat "$HOME/.config/omarchy/current/theme.name" 2>/dev/null)
THEME_BACKGROUNDS_PATH="$HOME/.config/omarchy/current/theme/backgrounds/"
USER_BACKGROUNDS_PATH="$HOME/.config/omarchy/backgrounds/$THEME_NAME/"
CURRENT_BACKGROUND_LINK="$HOME/.config/omarchy/current/background" CURRENT_BACKGROUND_LINK="$HOME/.config/omarchy/current/background"
mapfile -d '' -t BACKGROUNDS < <(find -L "$BACKGROUNDS_DIR" -type f -print0 | sort -z) mapfile -d '' -t BACKGROUNDS < <(find -L "$USER_BACKGROUNDS_PATH" "$THEME_BACKGROUNDS_PATH" -maxdepth 1 -type f -print0 2>/dev/null | sort -z)
TOTAL=${#BACKGROUNDS[@]} TOTAL=${#BACKGROUNDS[@]}
if [[ $TOTAL -eq 0 ]]; then if [[ $TOTAL -eq 0 ]]; then

View File

@@ -1,3 +1,9 @@
#!/bin/bash #!/bin/bash
basename "$(realpath "$HOME/.config/omarchy/current/theme")" | sed -E 's/(^|-)([a-z])/\1\u\2/g; s/-/ /g' THEME_NAME_PATH="$HOME/.config/omarchy/current/theme.name"
if [[ -f $THEME_NAME_PATH ]]; then
cat $THEME_NAME_PATH | sed -E 's/(^|-)([a-z])/\1\u\2/g; s/-/ /g'
else
echo "Unknown"
fi

View File

@@ -1,5 +1,8 @@
#!/bin/bash #!/bin/bash
find ~/.config/omarchy/themes/ -mindepth 1 -maxdepth 1 \( -type d -o -type l \) | sort | while read -r path; do {
echo "$(basename "$path" | sed -E 's/(^|-)([a-z])/\1\u\2/g; s/-/ /g')" find ~/.config/omarchy/themes/ -mindepth 1 -maxdepth 1 \( -type d -o -type l \) -printf '%f\n'
find "$OMARCHY_PATH/themes/" -mindepth 1 -maxdepth 1 -type d -printf '%f\n'
} | sort -u | while read -r name; do
echo "$name" | sed -E 's/(^|-)([a-z])/\1\u\2/g; s/-/ /g'
done done

View File

@@ -1,34 +0,0 @@
#!/bin/bash
THEMES_DIR="$HOME/.config/omarchy/themes/"
CURRENT_THEME_LINK="$HOME/.config/omarchy/current/theme"
THEMES=($(find "$THEMES_DIR" -mindepth 1 -maxdepth 1 | sort))
TOTAL=${#THEMES[@]}
# Get current theme from symlink
if [[ -L "$CURRENT_THEME_LINK" ]]; then
CURRENT_THEME=$(realpath "$CURRENT_THEME_LINK")
else
# Default to first theme if no symlink exists
CURRENT_THEME=$(realpath "${THEMES[0]}")
fi
# Find current theme index
INDEX=0
for i in "${!THEMES[@]}"; do
THEMES[$i]=$(realpath "${THEMES[$i]}")
if [[ "${THEMES[$i]}" == "$CURRENT_THEME" ]]; then
INDEX=$i
break
fi
done
# Get next theme (wrap around)
NEXT_INDEX=$(((INDEX + 1) % TOTAL))
NEW_THEME=${THEMES[$NEXT_INDEX]}
NEW_THEME_NAME=$(basename "$NEW_THEME")
omarchy-theme-set $NEW_THEME_NAME
notify-send "Theme changed to $NEW_THEME_NAME" -t 2000

View File

@@ -7,7 +7,7 @@ if [ -z "$1" ]; then
mapfile -t extra_themes < <(find ~/.config/omarchy/themes -mindepth 1 -maxdepth 1 -type d ! -xtype l -printf '%f\n') mapfile -t extra_themes < <(find ~/.config/omarchy/themes -mindepth 1 -maxdepth 1 -type d ! -xtype l -printf '%f\n')
if [[ ${#extra_themes[@]} -gt 0 ]]; then if [[ ${#extra_themes[@]} -gt 0 ]]; then
THEME_NAME=$(gum choose --header="Remove extra theme" "${extra_themes[@]}") THEME_NAME=$(printf '%s\n' "${extra_themes[@]}" | sort | gum choose --header="Remove extra theme")
else else
echo "No extra themes installed." echo "No extra themes installed."
exit 1 exit 1
@@ -31,10 +31,5 @@ if [ ! -d "$THEME_PATH" ]; then
exit 1 exit 1
fi fi
# Move to the next theme if the current theme is the one being removed
if [ "$(readlink -f "$CURRENT_DIR/theme")" = "$(readlink -f "$THEME_PATH")" ]; then
omarchy-theme-next
fi
# Now remove the theme directory for THEME_NAME # Now remove the theme directory for THEME_NAME
rm -rf "$THEME_PATH" rm -rf "$THEME_PATH"

View File

@@ -1,24 +1,42 @@
#!/bin/bash #!/bin/bash
if [[ -z $1 && $1 != "CNCLD" ]]; then if [[ -z $1 ]]; then
echo "Usage: omarchy-theme-set <theme-name>" echo "Usage: omarchy-theme-set <theme-name>"
exit 1 exit 1
fi fi
THEMES_DIR="$HOME/.config/omarchy/themes/" CURRENT_THEME_PATH="$HOME/.config/omarchy/current/theme"
CURRENT_THEME_DIR="$HOME/.config/omarchy/current/theme" NEXT_THEME_PATH="$HOME/.config/omarchy/current/next-theme"
USER_THEMES_PATH="$HOME/.config/omarchy/themes"
OMARCHY_THEMES_PATH="$OMARCHY_PATH/themes"
THEME_NAME=$(echo "$1" | sed -E 's/<[^>]+>//g' | tr '[:upper:]' '[:lower:]' | tr ' ' '-') THEME_NAME=$(echo "$1" | sed -E 's/<[^>]+>//g' | tr '[:upper:]' '[:lower:]' | tr ' ' '-')
THEME_PATH="$THEMES_DIR/$THEME_NAME"
# Check if the theme entered exists if [[ -d "$USER_THEMES_PATH/$THEME_NAME" ]]; then
if [[ ! -d "$THEME_PATH" ]]; then THEME_PATH="$USER_THEMES_PATH/$THEME_NAME"
echo "Theme '$THEME_NAME' does not exist in $THEMES_DIR" elif [[ -d "$OMARCHY_THEMES_PATH/$THEME_NAME" ]]; then
THEME_PATH="$OMARCHY_THEMES_PATH/$THEME_NAME"
else
echo "Theme '$THEME_NAME' does not exist"
exit 1 exit 1
fi fi
# Update theme symlinks # Setup clean next theme directory (for atomic theme config swapping)
ln -nsf "$THEME_PATH" "$CURRENT_THEME_DIR" rm -rf "$NEXT_THEME_PATH"
mkdir -p "$NEXT_THEME_PATH"
# Copy static configs
cp -r "$THEME_PATH/"* "$NEXT_THEME_PATH/" 2>/dev/null
# Generate dynamic configs
omarchy-theme-set-templates
# Swap next theme in as current
rm -rf "$CURRENT_THEME_PATH"
mv "$NEXT_THEME_PATH" "$CURRENT_THEME_PATH"
# Store theme name for reference
echo "$THEME_NAME" > "$HOME/.config/omarchy/current/theme.name"
# Change background with theme # Change background with theme
omarchy-theme-bg-next omarchy-theme-bg-next
@@ -31,12 +49,14 @@ omarchy-restart-swayosd
omarchy-restart-terminal omarchy-restart-terminal
hyprctl reload hyprctl reload
pkill -SIGUSR2 btop pkill -SIGUSR2 btop
# pkill -SIGUSR2 opencode
makoctl reload makoctl reload
# Change gnome, browser, vscode, cursor themes # Change app-specific themes
omarchy-theme-set-gnome omarchy-theme-set-gnome
omarchy-theme-set-browser omarchy-theme-set-browser
omarchy-theme-set-vscode omarchy-theme-set-vscode
omarchy-theme-set-vscodium
omarchy-theme-set-cursor omarchy-theme-set-cursor
omarchy-theme-set-obsidian omarchy-theme-set-obsidian

View File

@@ -1,4 +1,4 @@
#!/bin/bash #!/bin/bash
# Call the VSCode theme setter with Cursor-specific parameters # Call the VSCode theme setter with Cursor-specific parameters
omarchy-theme-set-vscode cursor "$HOME/.config/Cursor/User/settings.json" "$HOME/.local/state/omarchy/toggles/skip-cursor-theme-changes" Cursor omarchy-theme-set-vscode cursor "$HOME/.config/Cursor/User/settings.json" "$HOME/.local/state/omarchy/toggles/skip-cursor-theme-changes"

44
bin/omarchy-theme-set-templates Executable file
View File

@@ -0,0 +1,44 @@
#!/bin/bash
TEMPLATES_DIR="$OMARCHY_PATH/default/themed"
NEXT_THEME_DIR="$HOME/.config/omarchy/current/next-theme"
COLORS_FILE="$NEXT_THEME_DIR/colors.toml"
# Convert hex color to decimal RGB (e.g., "#1e1e2e" -> "30,30,46")
hex_to_rgb() {
local hex="${1#\#}"
printf "%d,%d,%d" "0x${hex:0:2}" "0x${hex:2:2}" "0x${hex:4:2}"
}
# Only generate dynamic templates for themes with a colors.toml definition
if [[ -f $COLORS_FILE ]]; then
# Parse TOML using yq (treating it as YAML since the flat key=value structure is compatible)
# We convert 'key = value' to 'key: value' to make it valid YAML, then use yq/jq to generate the replacement commands.
sed_script=$(mktemp)
# Generate standard and _strip substitutions
sed 's/=/:/' "$COLORS_FILE" | yq -r 'to_entries[] | "s|{{ \(.key) }}|\(.value)|g", "s|{{ \(.key)_strip }}|\(.value | sub("^#";""))|g"' > "$sed_script"
# Generate _rgb substitutions for hex colors
while IFS='=' read -r key value; do
key=$(echo "$key" | xargs)
value=$(echo "$value" | xargs | tr -d '"')
if [[ $value =~ ^# ]]; then
rgb=$(hex_to_rgb "$value")
echo "s|{{ ${key}_rgb }}|${rgb}|g" >> "$sed_script"
fi
done < "$COLORS_FILE"
shopt -s nullglob
for tpl in "$TEMPLATES_DIR"/*.tpl; do
filename=$(basename "$tpl" .tpl)
output_path="$NEXT_THEME_DIR/$filename"
# Don't overwrite configs already exists in the output directory (copied from theme specific folder)
if [[ ! -f $output_path ]]; then
sed -f "$sed_script" "$tpl" > "$output_path"
fi
done
rm "$sed_script"
fi

View File

@@ -7,8 +7,6 @@
EDITOR_CMD="${1:-code}" EDITOR_CMD="${1:-code}"
SETTINGS_PATH="${2:-$HOME/.config/Code/User/settings.json}" SETTINGS_PATH="${2:-$HOME/.config/Code/User/settings.json}"
SKIP_FLAG="${3:-$HOME/.local/state/omarchy/toggles/skip-vscode-theme-changes}" SKIP_FLAG="${3:-$HOME/.local/state/omarchy/toggles/skip-vscode-theme-changes}"
EDITOR_NAME="${4:-VS Code}"
VS_CODE_THEME="$HOME/.config/omarchy/current/theme/vscode.json" VS_CODE_THEME="$HOME/.config/omarchy/current/theme/vscode.json"
if omarchy-cmd-present "$EDITOR_CMD" && [[ ! -f "$SKIP_FLAG" ]]; then if omarchy-cmd-present "$EDITOR_CMD" && [[ ! -f "$SKIP_FLAG" ]]; then
@@ -16,7 +14,7 @@ if omarchy-cmd-present "$EDITOR_CMD" && [[ ! -f "$SKIP_FLAG" ]]; then
theme_name=$(jq -r '.name' "$VS_CODE_THEME") theme_name=$(jq -r '.name' "$VS_CODE_THEME")
extension=$(jq -r '.extension' "$VS_CODE_THEME") extension=$(jq -r '.extension' "$VS_CODE_THEME")
# Install $EDITOR_NAME theme extension # Install theme extension
if [[ -n "$extension" ]] && ! "$EDITOR_CMD" --list-extensions | grep -Fxq "$extension"; then if [[ -n "$extension" ]] && ! "$EDITOR_CMD" --list-extensions | grep -Fxq "$extension"; then
"$EDITOR_CMD" --install-extension "$extension" >/dev/null "$EDITOR_CMD" --install-extension "$extension" >/dev/null
fi fi
@@ -39,7 +37,7 @@ if omarchy-cmd-present "$EDITOR_CMD" && [[ ! -f "$SKIP_FLAG" ]]; then
"s/(\"workbench.colorTheme\"[[:space:]]*:[[:space:]]*\")[^\"]*(\")/\1$theme_name\2/" \ "s/(\"workbench.colorTheme\"[[:space:]]*:[[:space:]]*\")[^\"]*(\")/\1$theme_name\2/" \
"$SETTINGS_PATH" "$SETTINGS_PATH"
else else
# Remove theme from settings.json when the theme doesn't have $EDITOR_NAME support # Remove theme from settings.json when the theme doesn't have editor support
if [[ -f "$SETTINGS_PATH" ]]; then if [[ -f "$SETTINGS_PATH" ]]; then
sed -i --follow-symlinks -E 's/\"workbench\.colorTheme\"[[:space:]]*:[^,}]*,?//' "$SETTINGS_PATH" sed -i --follow-symlinks -E 's/\"workbench\.colorTheme\"[[:space:]]*:[^,}]*,?//' "$SETTINGS_PATH"
fi fi

4
bin/omarchy-theme-set-vscodium Executable file
View File

@@ -0,0 +1,4 @@
#!/bin/bash
# Call the VSCode theme setter with VSCodium-specific parameters
omarchy-theme-set-vscode codium "$HOME/.config/VSCodium/User/settings.json" "$HOME/.local/state/omarchy/toggles/skip-codium-theme-changes"

View File

@@ -1,5 +1,7 @@
#!/bin/bash #!/bin/bash
set -e
if [ "$#" -ne 4 ]; then if [ "$#" -ne 4 ]; then
echo -e "\e[32mLet's create a TUI shortcut you can start with the app launcher.\n\e[0m" echo -e "\e[32mLet's create a TUI shortcut you can start with the app launcher.\n\e[0m"
APP_NAME=$(gum input --prompt "Name> " --placeholder "My TUI") APP_NAME=$(gum input --prompt "Name> " --placeholder "My TUI")

View File

@@ -1,5 +1,7 @@
#!/bin/bash #!/bin/bash
set -e
ICON_DIR="$HOME/.local/share/applications/icons" ICON_DIR="$HOME/.local/share/applications/icons"
DESKTOP_DIR="$HOME/.local/share/applications/" DESKTOP_DIR="$HOME/.local/share/applications/"

View File

@@ -4,7 +4,7 @@ set -e
trap 'echo ""; echo -e "\033[0;31mSomething went wrong during the update!\n\nPlease review the output above carefully, correct the error, and retry the update.\n\nIf you need assistance, get help from the community at https://omarchy.org/discord\033[0m"' ERR trap 'echo ""; echo -e "\033[0;31mSomething went wrong during the update!\n\nPlease review the output above carefully, correct the error, and retry the update.\n\nIf you need assistance, get help from the community at https://omarchy.org/discord\033[0m"' ERR
if omarchy-update-confirm; then if [[ $1 == "-y" ]] || omarchy-update-confirm; then
omarchy-snapshot create || [ $? -eq 127 ] omarchy-snapshot create || [ $? -eq 127 ]
omarchy-update-git omarchy-update-git
omarchy-update-perform omarchy-update-perform

View File

@@ -1,10 +1,14 @@
#!/bin/bash #!/bin/bash
gum style --border normal --border-foreground 6 --padding "1 2" \ gum style --border normal --border-foreground 6 --padding "1 2" \
"Ready to update Omarchy?" \ "Ready to update?" \
"" \ "" \
"• You cannot stop the update once you start!" \ "• You cannot stop the update once you start!" \
"• Make sure you're connected to power or have a full battery" "• Make sure you're connected to power or have a full battery" \
"" \
"What's new: https://github.com/basecamp/omarchy/releases"
echo
if ! gum confirm "Continue with update?"; then if ! gum confirm "Continue with update?"; then
echo "Update cancelled" echo "Update cancelled"

View File

@@ -5,4 +5,4 @@ set -e
echo -e "\e[32mUpdate Omarchy\e[0m" echo -e "\e[32mUpdate Omarchy\e[0m"
git -C $OMARCHY_PATH pull --autostash git -C $OMARCHY_PATH pull --autostash
git -C $OMARCHY_PATH diff --check || git -C $OMARCHY_PATH reset --merge git -C $OMARCHY_PATH --no-pager diff --check || git -C $OMARCHY_PATH reset --merge

View File

@@ -2,6 +2,10 @@
set -e set -e
# Ensure screensaver/sleep doesn't set in during updates
hyprctl dispatch tagwindow +noidle &> /dev/null || true
# Perform all update steps
omarchy-update-time omarchy-update-time
omarchy-update-keyring omarchy-update-keyring
omarchy-update-available-reset omarchy-update-available-reset
@@ -9,3 +13,6 @@ omarchy-update-system-pkgs
omarchy-migrate omarchy-migrate
omarchy-hook post-update omarchy-hook post-update
omarchy-update-restart omarchy-update-restart
# Re-enable screensaver/sleep after updates
hyprctl dispatch tagwindow -- -noidle &> /dev/null || true

View File

@@ -1,10 +1,10 @@
#!/bin/bash #!/bin/bash
if [ "$(uname -r | sed 's/-arch/\.arch/')" != "$(pacman -Q linux | awk '{print $2}')" ]; then if [ "$(uname -r | sed 's/-arch/\.arch/')" != "$(pacman -Q linux | awk '{print $2}')" ]; then
gum confirm "Linux kernel has been updated. Reboot?" && omarchy-state clear re*-required && sudo reboot now gum confirm "Linux kernel has been updated. Reboot?" && omarchy-cmd-reboot
elif [ -f "$HOME/.local/state/omarchy/reboot-required" ]; then elif [ -f "$HOME/.local/state/omarchy/reboot-required" ]; then
gum confirm "Updates require reboot. Ready?" && omarchy-state clear re*-required && sudo reboot now gum confirm "Updates require reboot. Ready?" && omarchy-cmd-reboot
fi fi
for file in "$HOME"/.local/state/omarchy/restart-*-required; do for file in "$HOME"/.local/state/omarchy/restart-*-required; do

View File

@@ -3,7 +3,7 @@
set -e set -e
echo -e "\e[32m\nUpdate system packages\e[0m" echo -e "\e[32m\nUpdate system packages\e[0m"
sudo pacman -Syu --noconfirm sudo pacman -Syyu --noconfirm
# Update AUR packages if any are installed # Update AUR packages if any are installed
if pacman -Qem >/dev/null; then if pacman -Qem >/dev/null; then

View File

@@ -0,0 +1,5 @@
#!/bin/bash
# No-op now that omarchy-update-perform is responsible for idle management.
# But this file can't be removed since it was referenced in old omarchy-update files,
# which would fail if this file is missing.

View File

@@ -1,5 +1,7 @@
#!/bin/bash #!/bin/bash
set -e
if [ "$#" -lt 3 ]; then if [ "$#" -lt 3 ]; then
echo -e "\e[32mLet's create a new web app you can start with the app launcher.\n\e[0m" echo -e "\e[32mLet's create a new web app you can start with the app launcher.\n\e[0m"
APP_NAME=$(gum input --prompt "Name> " --placeholder "My favorite web app") APP_NAME=$(gum input --prompt "Name> " --placeholder "My favorite web app")

View File

@@ -1,5 +1,7 @@
#!/bin/bash #!/bin/bash
set -e
ICON_DIR="$HOME/.local/share/applications/icons" ICON_DIR="$HOME/.local/share/applications/icons"
DESKTOP_DIR="$HOME/.local/share/applications/" DESKTOP_DIR="$HOME/.local/share/applications/"

View File

@@ -134,7 +134,7 @@
"type": "command", "type": "command",
"key": "󱦟 OS Age", "key": "󱦟 OS Age",
"keyColor": "magenta", "keyColor": "magenta",
"text": "birth_install=$(stat -c %W /); current=$(date +%s); time_progression=$((current - birth_install)); days_difference=$((time_progression / 86400)); echo $days_difference days" "text": "echo $(( ($(date +%s) - $(stat -c %W /)) / 86400 )) days"
}, },
{ {
"type": "uptime", "type": "uptime",

View File

@@ -5,7 +5,6 @@ bindd = SUPER SHIFT, B, Browser, exec, omarchy-launch-browser
bindd = SUPER SHIFT ALT, B, Browser (private), exec, omarchy-launch-browser --private bindd = SUPER SHIFT ALT, B, Browser (private), exec, omarchy-launch-browser --private
bindd = SUPER SHIFT, M, Music, exec, omarchy-launch-or-focus spotify bindd = SUPER SHIFT, M, Music, exec, omarchy-launch-or-focus spotify
bindd = SUPER SHIFT, N, Editor, exec, omarchy-launch-editor bindd = SUPER SHIFT, N, Editor, exec, omarchy-launch-editor
bindd = SUPER SHIFT, T, Activity, exec, omarchy-launch-tui btop
bindd = SUPER SHIFT, D, Docker, exec, omarchy-launch-tui lazydocker bindd = SUPER SHIFT, D, Docker, exec, omarchy-launch-tui lazydocker
bindd = SUPER SHIFT, G, Signal, exec, omarchy-launch-or-focus ^signal$ "uwsm-app -- signal-desktop" bindd = SUPER SHIFT, G, Signal, exec, omarchy-launch-or-focus ^signal$ "uwsm-app -- signal-desktop"
bindd = SUPER SHIFT, O, Obsidian, exec, omarchy-launch-or-focus ^obsidian$ "uwsm-app -- obsidian -disable-gpu --enable-wayland-ime" bindd = SUPER SHIFT, O, Obsidian, exec, omarchy-launch-or-focus ^obsidian$ "uwsm-app -- obsidian -disable-gpu --enable-wayland-ime"
@@ -15,6 +14,7 @@ bindd = SUPER SHIFT, SLASH, Passwords, exec, uwsm-app -- 1password
# If your web app url contains #, type it as ## to prevent hyprland treating it as a comment # If your web app url contains #, type it as ## to prevent hyprland treating it as a comment
bindd = SUPER SHIFT, A, ChatGPT, exec, omarchy-launch-webapp "https://chatgpt.com" bindd = SUPER SHIFT, A, ChatGPT, exec, omarchy-launch-webapp "https://chatgpt.com"
bindd = SUPER SHIFT ALT, A, Grok, exec, omarchy-launch-webapp "https://grok.com" bindd = SUPER SHIFT ALT, A, Grok, exec, omarchy-launch-webapp "https://grok.com"
bindd = SUPER SHIFT CTRL, A, opencode, exec, omarchy-launch-opencode
bindd = SUPER SHIFT, C, Calendar, exec, omarchy-launch-webapp "https://app.hey.com/calendar/weeks/" bindd = SUPER SHIFT, C, Calendar, exec, omarchy-launch-webapp "https://app.hey.com/calendar/weeks/"
bindd = SUPER SHIFT, E, Email, exec, omarchy-launch-webapp "https://app.hey.com" bindd = SUPER SHIFT, E, Email, exec, omarchy-launch-webapp "https://app.hey.com"
bindd = SUPER SHIFT, Y, YouTube, exec, omarchy-launch-webapp "https://youtube.com/" bindd = SUPER SHIFT, Y, YouTube, exec, omarchy-launch-webapp "https://youtube.com/"

View File

@@ -11,7 +11,7 @@ listener {
} }
listener { listener {
timeout = 300 # 5min timeout = 150 # 5min
on-timeout = loginctl lock-session # lock screen when timeout has passed on-timeout = loginctl lock-session # lock screen when timeout has passed
} }

View File

@@ -1,5 +1,9 @@
source = ~/.config/omarchy/current/theme/hyprlock.conf source = ~/.config/omarchy/current/theme/hyprlock.conf
general {
ignore_empty_input = true
}
background { background {
monitor = monitor =
color = $color color = $color

View File

@@ -24,12 +24,15 @@ input {
# Control the speed of your scrolling # Control the speed of your scrolling
scroll_factor = 0.4 scroll_factor = 0.4
# Left-click-and-drag with three fingers
# drag_3fg = 1
} }
} }
# Scroll nicely in the terminal # Scroll nicely in the terminal
windowrule = scrolltouchpad 1.5, class:(Alacritty|kitty) windowrule = match:class (Alacritty|kitty), scroll_touchpad 1.5
windowrule = scrolltouchpad 0.2, class:com.mitchellh.ghostty windowrule = match:class com.mitchellh.ghostty, scroll_touchpad 0.2
# Enable touchpad gestures for changing workspaces # Enable touchpad gestures for changing workspaces
# See https://wiki.hyprland.org/Configuring/Gestures/ # See https://wiki.hyprland.org/Configuring/Gestures/

View File

@@ -1,3 +1,4 @@
screencopy { screencopy {
allow_token_by_default = true allow_token_by_default = true
custom_picker_binary = hyprland-preview-share-picker
} }

View File

@@ -0,0 +1,71 @@
# paths to stylesheets on the filesystem which should be applied to the application
#
# relative paths are resolved relative to the location of the config file
stylesheets: ["../omarchy/current/theme/hyprland-preview-share-picker.css"]
# default page selected when the picker is opened
default_page: windows
window:
# height of the application window
height: 500
# width of the application window
width: 1000
image:
# size to which the images should be internally resized to reduce the memory footprint
resize_size: 500
# target size of the longer side of the image widget
widget_size: 150
classes:
# css classname of the window
window: window
# css classname of the card containing an image and a label
image_card: card
# css classname of the card containing an image and a label when the image is still being loaded
image_card_loading: card-loading
# css classname of the image inside the card
image: image
# css classname of the label inside the card
image_label: image-label
# css classname of the notebook containing all pages
notebook: notebook
# css classname of a label of the notebook
tab_label: tab-label
# css classname of a notebook page (e.g. windows container)
notebook_page: page
# css classname of the region selection button
region_button: region-button
# css classname of the button containing the session restore checkbox and label
restore_button: restore-button
windows:
# minimum amount of image cards per row on the windows page
min_per_row: 3
# maximum amount of image cards per row on the windows page
max_per_row: 999
# number of clicks needed to select a window
clicks: 1
# spacing in pixels between the window cards
spacing: 12
outputs:
# number of clicks needed to select an output
clicks: 1
# spacing in pixels between the outputs in the layout
# note: the spacing is applied from both sides (the gap is `spacing * 2`)
spacing: 6
# show the label with the output name
show_label: false
# size the output cards respectively to their scaling
respect_output_scaling: true
region:
# command to run for region selection
# the output needs to be in the <output>@<x>,<y>,<w>,<h> (e.g. DP-3@2789,436,756,576) format
command: slurp -f '%o@%x,%y,%w,%h'
# hide the token restore checkbox and use the default value instead
hide_token_restore: true
# enable debug logs by default
debug: false

View File

@@ -7,9 +7,7 @@ font_size 9.0
# Window # Window
window_padding_width 14 window_padding_width 14
window_padding_height 14
hide_window_decorations yes hide_window_decorations yes
show_window_resize_notification no
confirm_os_window_close 0 confirm_os_window_close 0
# Keybindings # Keybindings
@@ -17,7 +15,6 @@ map ctrl+insert copy_to_clipboard
map shift+insert paste_from_clipboard map shift+insert paste_from_clipboard
# Allow remote access # Allow remote access
single_instance yes
allow_remote_control yes allow_remote_control yes
# Aesthetics # Aesthetics

View File

@@ -0,0 +1,4 @@
{
"$schema": "https://opencode.ai/config.json",
"theme": "system"
}

View File

@@ -10,12 +10,15 @@ hide_action_hints = true # gl
[keybinds] [keybinds]
quick_activate = [] quick_activate = []
[columns]
symbols = 1 # providers to be queried by default
[providers] [providers]
max_results = 256 # 256 should be enough for everyone max_results = 256 # 256 should be enough for everyone
default = [ default = [
"desktopapplications", "desktopapplications",
"websearch", "websearch",
] # providers to be queried by default ]
[[providers.prefixes]] [[providers.prefixes]]
prefix = "/" prefix = "/"
@@ -40,3 +43,7 @@ provider = "websearch"
[[providers.prefixes]] [[providers.prefixes]]
prefix = "$" prefix = "$"
provider = "clipboard" provider = "clipboard"
[[emergencies]]
text = "Restart Walker"
command = "omarchy-restart-walker"

View File

@@ -57,7 +57,8 @@
"cpu": { "cpu": {
"interval": 5, "interval": 5,
"format": "󰍛", "format": "󰍛",
"on-click": "omarchy-launch-or-focus-tui btop" "on-click": "omarchy-launch-or-focus-tui btop",
"on-click-right": "alacritty"
}, },
"clock": { "clock": {
"format": "{:L%A %H:%M}", "format": "{:L%A %H:%M}",
@@ -99,6 +100,7 @@
}, },
"bluetooth": { "bluetooth": {
"format": "", "format": "",
"format-off": "󰂲",
"format-disabled": "󰂲", "format-disabled": "󰂲",
"format-connected": "󰂱", "format-connected": "󰂱",
"format-no-controller": "", "format-no-controller": "",
@@ -107,7 +109,7 @@
}, },
"pulseaudio": { "pulseaudio": {
"format": "{icon}", "format": "{icon}",
"on-click": "omarchy-launch-or-focus-tui wiremix", "on-click": "omarchy-launch-audio",
"on-click-right": "pamixer -t", "on-click-right": "pamixer -t",
"tooltip-format": "Playing at {volume}%", "tooltip-format": "Playing at {volume}%",
"scroll-step": 5, "scroll-step": 5,
@@ -126,7 +128,11 @@
}, },
"custom/expand-icon": { "custom/expand-icon": {
"format": "", "format": "",
"tooltip": false "tooltip": false,
"on-scroll-up": "",
"on-scroll-down": "",
"on-scroll-left": "",
"on-scroll-right": ""
}, },
"custom/screenrecording-indicator": { "custom/screenrecording-indicator": {
"on-click": "omarchy-cmd-screenrecord", "on-click": "omarchy-cmd-screenrecord",

View File

@@ -31,6 +31,7 @@ alias ...='cd ../..'
alias ....='cd ../../..' alias ....='cd ../../..'
# Tools # Tools
alias c='opencode'
alias d='docker' alias d='docker'
alias r='rails' alias r='rails'
n() { if [ "$#" -eq 0 ]; then nvim .; else nvim "$@"; fi; } n() { if [ "$#" -eq 0 ]; then nvim .; else nvim "$@"; fi; }

View File

@@ -4,67 +4,93 @@
Name = "omarchythemes" Name = "omarchythemes"
NamePretty = "Omarchy Themes" NamePretty = "Omarchy Themes"
-- Check if file exists using Lua (no subprocess)
local function file_exists(path)
local f = io.open(path, "r")
if f then
f:close()
return true
end
return false
end
-- Get first matching file from directory using ls (single call for fallback)
local function first_image_in_dir(dir)
local handle = io.popen("ls -1 '" .. dir .. "' 2>/dev/null | head -n 1")
if handle then
local file = handle:read("*l")
handle:close()
if file and file ~= "" then
return dir .. "/" .. file
end
end
return nil
end
-- The main function elephant will call -- The main function elephant will call
function GetEntries() function GetEntries()
local entries = {} local entries = {}
local theme_dir = os.getenv("HOME") .. "/.config/omarchy/themes" local user_theme_dir = os.getenv("HOME") .. "/.config/omarchy/themes"
local omarchy_path = os.getenv("OMARCHY_PATH") or ""
local default_theme_dir = omarchy_path .. "/themes"
-- First, get all theme directories local seen_themes = {}
local find_dirs_cmd = "find -L '" .. theme_dir .. "' -mindepth 1 -maxdepth 1 -type d 2>/dev/null"
local handle = io.popen(find_dirs_cmd) -- Helper function to process themes from a directory
if not handle then local function process_themes_from_dir(theme_dir)
return entries -- Single find call to get all theme directories
end local handle = io.popen("find -L '" .. theme_dir .. "' -mindepth 1 -maxdepth 1 -type d 2>/dev/null")
if not handle then
return
end
for theme_path in handle:lines() do for theme_path in handle:lines() do
local theme_name = theme_path:match(".*/(.+)$") local theme_name = theme_path:match(".*/(.+)$")
if theme_name then if theme_name and not seen_themes[theme_name] then
-- find preview image seen_themes[theme_name] = true
local find_preview_cmd = "find -L '"
.. theme_path
.. "' -maxdepth 1 -type f \\( -name 'preview.png' -o -name 'preview.jpg' \\) 2>/dev/null | head -n 1"
local preview_handle = io.popen(find_preview_cmd)
local preview_path = nil
if preview_handle then -- Check for preview images directly (no subprocess)
preview_path = preview_handle:read("*l") local preview_path = nil
preview_handle:close() local preview_png = theme_path .. "/preview.png"
end local preview_jpg = theme_path .. "/preview.jpg"
-- If no preview found, use first image from backgrounds folder if file_exists(preview_png) then
if not preview_path or preview_path == "" then preview_path = preview_png
local bg_cmd = "find -L '" elseif file_exists(preview_jpg) then
.. theme_path preview_path = preview_jpg
.. "/backgrounds' -maxdepth 1 -type f \\( -iname '*.png' -o -iname '*.jpg' -o -iname '*.jpeg' \\) 2>/dev/null | head -n 1" else
local bg_handle = io.popen(bg_cmd) -- Fallback: get first image from backgrounds (one ls call)
if bg_handle then preview_path = first_image_in_dir(theme_path .. "/backgrounds")
preview_path = bg_handle:read("*l") end
bg_handle:close()
if preview_path and preview_path ~= "" then
local display_name = theme_name:gsub("_", " "):gsub("%-", " ")
display_name = display_name:gsub("(%a)([%w_']*)", function(first, rest)
return first:upper() .. rest:lower()
end)
display_name = display_name .. " "
table.insert(entries, {
Text = display_name,
Preview = preview_path,
PreviewType = "file",
Actions = {
activate = "omarchy-theme-set " .. theme_name,
},
})
end end
end end
if preview_path and preview_path ~= "" then
local display_name = theme_name:gsub("_", " "):gsub("%-", " ")
display_name = display_name:gsub("(%a)([%w_']*)", function(first, rest)
return first:upper() .. rest:lower()
end)
display_name = display_name .. " "
table.insert(entries, {
Text = display_name,
Preview = preview_path,
PreviewType = "file",
Actions = {
activate = "omarchy-theme-set " .. theme_name,
},
})
end
end end
handle:close()
end end
handle:close() -- Process user themes first (they take precedence)
process_themes_from_dir(user_theme_dir)
-- Then process default themes (only if not already seen)
process_themes_from_dir(default_theme_dir)
return entries return entries
end end

View File

@@ -1,2 +1,2 @@
windowrule = noscreenshare, class:^(1[p|P]assword)$ windowrule = no_screen_share on, match:class ^(1[p|P]assword)$
windowrule = tag +floating-window, class:^(1[p|P]assword)$ windowrule = tag +floating-window, match:class ^(1[p|P]assword)$

View File

@@ -1 +1,2 @@
windowrule = noscreenshare, class:^(Bitwarden)$ windowrule = no_screen_share on, match:class ^(Bitwarden)$
windowrule = tag +floating-window, match:class ^(Bitwarden)$

View File

@@ -1,13 +1,13 @@
# Browser types # Browser types
windowrule = tag +chromium-based-browser, class:((google-)?[cC]hrom(e|ium)|[bB]rave-browser|[mM]icrosoft-edge|Vivaldi-stable|helium) windowrule = tag +chromium-based-browser, match:class ((google-)?[cC]hrom(e|ium)|[bB]rave-browser|[mM]icrosoft-edge|Vivaldi-stable|helium)
windowrule = tag +firefox-based-browser, class:([fF]irefox|zen|librewolf) windowrule = tag +firefox-based-browser, match:class ([fF]irefox|zen|librewolf)
# Force chromium-based browsers into a tile to deal with --app bug # Force chromium-based browsers into a tile to deal with --app bug
windowrule = tile, tag:chromium-based-browser windowrule = tile on, match:tag chromium-based-browser
# Only a subtle opacity change, but not for video sites # Only a subtle opacity change, but not for video sites
windowrule = opacity 1 0.97, tag:chromium-based-browser windowrule = opacity 1 0.97, match:tag chromium-based-browser
windowrule = opacity 1 0.97, tag:firefox-based-browser windowrule = opacity 1 0.97, match:tag firefox-based-browser
# Some video sites should never have opacity applied to them # Some video sites should never have opacity applied to them
windowrule = opacity 1.0 1.0, initialTitle:((?i)(?:[a-z0-9-]+\.)*youtube\.com_/|app\.zoom\.us_/wc/home) windowrule = opacity 1.0 1.0, match:initial_title ((?i)(?:[a-z0-9-]+\.)*youtube\.com_/|app\.zoom\.us_/wc/home)

View File

@@ -1,2 +1,2 @@
# Focus floating DaVinci Resolve dialog windows # Focus floating DaVinci Resolve dialog windows
windowrule = stayfocused, class:.*[Rr]esolve.*, floating:1 windowrule = stay_focused on, match:class .*[Rr]esolve.*, match:float 1

View File

@@ -1,2 +1,2 @@
# Remove 1px border around hyprshot screenshots # Remove 1px border around hyprshot screenshots
layerrule = noanim, selection layerrule = no_anim on, match:namespace selection

View File

@@ -1,22 +1,22 @@
# Fix splash screen showing in weird places and prevent annoying focus takeovers # Fix splash screen showing in weird places and prevent annoying focus takeovers
windowrule = tag +jetbrains-splash, class:^(jetbrains-.*)$, title:^(splash)$, floating:1 windowrule = tag +jetbrains-splash, match:class ^(jetbrains-.*)$, match:title ^(splash)$, match:float 1
windowrule = center, tag:jetbrains-splash windowrule = center on, match:tag jetbrains-splash
windowrule = nofocus, tag:jetbrains-splash windowrule = no_focus on, match:tag jetbrains-splash
windowrule = noborder, tag:jetbrains-splash windowrule = border_size 0, match:tag jetbrains-splash
# Center popups/find windows # Center popups/find windows
windowrule = tag +jetbrains, class:^(jetbrains-.*), title:^()$, floating:1 windowrule = tag +jetbrains, match:class ^(jetbrains-.*), match:title ^()$, match:float 1
windowrule = center, tag:jetbrains windowrule = center on, match:tag jetbrains
# Enabling this makes it possible to provide input in popup dialogs (search window, new file, etc.) # Enabling this makes it possible to provide input in popup dialogs (search window, new file, etc.)
windowrule = stayfocused, tag:jetbrains windowrule = stay_focused on, match:tag jetbrains
windowrule = noborder, tag:jetbrains windowrule = border_size 0, match:tag jetbrains
# For some reason tag:jetbrains does not work for size rule # For some reason tag:jetbrains does not work for size rule
windowrule = size >50% >50%, class:^(jetbrains-.*), title:^()$, floating:1 windowrule = min_size (monitor_w*0.5) (monitor_h*0.5), match:class ^(jetbrains-.*), match:title ^()$, match:float 1
# Disable window flicker when autocomplete or tooltips appear # Disable window flicker when autocomplete or tooltips appear
windowrule = noinitialfocus, class:^(jetbrains-.*)$, title:^(win.*)$, floating:1 windowrule = no_initial_focus on, match:class ^(jetbrains-.*)$, match:title ^(win.*)$, match:float 1
# Disable mouse focus # Disable mouse focus
windowrule = nofollowmouse, class:^(jetbrains-.*)$ windowrule = no_follow_mouse on, match:class ^(jetbrains-.*)$

View File

@@ -1,3 +1,3 @@
# Float LocalSend and fzf file picker # Float LocalSend and fzf file picker
windowrule = float, class:(Share|localsend) windowrule = float on, match:class (Share|localsend)
windowrule = center, class:(Share|localsend) windowrule = center on, match:class (Share|localsend)

View File

@@ -1,9 +1,9 @@
# Picture-in-picture overlays # Picture-in-picture overlays
windowrule = tag +pip, title:(Picture.?in.?[Pp]icture) windowrule = tag +pip, match:title (Picture.?in.?[Pp]icture)
windowrule = float, tag:pip windowrule = float on, match:tag pip
windowrule = pin, tag:pip windowrule = pin on, match:tag pip
windowrule = size 600 338, tag:pip windowrule = size 600 338, match:tag pip
windowrule = keepaspectratio, tag:pip windowrule = keep_aspect_ratio on, match:tag pip
windowrule = noborder, tag:pip windowrule = border_size 0, match:tag pip
windowrule = opacity 1 1, tag:pip windowrule = opacity 1 1, match:tag pip
windowrule = move 100%-w-40 4%, tag:pip windowrule = move (monitor_w-window_w-40) (monitor_h*0.04), match:tag pip

View File

@@ -1 +1 @@
windowrule = opacity 1 1, class:qemu windowrule = opacity 1 1, match:class qemu

View File

@@ -1,4 +1,3 @@
windowrule = fullscreen, class:com.libretro.RetroArch windowrule = fullscreen on, match:class com.libretro.RetroArch
windowrule = opacity 1 1, class:com.libretro.RetroArch windowrule = opacity 1 1, match:class com.libretro.RetroArch
windowrule = idleinhibit fullscreen, class:com.libretro.RetroArch windowrule = idle_inhibit fullscreen, match:class com.libretro.RetroArch

View File

@@ -1,7 +1,7 @@
# Float Steam # Float Steam
windowrule = float, class:steam windowrule = float on, match:class steam
windowrule = center, class:steam, title:Steam windowrule = center on, match:class steam, match:title Steam
windowrule = opacity 1 1, class:steam windowrule = opacity 1 1, match:class steam
windowrule = size 1100 700, class:steam, title:Steam windowrule = size 1100 700, match:class steam, match:title Steam
windowrule = size 460 800, class:steam, title:Friends List windowrule = size 460 800, match:class steam, match:title Friends List
windowrule = idleinhibit fullscreen, class:steam windowrule = idle_inhibit fullscreen, match:class steam

View File

@@ -1,17 +1,21 @@
# Floating windows # Floating windows
windowrule = float, tag:floating-window windowrule = float on, match:tag floating-window
windowrule = center, tag:floating-window windowrule = center on, match:tag floating-window
windowrule = size 875 600, tag:floating-window windowrule = size 875 600, match:tag floating-window
windowrule = tag +floating-window, class:(org.omarchy.bluetui|org.omarchy.impala|org.omarchy.wiremix|org.omarchy.btop|org.omarchy.terminal|org.omarchy.bash|org.gnome.NautilusPreviewer|org.gnome.Evince|com.gabm.satty|Omarchy|About|TUI.float|imv|mpv) windowrule = tag +floating-window, match:class (org.omarchy.bluetui|org.omarchy.impala|org.omarchy.wiremix|org.omarchy.btop|org.omarchy.terminal|org.omarchy.bash|org.gnome.NautilusPreviewer|org.gnome.Evince|com.gabm.satty|Omarchy|About|TUI.float|imv|mpv)
windowrule = tag +floating-window, class:(xdg-desktop-portal-gtk|sublime_text|DesktopEditors|org.gnome.Nautilus), title:^(Open.*Files?|Open [F|f]older.*|Save.*Files?|Save.*As|Save|All Files|.*wants to [open|save].*|[C|c]hoose.*) windowrule = tag +floating-window, match:class (xdg-desktop-portal-gtk|sublime_text|DesktopEditors|org.gnome.Nautilus), match:title ^(Open.*Files?|Open [F|f]older.*|Save.*Files?|Save.*As|Save|All Files|.*wants to [open|save].*|[C|c]hoose.*)
windowrule = float, class:org.gnome.Calculator windowrule = float on, match:class org.gnome.Calculator
# Fullscreen screensaver # Fullscreen screensaver
windowrule = fullscreen, class:org.omarchy.screensaver windowrule = fullscreen on, match:class org.omarchy.screensaver
windowrule = float on, match:class org.omarchy.screensaver
# No transparency on media windows # No transparency on media windows
windowrule = opacity 1 1, class:^(zoom|vlc|mpv|org.kde.kdenlive|com.obsproject.Studio|com.github.PintaProject.Pinta|imv|org.gnome.NautilusPreviewer)$ windowrule = opacity 1 1, match:class ^(zoom|vlc|mpv|org.kde.kdenlive|com.obsproject.Studio|com.github.PintaProject.Pinta|imv|org.gnome.NautilusPreviewer)$
# Popped window rounding # Popped window rounding
windowrule = rounding 8, tag:pop windowrule = rounding 8, match:tag pop
# Prevent idle while open
windowrule = idle_inhibit always, match:tag noidle

View File

@@ -1,2 +1,2 @@
# Define terminal tag to style them uniformly # Define terminal tag to style them uniformly
windowrule = tag +terminal, class:(Alacritty|kitty|com.mitchellh.ghostty) windowrule = tag +terminal, match:class (Alacritty|kitty|com.mitchellh.ghostty)

View File

@@ -1,2 +1,2 @@
# Application-specific animation # Application-specific animation
layerrule = noanim, walker layerrule = no_anim on, match:namespace walker

View File

@@ -1,6 +1,6 @@
# Webcam overlay for screen recording # Webcam overlay for screen recording
windowrule = float, title:WebcamOverlay windowrule = float on, match:title WebcamOverlay
windowrule = pin, title:WebcamOverlay windowrule = pin on, match:title WebcamOverlay
windowrule = noinitialfocus, title:WebcamOverlay windowrule = no_initial_focus on, match:title WebcamOverlay
windowrule = nodim, title:WebcamOverlay windowrule = no_dim on, match:title WebcamOverlay
windowrule = move 100%-w-40 100%-w-40, title:WebcamOverlay # There's a typo in the hyprland rule so 100%-w on the height param is actually correct here windowrule = move (monitor_w-window_w-40) (monitor_h-window_h-40), match:title WebcamOverlay

View File

@@ -17,7 +17,7 @@ bindd = SUPER, RIGHT, Move window focus right, movefocus, r
bindd = SUPER, UP, Move window focus up, movefocus, u bindd = SUPER, UP, Move window focus up, movefocus, u
bindd = SUPER, DOWN, Move window focus down, movefocus, d bindd = SUPER, DOWN, Move window focus down, movefocus, d
# Switch workspaces with SUPER + [1-9] # Switch workspaces with SUPER + [1-9; 0]
bindd = SUPER, code:10, Switch to workspace 1, workspace, 1 bindd = SUPER, code:10, Switch to workspace 1, workspace, 1
bindd = SUPER, code:11, Switch to workspace 2, workspace, 2 bindd = SUPER, code:11, Switch to workspace 2, workspace, 2
bindd = SUPER, code:12, Switch to workspace 3, workspace, 3 bindd = SUPER, code:12, Switch to workspace 3, workspace, 3
@@ -29,7 +29,7 @@ bindd = SUPER, code:17, Switch to workspace 8, workspace, 8
bindd = SUPER, code:18, Switch to workspace 9, workspace, 9 bindd = SUPER, code:18, Switch to workspace 9, workspace, 9
bindd = SUPER, code:19, Switch to workspace 10, workspace, 10 bindd = SUPER, code:19, Switch to workspace 10, workspace, 10
# Move active window to a workspace with SUPER + SHIFT + [1-9] # Move active window to a workspace with SUPER + SHIFT + [1-9; 0]
bindd = SUPER SHIFT, code:10, Move window to workspace 1, movetoworkspace, 1 bindd = SUPER SHIFT, code:10, Move window to workspace 1, movetoworkspace, 1
bindd = SUPER SHIFT, code:11, Move window to workspace 2, movetoworkspace, 2 bindd = SUPER SHIFT, code:11, Move window to workspace 2, movetoworkspace, 2
bindd = SUPER SHIFT, code:12, Move window to workspace 3, movetoworkspace, 3 bindd = SUPER SHIFT, code:12, Move window to workspace 3, movetoworkspace, 3
@@ -41,6 +41,18 @@ bindd = SUPER SHIFT, code:17, Move window to workspace 8, movetoworkspace, 8
bindd = SUPER SHIFT, code:18, Move window to workspace 9, movetoworkspace, 9 bindd = SUPER SHIFT, code:18, Move window to workspace 9, movetoworkspace, 9
bindd = SUPER SHIFT, code:19, Move window to workspace 10, movetoworkspace, 10 bindd = SUPER SHIFT, code:19, Move window to workspace 10, movetoworkspace, 10
# Move active window silently to a workspace with SUPER + SHIFT + ALT + [1-9; 0]
bindd = SUPER SHIFT ALT, code:10, Move window silently to workspace 1, movetoworkspacesilent, 1
bindd = SUPER SHIFT ALT, code:11, Move window silently to workspace 2, movetoworkspacesilent, 2
bindd = SUPER SHIFT ALT, code:12, Move window silently to workspace 3, movetoworkspacesilent, 3
bindd = SUPER SHIFT ALT, code:13, Move window silently to workspace 4, movetoworkspacesilent, 4
bindd = SUPER SHIFT ALT, code:14, Move window silently to workspace 5, movetoworkspacesilent, 5
bindd = SUPER SHIFT ALT, code:15, Move window silently to workspace 6, movetoworkspacesilent, 6
bindd = SUPER SHIFT ALT, code:16, Move window silently to workspace 7, movetoworkspacesilent, 7
bindd = SUPER SHIFT ALT, code:17, Move window silently to workspace 8, movetoworkspacesilent, 8
bindd = SUPER SHIFT ALT, code:18, Move window silently to workspace 9, movetoworkspacesilent, 9
bindd = SUPER SHIFT ALT, code:19, Move window silently to workspace 10, movetoworkspacesilent, 10
# Control scratchpad # Control scratchpad
bindd = SUPER, S, Toggle scratchpad, togglespecialworkspace, scratchpad bindd = SUPER, S, Toggle scratchpad, togglespecialworkspace, scratchpad
bindd = SUPER ALT, S, Move window to scratchpad, movetoworkspacesilent, special:scratchpad bindd = SUPER ALT, S, Move window to scratchpad, movetoworkspacesilent, special:scratchpad
@@ -53,6 +65,8 @@ bindd = SUPER CTRL, TAB, Former workspace, workspace, previous
# Move workspaces to other monitors # Move workspaces to other monitors
bindd = SUPER SHIFT ALT, LEFT, Move workspace to left monitor, movecurrentworkspacetomonitor, l bindd = SUPER SHIFT ALT, LEFT, Move workspace to left monitor, movecurrentworkspacetomonitor, l
bindd = SUPER SHIFT ALT, RIGHT, Move workspace to right monitor, movecurrentworkspacetomonitor, r bindd = SUPER SHIFT ALT, RIGHT, Move workspace to right monitor, movecurrentworkspacetomonitor, r
bindd = SUPER SHIFT ALT, UP, Move workspace to up monitor, movecurrentworkspacetomonitor, u
bindd = SUPER SHIFT ALT, DOWN, Move workspace to down monitor, movecurrentworkspacetomonitor, d
# Swap active window with the one next to it with SUPER + SHIFT + arrow keys # Swap active window with the one next to it with SUPER + SHIFT + arrow keys
bindd = SUPER SHIFT, LEFT, Swap window to the left, swapwindow, l bindd = SUPER SHIFT, LEFT, Swap window to the left, swapwindow, l
@@ -94,9 +108,9 @@ bindd = SUPER ALT, DOWN, Move window to group on bottom, moveintogroup, d
bindd = SUPER ALT, TAB, Next window in group, changegroupactive, f bindd = SUPER ALT, TAB, Next window in group, changegroupactive, f
bindd = SUPER ALT SHIFT, TAB, Previous window in group, changegroupactive, b bindd = SUPER ALT SHIFT, TAB, Previous window in group, changegroupactive, b
# Overload lateral window navigation for grouped windows # Window navigation for grouped windows
bindd = SUPER ALT, LEFT, Move grouped window focus left, changegroupactive, b bindd = SUPER CTRL, LEFT, Move grouped window focus left, changegroupactive, b
bindd = SUPER ALT, RIGHT, Move grouped window focus right, changegroupactive, f bindd = SUPER CTRL, RIGHT, Move grouped window focus right, changegroupactive, f
# Scroll through a set of grouped windows with SUPER + ALT + scroll # Scroll through a set of grouped windows with SUPER + ALT + scroll
bindd = SUPER ALT, mouse_down, Next window in group, changegroupactive, f bindd = SUPER ALT, mouse_down, Next window in group, changegroupactive, f

View File

@@ -19,6 +19,7 @@ bindd = SUPER, COMMA, Dismiss last notification, exec, makoctl dismiss
bindd = SUPER SHIFT, COMMA, Dismiss all notifications, exec, makoctl dismiss --all bindd = SUPER SHIFT, COMMA, Dismiss all notifications, exec, makoctl dismiss --all
bindd = SUPER CTRL, COMMA, Toggle silencing notifications, exec, makoctl mode -t do-not-disturb && makoctl mode | grep -q 'do-not-disturb' && notify-send "Silenced notifications" || notify-send "Enabled notifications" bindd = SUPER CTRL, COMMA, Toggle silencing notifications, exec, makoctl mode -t do-not-disturb && makoctl mode | grep -q 'do-not-disturb' && notify-send "Silenced notifications" || notify-send "Enabled notifications"
bindd = SUPER ALT, COMMA, Invoke last notification, exec, makoctl invoke bindd = SUPER ALT, COMMA, Invoke last notification, exec, makoctl invoke
bindd = SUPER SHIFT ALT, COMMA, Restore last notification, exec, makoctl restore
# Toggle idling # Toggle idling
bindd = SUPER CTRL, I, Toggle locking on idle, exec, omarchy-toggle-idle bindd = SUPER CTRL, I, Toggle locking on idle, exec, omarchy-toggle-idle
@@ -41,5 +42,11 @@ bindd = SUPER, PRINT, Color picker, exec, pkill hyprpicker || hyprpicker -a
bindd = SUPER CTRL, S, Share, exec, omarchy-menu share bindd = SUPER CTRL, S, Share, exec, omarchy-menu share
# Waybar-less information # Waybar-less information
bindd = SUPER CTRL, T, Show time, exec, notify-send " $(date +"%A %H:%M — %d %B W%V %Y")" bindd = SUPER CTRL ALT, T, Show time, exec, notify-send " $(date +"%A %H:%M — %d %B W%V %Y")"
bindd = SUPER CTRL, B, Show battery remaining, exec, notify-send "󰁹 Battery is at $(omarchy-battery-remaining)%" bindd = SUPER CTRL ALT, B, Show battery remaining, exec, notify-send "󰁹 Battery is at $(omarchy-battery-remaining)%"
# Control panels
bindd = SUPER CTRL, A, Audio controls, exec, omarchy-launch-audio
bindd = SUPER CTRL, B, Bluetooth controls, exec, omarchy-launch-bluetooth
bindd = SUPER CTRL, W, Wifi controls, exec, omarchy-launch-wifi
bindd = SUPER CTRL, T, Activity, exec, omarchy-launch-tui btop

View File

@@ -123,7 +123,7 @@ misc {
disable_splash_rendering = true disable_splash_rendering = true
focus_on_activate = true focus_on_activate = true
anr_missed_pings = 3 anr_missed_pings = 3
new_window_takes_over_fullscreen = 1 on_focus_under_fullscreen = 1
} }
# https://wiki.hypr.land/Configuring/Variables/#cursor # https://wiki.hypr.land/Configuring/Variables/#cursor

View File

@@ -1,11 +1,12 @@
# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more # See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
windowrule = suppressevent maximize, class:.* # Hyprland 0.53+ syntax
windowrule = suppress_event maximize, match:class .*
# Just dash of opacity by default # Just dash of opacity by default
windowrule = opacity 0.97 0.9, class:.* windowrule = opacity 0.97 0.9, match:class .*
# Fix some dragging issues with XWayland # Fix some dragging issues with XWayland
windowrule = nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0 windowrule = no_focus on, match:class ^$, match:title ^$, match:xwayland 1, match:float 1, match:fullscreen 0, match:pin 0
# App-specific tweaks # App-specific tweaks
source = ~/.local/share/omarchy/default/hypr/apps.conf source = ~/.local/share/omarchy/default/hypr/apps.conf

View File

@@ -18,6 +18,7 @@ invisible=false
[urgency=critical] [urgency=critical]
default-timeout=0 default-timeout=0
layer=overlay
[summary~="Setup Wi-Fi"] [summary~="Setup Wi-Fi"]
on-button-left=exec sh -c 'omarchy-notification-dismiss "Setup Wi-Fi"; omarchy-launch-wifi' on-button-left=exec sh -c 'omarchy-notification-dismiss "Setup Wi-Fi"; omarchy-launch-wifi'

View File

@@ -0,0 +1,47 @@
[colors.primary]
background = "{{ background }}"
foreground = "{{ foreground }}"
[colors.cursor]
text = "{{ background }}"
cursor = "{{ cursor }}"
[colors.vi_mode_cursor]
text = "{{ background }}"
cursor = "{{ cursor }}"
[colors.search.matches]
foreground = "{{ background }}"
background = "{{ color3 }}"
[colors.search.focused_match]
foreground = "{{ background }}"
background = "{{ color1 }}"
[colors.footer_bar]
foreground = "{{ background }}"
background = "{{ foreground }}"
[colors.selection]
text = "{{ selection_foreground }}"
background = "{{ selection_background }}"
[colors.normal]
black = "{{ color0 }}"
red = "{{ color1 }}"
green = "{{ color2 }}"
yellow = "{{ color3 }}"
blue = "{{ color4 }}"
magenta = "{{ color5 }}"
cyan = "{{ color6 }}"
white = "{{ color7 }}"
[colors.bright]
black = "{{ color8 }}"
red = "{{ color9 }}"
green = "{{ color10 }}"
yellow = "{{ color11 }}"
blue = "{{ color12 }}"
magenta = "{{ color13 }}"
cyan = "{{ color14 }}"
white = "{{ color15 }}"

View File

@@ -0,0 +1,83 @@
# Main background, empty for terminal default, need to be empty if you want transparent background
theme[main_bg]="{{ background }}"
# Main text color
theme[main_fg]="{{ foreground }}"
# Title color for boxes
theme[title]="{{ foreground }}"
# Highlight color for keyboard shortcuts
theme[hi_fg]="{{ accent }}"
# Background color of selected item in processes box
theme[selected_bg]="{{ color8 }}"
# Foreground color of selected item in processes box
theme[selected_fg]="{{ accent }}"
# Color of inactive/disabled text
theme[inactive_fg]="{{ color8 }}"
# Color of text appearing on top of graphs, i.e uptime and current network graph scaling
theme[graph_text]="{{ foreground }}"
# Background color of the percentage meters
theme[meter_bg]="{{ color8 }}"
# Misc colors for processes box including mini cpu graphs, details memory graph and details status text
theme[proc_misc]="{{ foreground }}"
# CPU, Memory, Network, Proc box outline colors
theme[cpu_box]="{{ color5 }}"
theme[mem_box]="{{ color2 }}"
theme[net_box]="{{ color1 }}"
theme[proc_box]="{{ accent }}"
# Box divider line and small boxes line color
theme[div_line]="{{ color8 }}"
# Temperature graph color (Green -> Yellow -> Red)
theme[temp_start]="{{ color2 }}"
theme[temp_mid]="{{ color3 }}"
theme[temp_end]="{{ color1 }}"
# CPU graph colors (Teal -> Lavender)
theme[cpu_start]="{{ color6 }}"
theme[cpu_mid]="{{ color4 }}"
theme[cpu_end]="{{ color5 }}"
# Mem/Disk free meter (Mauve -> Lavender -> Blue)
theme[free_start]="{{ color5 }}"
theme[free_mid]="{{ color4 }}"
theme[free_end]="{{ color6 }}"
# Mem/Disk cached meter (Sapphire -> Lavender)
theme[cached_start]="{{ color4 }}"
theme[cached_mid]="{{ color6 }}"
theme[cached_end]="{{ color5 }}"
# Mem/Disk available meter (Peach -> Red)
theme[available_start]="{{ color3 }}"
theme[available_mid]="{{ color1 }}"
theme[available_end]="{{ color1 }}"
# Mem/Disk used meter (Green -> Sky)
theme[used_start]="{{ color2 }}"
theme[used_mid]="{{ color6 }}"
theme[used_end]="{{ color4 }}"
# Download graph colors (Peach -> Red)
theme[download_start]="{{ color3 }}"
theme[download_mid]="{{ color1 }}"
theme[download_end]="{{ color1 }}"
# Upload graph colors (Green -> Sky)
theme[upload_start]="{{ color2 }}"
theme[upload_mid]="{{ color6 }}"
theme[upload_end]="{{ color4 }}"
# Process box color gradient for threads, mem and cpu usage (Sapphire -> Mauve)
theme[process_start]="{{ color6 }}"
theme[process_mid]="{{ color4 }}"
theme[process_end]="{{ color5 }}"

View File

@@ -0,0 +1,22 @@
background = {{ background }}
foreground = {{ foreground }}
cursor-color = {{ cursor }}
selection-background = {{ selection_background }}
selection-foreground = {{ selection_foreground }}
palette = 0={{ color0 }}
palette = 1={{ color1 }}
palette = 2={{ color2 }}
palette = 3={{ color3 }}
palette = 4={{ color4 }}
palette = 5={{ color5 }}
palette = 6={{ color6 }}
palette = 7={{ color7 }}
palette = 8={{ color8 }}
palette = 9={{ color9 }}
palette = 10={{ color10 }}
palette = 11={{ color11 }}
palette = 12={{ color12 }}
palette = 13={{ color13 }}
palette = 14={{ color14 }}
palette = 15={{ color15 }}

View File

@@ -0,0 +1,94 @@
@define-color foreground {{ foreground }};
@define-color background {{ background }};
@define-color accent {{ accent }};
@define-color muted {{ color8 }};
@define-color card_bg {{ color0 }};
@define-color text_dark {{ background }};
@define-color accent_hover {{ color12 }};
@define-color selected_tab {{ accent }};
@define-color text {{ foreground }};
* {
all: unset;
font-family: JetBrains Mono NF;
color: @foreground;
font-weight: bold;
font-size: 16px;
}
.window {
background: alpha(@background, 0.95);
border: solid 2px @accent;
margin: 4px;
padding: 18px;
}
tabs {
padding: 0.5rem 1rem;
}
tabs > tab {
margin-right: 1rem;
}
.tab-label {
color: @text;
transition: all 0.2s ease;
}
tabs > tab:checked > .tab-label, tabs > tab:active > .tab-label {
text-decoration: underline currentColor;
color: @selected_tab;
}
tabs > tab:focus > .tab-label {
color: @foreground;
}
.page {
padding: 1rem;
}
.image-label {
font-size: 12px;
padding: 0.25rem;
}
flowboxchild > .card, button > .card {
transition: all 0.2s ease;
border: solid 2px transparent;
border-color: @background;
border-radius: 5px;
background-color: @card_bg;
padding: 5px;
}
flowboxchild:hover > .card, button:hover > .card, flowboxchild:active > .card, flowboxchild:selected > .card, button:active > .card, button:selected > .card, button:focus > .card {
border: solid 2px @accent;
}
.image {
border-radius: 5px;
}
.region-button {
padding: 0.5rem 1rem;
border-radius: 5px;
background-color: @accent;
color: @text_dark;
transition: all 0.2s ease;
}
.region-button > label {
color: @text_dark;
}
.region-button:not(:disabled):hover, .region-button:not(:disabled):focus {
background-color: @accent_hover;
color: @text_dark;
}
.region-button:disabled {
background-color: @muted;
color: @background;
}

View File

@@ -1,4 +1,4 @@
$activeBorderColor = rgb(d3c6aa) $activeBorderColor = rgb({{ accent_strip }})
general { general {
col.active_border = $activeBorderColor col.active_border = $activeBorderColor

View File

@@ -0,0 +1,5 @@
$color = rgba({{ background_rgb }}, 1.0)
$inner_color = rgba({{ background_rgb }}, 0.8)
$outer_color = rgba({{ foreground_rgb }}, 1.0)
$font_color = rgba({{ foreground_rgb }}, 1.0)
$check_color = rgba({{ accent_rgb }}, 1.0)

View File

@@ -0,0 +1,27 @@
foreground {{ foreground }}
background {{ background }}
selection_foreground {{ selection_foreground }}
selection_background {{ selection_background }}
cursor {{ cursor }}
cursor_text_color {{ background }}
active_border_color {{ active_border_color }}
active_tab_background {{ active_tab_background }}
color0 {{ color0 }}
color1 {{ color1 }}
color2 {{ color2 }}
color3 {{ color3 }}
color4 {{ color4 }}
color5 {{ color5 }}
color6 {{ color6 }}
color7 {{ color7 }}
color8 {{ color8 }}
color9 {{ color9 }}
color10 {{ color10 }}
color11 {{ color11 }}
color12 {{ color12 }}
color13 {{ color13 }}
color14 {{ color14 }}
color15 {{ color15 }}

View File

@@ -0,0 +1,5 @@
include=~/.local/share/omarchy/default/mako/core.ini
text-color={{ foreground }}
border-color={{ foreground }}
background-color={{ background }}

View File

@@ -0,0 +1,5 @@
@define-color background-color {{ background }};
@define-color border-color {{ foreground }};
@define-color label {{ foreground }};
@define-color image {{ foreground }};
@define-color progress {{ foreground }};

View File

@@ -0,0 +1,6 @@
@define-color selected-text {{ accent }};
@define-color text {{ foreground }};
@define-color base {{ background }};
@define-color border {{ foreground }};
@define-color foreground {{ foreground }};
@define-color background {{ background }};

View File

@@ -0,0 +1,2 @@
@define-color foreground {{ foreground }};
@define-color background {{ background }};

View File

@@ -11,6 +11,13 @@ if lspci -nn | grep -q "106b:180[12]"; then
t2fanrd \ t2fanrd \
tiny-dfr tiny-dfr
# Add user to video group (required for tiny-dfr to access /dev/dri devices)
sudo usermod -aG video ${USER}
# Enable T2 services
sudo systemctl enable t2fanrd.service
sudo systemctl enable tiny-dfr.service
echo "apple-bce" | sudo tee /etc/modules-load.d/t2.conf >/dev/null echo "apple-bce" | sudo tee /etc/modules-load.d/t2.conf >/dev/null
echo "MODULES+=(apple-bce usbhid hid_apple hid_generic xhci_pci xhci_hcd)" | sudo tee /etc/mkinitcpio.conf.d/apple-t2.conf >/dev/null echo "MODULES+=(apple-bce usbhid hid_apple hid_generic xhci_pci xhci_hcd)" | sudo tee /etc/mkinitcpio.conf.d/apple-t2.conf >/dev/null

View File

@@ -1,80 +1,40 @@
# ============================================================================== NVIDIA="$(lspci | grep -i 'nvidia')"
# Hyprland NVIDIA Setup Script for Arch Linux
# ==============================================================================
# This script automates the installation and configuration of NVIDIA drivers
# for use with Hyprland on Arch Linux, following the official Hyprland wiki.
#
# Author: https://github.com/Kn0ax
#
# ==============================================================================
# --- GPU Detection ---
if [ -n "$(lspci | grep -i 'nvidia')" ]; then
# --- Driver Selection ---
# Turing (16xx, 20xx), Ampere (30xx), Ada (40xx), and newer recommend the open-source kernel modules
if echo "$(lspci | grep -i 'nvidia')" | grep -q -E "RTX [2-9][0-9]|GTX 16"; then
NVIDIA_DRIVER_PACKAGE="nvidia-open-dkms"
else
NVIDIA_DRIVER_PACKAGE="nvidia-dkms"
fi
if [ -n "$NVIDIA" ]; then
# Check which kernel is installed and set appropriate headers package # Check which kernel is installed and set appropriate headers package
KERNEL_HEADERS="linux-headers" # Default KERNEL_HEADERS="$(pacman -Qqs '^linux(-zen|-lts|-hardened)?$' | head -1)-headers"
if pacman -Q linux-zen &>/dev/null; then
KERNEL_HEADERS="linux-zen-headers" if echo "$NVIDIA" | grep -qE "RTX [2-9][0-9]|GTX 16"; then
elif pacman -Q linux-lts &>/dev/null; then # Turing (16xx, 20xx), Ampere (30xx), Ada (40xx), and newer recommend the open-source kernel modules
KERNEL_HEADERS="linux-lts-headers" PACKAGES=(nvidia-open-dkms nvidia-utils lib32-nvidia-utils libva-nvidia-driver)
elif pacman -Q linux-hardened &>/dev/null; then elif echo "$NVIDIA" | grep -qE "GTX 9|GTX 10"; then
KERNEL_HEADERS="linux-hardened-headers" # Pascal (10xx) and Maxwell (9xx) use legacy branch that can only be installed from AUR
PACKAGES=(nvidia-580xx-dkms nvidia-580xx-utils lib32-nvidia-580xx-utils)
fi
# Bail if no supported GPU
if [ -z "${PACKAGES+x}" ]; then
echo "No compatible driver for your NVIDIA GPU. See: https://wiki.archlinux.org/title/NVIDIA"
exit 0
fi fi
# force package database refresh pacman -S --needed --noconfirm "$KERNEL_HEADERS" "${PACKAGES[@]}"
sudo pacman -Syu --noconfirm
# Install packages
PACKAGES_TO_INSTALL=(
"${KERNEL_HEADERS}"
"${NVIDIA_DRIVER_PACKAGE}"
"nvidia-utils"
"lib32-nvidia-utils"
"egl-wayland"
"libva-nvidia-driver" # For VA-API hardware acceleration
"qt5-wayland"
"qt6-wayland"
)
sudo pacman -S --needed --noconfirm "${PACKAGES_TO_INSTALL[@]}"
# Configure modprobe for early KMS # Configure modprobe for early KMS
echo "options nvidia_drm modeset=1" | sudo tee /etc/modprobe.d/nvidia.conf >/dev/null sudo tee /etc/modprobe.d/nvidia.conf <<EOF >/dev/null
options nvidia_drm modeset=1
EOF
# Configure mkinitcpio for early loading # Configure mkinitcpio for early loading
MKINITCPIO_CONF="/etc/mkinitcpio.conf" sudo tee /etc/mkinitcpio.conf.d/nvidia.conf <<EOF >/dev/null
MODULES+=(nvidia nvidia_modeset nvidia_uvm nvidia_drm)
EOF
# Define modules # Add NVIDIA environment variables
NVIDIA_MODULES="nvidia nvidia_modeset nvidia_uvm nvidia_drm" cat >>$HOME/.config/hypr/envs.conf <<'EOF'
# Create backup # NVIDIA
sudo cp "$MKINITCPIO_CONF" "${MKINITCPIO_CONF}.backup"
# Remove any old nvidia modules to prevent duplicates
sudo sed -i -E 's/ nvidia_drm//g; s/ nvidia_uvm//g; s/ nvidia_modeset//g; s/ nvidia//g;' "$MKINITCPIO_CONF"
# Add the new modules at the start of the MODULES array
sudo sed -i -E "s/^(MODULES=\\()/\\1${NVIDIA_MODULES} /" "$MKINITCPIO_CONF"
# Clean up potential double spaces
sudo sed -i -E 's/ +/ /g' "$MKINITCPIO_CONF"
sudo mkinitcpio -P
# Add NVIDIA environment variables to hyprland.conf
HYPRLAND_CONF="$HOME/.config/hypr/hyprland.conf"
if [ -f "$HYPRLAND_CONF" ]; then
cat >>"$HYPRLAND_CONF" <<'EOF'
# NVIDIA environment variables
env = NVD_BACKEND,direct env = NVD_BACKEND,direct
env = LIBVA_DRIVER_NAME,nvidia env = LIBVA_DRIVER_NAME,nvidia
env = __GLX_VENDOR_LIBRARY_NAME,nvidia env = __GLX_VENDOR_LIBRARY_NAME,nvidia
EOF EOF
fi
fi fi

View File

@@ -1,3 +1,6 @@
# Give the user 10 instead of 3 tries to fat finger their password before lockout # Give the user 10 instead of 3 tries to fat finger their password before lockout
echo "Defaults passwd_tries=10" | sudo tee /etc/sudoers.d/passwd-tries echo "Defaults passwd_tries=10" | sudo tee /etc/sudoers.d/passwd-tries
sudo chmod 440 /etc/sudoers.d/passwd-tries sudo chmod 440 /etc/sudoers.d/passwd-tries
# Set for hyprlock too
sudo sed -i 's/^# *deny = .*/deny = 10/' /etc/security/faillock.conf

View File

@@ -1,5 +1,9 @@
#!/bin/bash #!/bin/bash
# Ensure Walker service is started automatically on boot
mkdir -p ~/.config/autostart/
cp $OMARCHY_PATH/autostart/walker.desktop ~/.config/autostart/
# Create pacman hook to restart walker after updates # Create pacman hook to restart walker after updates
sudo mkdir -p /etc/pacman.d/hooks sudo mkdir -p /etc/pacman.d/hooks
sudo tee /etc/pacman.d/hooks/walker-restart.hook > /dev/null << EOF sudo tee /etc/pacman.d/hooks/walker-restart.hook > /dev/null << EOF

View File

@@ -3,25 +3,27 @@ if command -v limine &>/dev/null; then
sudo tee /etc/mkinitcpio.conf.d/omarchy_hooks.conf <<EOF >/dev/null sudo tee /etc/mkinitcpio.conf.d/omarchy_hooks.conf <<EOF >/dev/null
HOOKS=(base udev plymouth keyboard autodetect microcode modconf kms keymap consolefont block encrypt filesystems fsck btrfs-overlayfs) HOOKS=(base udev plymouth keyboard autodetect microcode modconf kms keymap consolefont block encrypt filesystems fsck btrfs-overlayfs)
EOF
sudo tee /etc/mkinitcpio.conf.d/thunderbolt_module.conf <<EOF >/dev/null
MODULES+=(thunderbolt)
EOF EOF
[[ -f /boot/EFI/limine/limine.conf ]] || [[ -f /boot/EFI/BOOT/limine.conf ]] && EFI=true # Detect boot mode
[[ -d /sys/firmware/efi ]] && EFI=true
# Conf location is different between EFI and BIOS # Find config location
if [[ -n "$EFI" ]]; then if [[ -f /boot/EFI/arch-limine/limine.conf ]]; then
# Check USB location first, then regular EFI location limine_config="/boot/EFI/arch-limine/limine.conf"
if [[ -f /boot/EFI/BOOT/limine.conf ]]; then elif [[ -f /boot/EFI/BOOT/limine.conf ]]; then
limine_config="/boot/EFI/BOOT/limine.conf" limine_config="/boot/EFI/BOOT/limine.conf"
else elif [[ -f /boot/EFI/limine/limine.conf ]]; then
limine_config="/boot/EFI/limine/limine.conf" limine_config="/boot/EFI/limine/limine.conf"
fi elif [[ -f /boot/limine/limine.conf ]]; then
else
limine_config="/boot/limine/limine.conf" limine_config="/boot/limine/limine.conf"
fi elif [[ -f /boot/limine.conf ]]; then
limine_config="/boot/limine.conf"
# Double-check and exit if we don't have a config file for some reason else
if [[ ! -f $limine_config ]]; then echo "Error: Limine config not found" >&2
echo "Error: Limine config not found at $limine_config" >&2
exit 1 exit 1
fi fi
@@ -95,10 +97,15 @@ EOF
fi fi
fi fi
# Enable quota to allow space-aware algorithms to work
sudo btrfs quota enable /
# Tweak default Snapper configs # Tweak default Snapper configs
sudo sed -i 's/^TIMELINE_CREATE="yes"/TIMELINE_CREATE="no"/' /etc/snapper/configs/{root,home} sudo sed -i 's/^TIMELINE_CREATE="yes"/TIMELINE_CREATE="no"/' /etc/snapper/configs/{root,home}
sudo sed -i 's/^NUMBER_LIMIT="50"/NUMBER_LIMIT="5"/' /etc/snapper/configs/{root,home} sudo sed -i 's/^NUMBER_LIMIT="50"/NUMBER_LIMIT="5"/' /etc/snapper/configs/{root,home}
sudo sed -i 's/^NUMBER_LIMIT_IMPORTANT="10"/NUMBER_LIMIT_IMPORTANT="5"/' /etc/snapper/configs/{root,home} sudo sed -i 's/^NUMBER_LIMIT_IMPORTANT="10"/NUMBER_LIMIT_IMPORTANT="5"/' /etc/snapper/configs/{root,home}
sudo sed -i 's/^SPACE_LIMIT="0.5"/SPACE_LIMIT="0.3"/' /etc/snapper/configs/{root,home}
sudo sed -i 's/^FREE_LIMIT="0.2"/FREE_LIMIT="0.3"/' /etc/snapper/configs/{root,home}
chrootable_systemctl_enable limine-snapper-sync.service chrootable_systemctl_enable limine-snapper-sync.service
fi fi

View File

@@ -4,11 +4,13 @@
1password-beta 1password-beta
1password-cli 1password-cli
aether aether
alacritty
asdcontrol asdcontrol
avahi avahi
bash-completion bash-completion
bat bat
bluetui bluetui
bolt
brightnessctl brightnessctl
btop btop
clang clang
@@ -19,6 +21,7 @@ cups-pdf
docker docker
docker-buildx docker-buildx
docker-compose docker-compose
dotnet-runtime-9.0
dust dust
evince evince
exfatprogs exfatprogs
@@ -46,6 +49,7 @@ gvfs-smb
hypridle hypridle
hyprland hyprland
hyprland-guiutils hyprland-guiutils
hyprland-preview-share-picker
hyprlock hyprlock
hyprpicker hyprpicker
hyprsunset hyprsunset
@@ -86,6 +90,7 @@ obsidian
omarchy-chromium omarchy-chromium
omarchy-nvim omarchy-nvim
omarchy-walker omarchy-walker
opencode
pamixer pamixer
pinta pinta
playerctl playerctl
@@ -139,4 +144,5 @@ xmlstarlet
xournalpp xournalpp
yaru-icon-theme yaru-icon-theme
yay yay
yq
zoxide zoxide

View File

@@ -27,9 +27,12 @@ linux
linux-firmware linux-firmware
linux-headers linux-headers
macbook12-spi-driver-dkms macbook12-spi-driver-dkms
nvidia-580xx-dkms
nvidia-dkms nvidia-dkms
nvidia-open-dkms nvidia-open-dkms
nvidia-580xx-utils
nvidia-utils nvidia-utils
lib32-nvidia-580xx-utils
lib32-nvidia-utils lib32-nvidia-utils
pipewire pipewire
pipewire-alsa pipewire-alsa

Some files were not shown because too many files have changed in this diff Show More