Compare commits

...

161 Commits

Author SHA1 Message Date
Ryan Hughes
38f5a00ad6 Merge pull request #2622 from basecamp/dev
v3.1.1
2025-10-20 11:42:26 -04:00
Ryan Hughes
12f9beab86 Update version 2025-10-20 11:23:14 -04:00
Ryan Hughes
572bbf823b Update walker migration to run for everyone 2025-10-20 10:52:03 -04:00
Bruno Martins
f297ad1e99 fix: universal RAM detection (locale-independent) (#2566)
* fix: make RAM detection compatible with all locales (free output in any language)

* Look at total RAM, not just free

---------

Co-authored-by: David Heinemeier Hansson <david@hey.com>
2025-10-20 07:01:44 -07:00
Jon Kinney
c4f93787d6 Error fallback if terminal was not installed successfully (#2611) 2025-10-20 06:55:28 -07:00
Timo Hubois
730cba2e2a feat(clipboard.conf): add descriptions (#2615) 2025-10-20 06:54:38 -07:00
David Heinemeier Hansson
d70d84af71 Fix changing workspace with mousescroll
Fixes #2586
2025-10-20 06:53:14 -07:00
Brian Blakely
d11d30ac31 Add binding for tiled full screen toggle (#2598)
This seems niche, but you might like it. Binds Super + Ctrl + F to force-tile a fullscreen app. It works nice for things including running games in a tile or watching YouTube in a pip tile without needing to configure these apps specifically to do so.
2025-10-20 05:27:49 -07:00
David Heinemeier Hansson
ef52bb5f93 Move version forward 2025-10-19 09:29:44 +02:00
David Heinemeier Hansson
73036988ed Update version 2025-10-19 09:29:04 +02:00
David Heinemeier Hansson
6ee6dbaf2a Merge pull request #2417 from basecamp/dev
Omarchy 3.1.0
2025-10-19 09:27:33 +02:00
David Heinemeier Hansson
be697860aa Stick with existing name inside theme 2025-10-19 09:25:39 +02:00
Ryan Hughes
f64d73c24c Ensure consistent size 2025-10-19 02:30:28 -04:00
Ryan Hughes
880e779cf2 Make border easier to override 2025-10-19 02:30:20 -04:00
Ryan Hughes
a1e80e1cab Add migration for misc. items since 3.1.0-RC 2025-10-18 17:44:06 -04:00
Ryan Hughes
bd761379a7 Add nfs support 2025-10-18 17:01:02 -04:00
David Heinemeier Hansson
cc2523ff89 Use 3 blur passes by default
Co-authored-by: @vyrx-dev
2025-10-18 21:51:57 +02:00
David Heinemeier Hansson
d421b63873 Revert "Walker now needs a default qalculate/qalc.cfg to work out of the box"
This reverts commit bc99b8ce96.
2025-10-18 21:38:27 +02:00
Ryan Hughes
5cf56f31e6 Update wayfreeze to -git 2025-10-18 15:19:43 -04:00
Ryan Hughes
636416bbd2 Revert "Remove wayfreeze until we have the AUR pkg built in OPR"
This reverts commit ea30329522.
2025-10-18 15:19:09 -04:00
David Heinemeier Hansson
40312523e3 Suggest that this is a fine spot for custom Hyprland configs 2025-10-18 21:17:06 +02:00
David Heinemeier Hansson
735fc2d263 Fix indention 2025-10-18 21:09:02 +02:00
David Heinemeier Hansson
dc00227f0a Fix all themes active border for groups to match regular active border 2025-10-18 21:09:02 +02:00
Ryan Hughes
5028e241c5 Install Node by default 2025-10-18 14:27:09 -04:00
David Heinemeier Hansson
fc4cf86487 We can no longer just relaunch hyprland
So restart it is
2025-10-18 20:08:42 +02:00
David Heinemeier Hansson
3bf7c15906 Relaunching Hyprland is not compatible with sddm
But it is also no longer necessary since ENVs are dynamically reloaded
2025-10-18 20:05:01 +02:00
David Heinemeier Hansson
bc99b8ce96 Walker now needs a default qalculate/qalc.cfg to work out of the box 2025-10-18 16:23:27 +02:00
Hendrik Bergunde
53336e21b1 Fix google-chrome opacity in hyprland (#2526)
Google Chrome reports itself as google-chrome in `hyprctl clients` but
the matching for the windowrule did not work, probably because since
hyprland 0.46.0 the regex matching needs to span the entire string.

This change makes "google-chrome" get recognized so that windows of that
browser receive the chromium-based-browser tag, which in turn provides
better opacity settings for Chrome windows. Since "chrome" was matched
by the regex before, this fix now should restore the originally intended
behavior for Google Chrome.

Co-authored-by: David Heinemeier Hansson <david@hey.com>
2025-10-18 16:17:23 +02:00
David Heinemeier Hansson
24e76a3b90 Add hooks for theme set, font set, and post update (#2527)
Ala git hooks
2025-10-18 16:11:49 +02:00
David Heinemeier Hansson
63e3b3e32f Hide yet another fcitx5 filler app 2025-10-18 15:34:40 +02:00
David Heinemeier Hansson
6790cfc1f5 Fix spacing for waybar icons for all 2025-10-18 13:40:23 +02:00
brink-lab
920b1a983f Fix spacing between icons on Waybar (#1411)
* Update style.css

Fixes the uneven spacing between icons on waybar by updating styling.css with Propo font family.
However, Propo introduces a small issue as the volume icons don't have the same with. As a consequence, icons left of volume will move based on the displayed volume icon. To solve this, I added a non-Propo font to the pipewire module as well - this way the volume icons have fixed length but eats a bit into the spacing towards the CPU icon. But I see this as the best trade-off.

* Update waybar config.jsonc

* Update tray spacing in waybar config

* Modify margins in style.css

Adjusted margins for various elements.

* Update waybar css for even spacing

* Update Waybar config tray spacing
2025-10-18 13:32:38 +02:00
David Heinemeier Hansson
80907fcf4f Ensure we use 644 for all configs and migrations 2025-10-18 13:30:19 +02:00
Vaibhav Verma
c401c877a3 Fix theming for Brave and add theming support for helium (#2518)
* Fix theeming for Brave and add theeming support for helium

* bugfix: syntax
2025-10-18 12:18:01 +02:00
Vaibhav Verma
e03193eea4 Fix omarchy-theme-set-vscode to only remove theme instead of the complete line (#2523) 2025-10-18 12:16:27 +02:00
Miha Rekar
c24c1f1c5a Update clipboard manager shortcut in the migration warning (#2524) 2025-10-18 12:15:55 +02:00
David Heinemeier Hansson
ef2bfb37ad Correct the clipboard manager hotkey 2025-10-18 12:11:50 +02:00
David Heinemeier Hansson
ea30329522 Remove wayfreeze until we have the AUR pkg built in OPR
CC @ryanrhughes
2025-10-18 12:00:07 +02:00
David Heinemeier Hansson
9ea990b88c Add missing CR 2025-10-17 23:51:25 +02:00
David Heinemeier Hansson
5a2a49c999 Note that accepting will change existing bindings but make a backup 2025-10-17 23:48:20 +02:00
David Heinemeier Hansson
5a10222dc9 No longer needed
We are moving all the bindings together
2025-10-17 23:45:38 +02:00
David Heinemeier Hansson
cad71169c2 Add Aether to existing installations as well 2025-10-17 23:38:16 +02:00
Ryan Hughes
0588cc8e5b openai-codex-bin -> openai-codex due to being outdated 2025-10-17 15:44:13 -04:00
Ryan Hughes
0b1875e2b9 Include Aether by default 2025-10-17 14:15:31 -04:00
Ryan Hughes
648551f98a Add shift+insert keybind 2025-10-17 14:00:51 -04:00
David Heinemeier Hansson
1a1c736936 Make setting timezone an explicit act
Since we can't always rely on geo guessing everywhere and it is slow
2025-10-17 12:50:02 +03:00
Claudio Benvenuti
a874f6f8a6 Fix: include symlinked backgrounds in theme rotation (#2355) 2025-10-17 12:27:02 +03:00
Darcy Brown
4174ff7b13 Dynamic Color Match Obsidian theme to current Omarchy theme (#791)
* feat: obsidian theme to tie into Omarchy theme

* better color matching for search result matches

* feat: simplify install flow

* Removed install/remove scripts and flow
* First `omarchy-theme-set-obsidian` run will look for vaults in
Documents and Dropbox folders and add them to
`/.local/state/omarchy/obsidian-vaults`
  * Point of this is such that we assume a couple locations to look for
vaults but allow people to add vaults to the file for custom locations.
Subsequent theme-set invocations aren't impacted by find/search on large
systems
* Each `omarchy-theme-set` invocation will install the themes on all
found/registered vaults if missing and update the live theme
* Added an option of `omarchy-theme-set-obsidian --reset` to wipe out
themes in registered vaults and remove the registry file. This would be
the option to re-run to the automatic vault registration.
* Added migration to trigger install immediately in Obisdian, note that
you still need to pick Omarchy theme.
2025-10-17 12:22:38 +03:00
David Heinemeier Hansson
f607ba51ff Include Super + X for cut
This won't work in terminal, but still better to have it consistent
2025-10-17 12:11:30 +03:00
Ryan Hughes
06827c8ee6 Add smart region selection to omarchy-cmd-snapshot (#1714)
* Add smart snapshot selection

* Add wayfreeze

* Update to only include current workspace in rectangles

* Fix if there are no windows on screen

* Add option to sidestep slurp and copy straight to clipboard

* Update capture menu

---------

Co-authored-by: David Heinemeier Hansson <david@hey.com>
2025-10-17 11:58:40 +03:00
Stefan Gründel
dcac313bb2 disable update checks in VS Code on install (#1730)
* Add ssh-agent configuration and enable service on user install

* add migration

* install SSH Agent via service menu

* Delete install/config/all.sh

* Delete migrations/1757524404.sh

* Delete install/config/ssh-agent.sh

* Update envs.conf

* Revert "Delete install/config/all.sh"

This reverts commit 579fb835ad.

* revert all.sh changes

* disable update checks in VS Code on install

* Delete bin/omarchy-install-ssh-agent

* Update omarchy-menu

revert changes from wrong branch

* add migration script

* Merge back

* Fixup

---------

Co-authored-by: David Heinemeier Hansson <david@hey.com>
2025-10-17 11:42:59 +03:00
David Heinemeier Hansson
48feb5d404 Need to grab the last not first pid now
Not entirely sure why!
2025-10-17 11:39:25 +03:00
David Heinemeier Hansson
a8a6cde199 Remove eza theming in favor of just sticking with ansi
Ended up not liking the themes better than what ansi gives us
2025-10-17 11:03:54 +03:00
Ryan Hughes
ccde212644 Add Windows VM (#2462)
* adding TUI for starting up windows VM

* updating to use docker-compose

* adding possibility to set windows product-key

* ram and cpu settings

* first time run notes

* add two needed pacman packages

* key and package install

* Revert "add two needed pacman packages"

This reverts commit 04dc96cee0.

* add install and remove scripts

* install icon

* rename scripts and menu to Windows VM

* rename also launch script to windows vm

* update nameing

* remove quotes

* fix paramter and quiting after installation

* fix launch script

* update

* certificate acceptance and remove of desktop app

* move desktop app

* rename app from "Windows VM" to "Windows"

* add example of sharing local share with Windows

* merge 'dev' into windows-docker-vm

* exchange rdesktop with freerdc

* accept certificates automatically so user don't fail first try

* remove certi during normal launch (handled in install process)

* remove volumes and orphans to have clean state (avoids hang on login)

* /cert option still needed

* Simplify package installs

* Fix icon + desktop to prevent creation on initial install

* omarchy-windows-vm in working form

* Don't need this anymore

* Fix commands

* Always use uwsm-app

* We are generating it instead

* Make omarchy-pkg-add quiet when the packages are already there

* Improve the questionnaire

* Show where you change resource usage

* Add default Windows share

---------

Co-authored-by: sspaeti <simon@ssp.sh>
Co-authored-by: David Heinemeier Hansson <david@hey.com>
2025-10-17 10:07:08 +03:00
Ryan Hughes
ea38e43fe6 Add calc to refresh 2025-10-17 00:41:19 -04:00
Ryan Hughes
a672f6350a Don't need this 2025-10-17 00:41:13 -04:00
Ryan Hughes
2789454183 Don't need to relaunch anymore 2025-10-16 20:52:57 -04:00
Ryan Hughes
a7a075d898 Prevent calculating flash 2025-10-16 12:26:35 -04:00
Ryan Hughes
c6b598ba91 Rename nvim setup 2025-10-16 11:44:02 -04:00
Ryan Hughes
ad3bc03653 Rename nvim setup 2025-10-16 11:41:30 -04:00
Ryan Hughes
96eed35b51 Kickstart Walker service if it goes down 2025-10-16 11:27:14 -04:00
Ryan Hughes
f81f9dd181 Disable actions 2025-10-16 10:55:06 -04:00
Ryan Hughes
d50e4a6814 Add elephant config to refresh 2025-10-16 10:55:06 -04:00
David Heinemeier Hansson
6b1b73b87c Use uwsm-app instead of uwsm app consistently 2025-10-16 13:59:08 +03:00
David Heinemeier Hansson
94aac3777c Expose screenrecording with webcam 2025-10-16 13:52:36 +03:00
David Heinemeier Hansson
8bc0980bc5 Always reload every terminal
So you can use it even if you mix and match
2025-10-16 13:47:20 +03:00
Carl-Johan Landin
9c145b91d7 Fix typo in everforest theme ghostty.conf (#2471)
Co-authored-by: Carl-Johan Landin <carl-johan@teenage.engineering>
2025-10-16 13:44:09 +03:00
Johannes Normann Jensen
dff61f0748 feat: add mssql-server to omarchy-install-docker-dbs (#2474) 2025-10-16 10:24:21 +03:00
David Heinemeier Hansson
fecf83d07b Hookup keybindings notification to actual keybindings menu 2025-10-15 22:04:06 +03:00
David Heinemeier Hansson
f0bba6c6e8 Fix the terminal fixer 2025-10-15 19:21:43 +03:00
David Heinemeier Hansson
f6330054fd Drop localsend-bin if it was already there 2025-10-15 19:11:26 +03:00
David Heinemeier Hansson
6247712205 Keep terminal on SUPER + RETURN 2025-10-15 19:09:08 +03:00
David Heinemeier Hansson
44231e43b7 Ensure clock is up to date 2025-10-15 18:55:09 +03:00
David Heinemeier Hansson
ac0ffa42dd Kick off the new migration from within itself 2025-10-15 18:36:57 +03:00
David Heinemeier Hansson
e080f62de0 Simplify the initial setup to just the PATH 2025-10-15 18:28:28 +03:00
David Heinemeier Hansson
c0dc0a0e47 Revert "Update packages as the very first thing"
This reverts commit 351d8ac938.
2025-10-15 18:25:05 +03:00
David Heinemeier Hansson
351d8ac938 Update packages as the very first thing 2025-10-15 18:22:03 +03:00
Ryan Hughes
4100ebba47 Merge pull request #2425 from sa-dd/dev
fix: make bcm43xx driver script vendor agnostic
2025-10-15 10:53:43 -04:00
Ryan Hughes
a67391b3ea Clarify Broadcom chip support comments 2025-10-15 10:53:29 -04:00
David Heinemeier Hansson
06668cf20f Reveal main keybindings on welcome 2025-10-15 17:48:17 +03:00
Ryan Hughes
385f846fff Re-add ristretto color fixes 2025-10-15 10:47:25 -04:00
Ryan Hughes
d3048b56bd Consolidate migrations for wl-screenrec + wf-recorder 2025-10-15 10:35:13 -04:00
David Heinemeier Hansson
1a4d1d675c Ensure all packages are up to date
Needed for versions prior to when we do this before applying migrations
2025-10-15 13:51:41 +03:00
David Heinemeier Hansson
d06708d56e No longer needed 2025-10-15 13:48:16 +03:00
David Heinemeier Hansson
2d788dec21 wl-clip-hist is buggy and feels like its a cure worse than the disease 2025-10-15 13:42:26 +03:00
David Heinemeier Hansson
de1e47d2f7 New version 2025-10-15 13:33:42 +03:00
David Heinemeier Hansson
1eecf0b8e7 Copy over updated app icons that work with light mode 2025-10-15 12:46:21 +03:00
Ryan Hughes
bd52f8ae52 Fix some missing bindings 2025-10-14 21:54:56 -04:00
Ryan Hughes
d625178a9b Remove test garbage 2025-10-14 16:09:29 -04:00
Ryan Hughes
bb943ae24f Update restart to prevent dbus error 2025-10-14 16:03:17 -04:00
David Heinemeier Hansson
e4d24ca637 Use SUPER + G for grouping 2025-10-14 22:43:29 +03:00
David Heinemeier Hansson
fd9a6f48b3 Can't add this if we are using SUPER + G 2025-10-14 22:43:29 +03:00
Alexander Zaytsev
1d2d6740dd Update application icons (#2450)
* Update icons

* Optimize images
2025-10-14 22:42:51 +03:00
Steve Lamotte
102f952c55 Fix UFW autostart issue (#2453)
* Improve theme-set-vscode to support jsonc and respect symlinks (#1756)

* Ghostty needs a very different scrollfactor than Alacritty and Kitty

cc @mitchellh

* Hide hyperland cursor while typing (#1812)

* Fix Matte Black theme ghostty and vscode configs (#1801)

* Update Matte Black ghostty.conf with more color settings

* Rename theme from 'MatteBlack' to 'Matte Black'

* Catch obsidian vault dialog too

* Add Update > Hardware > Audio for restarting pipewire service

* Give output on what's intended to happen

* Ensure libyaml is available for installs made before that was on the ISO

* Limit pattern to prevent incorrect matches

* fix: ghostty config typos

* No longer used

Closes #1815

* Revert "Ensure libyaml is available for installs made before that was on the ISO"

This reverts commit ad01082a86.

* Add Helium browser to supported browsers list in omarchy-launch-webapp

* Fix Helium browser detection in launch script

* feat: Added MacBook10,1 to the fix-apple-spi-keyboard.sh

* Suggest how to have a smaller-than-max-width single window aspect ratio

* Add more Mac models to SPI keyboard support

Added:

MacBook 8,1
MacBook 9,1

MacBook 8,1 uses slightly different moduels from what I can tell, so I’ve added a case statment.  Please tweak as needed.

* Fix conflict + rearrange

* Added fix for ealy 2013 macbook pro's using an older chipset, BCM4331

* Tried with a different approach for cleaner code

* Clean up

Tested the logic on the MacBook. It worked and the install of the
drivers are reenabled.

* Combine ifs

* Update install script name

* Fix for '(null)' display on AirPod source selection

* Use output display or region geometry to record

The previous code did not identify the output display correctly,
leading to wf-recorder asking the user to select the region when the
user requested the display output to be selected.

With this change the bash script will use slurp with the -o flag to
identify the display output.

This has not been tested with wl-screenrec as no change has been made to
its call signature in omarchy-cmd-screenrecord and the wl-screenrec
binary is not included in the default omarchy installation.

* Fix TUI install script

- $TERMINAL should remain variable

* Add migration to fix Docker and Disk Usage TUIs

* Replace "--class" with "--class="

* Revert "Fix for '(null)' display on AirPod source selection"

* Typo

* Fix comment

* Change up firewall setup

* Enable ufw

* Disable ufw-docker (isolation test)

* Add some reboot on done debugging

* Debug firewall install/config

* Add first-run logging

* Don't suppress output from apparently-failing systemctl reboot command

* Fix logging

* Use old reboot. Still chrooted so probably won't work.

* Allow systemctl on first run

* Revert logging and other changes

---------

Co-authored-by: Omar Skalli <omar.skalli7@gmail.com>
Co-authored-by: David Heinemeier Hansson <david@hey.com>
Co-authored-by: Johan Sørensen <johan@johansorensen.com>
Co-authored-by: Taha <paprikataha@gmail.com>
Co-authored-by: Ryan Hughes <ryan@heyoodle.com>
Co-authored-by: Che-Wei Lin <linton.tw@gmail.com>
Co-authored-by: Patrick Byrne <pby.software@byrne.dk>
Co-authored-by: Eduardo Mínguez <e.minguez@gmail.com>
Co-authored-by: Joel Gaff, Jr <joelga@hey.com>
Co-authored-by: Michael Larsen <michaelarsen@gmail.com>
Co-authored-by: Shawn Yeager <shawn@shawnyeager.com>
Co-authored-by: observable <hello@observable.art>
Co-authored-by: Djordje Kovacevic <djordjek65@gmail.com>
2025-10-14 22:41:26 +03:00
David Heinemeier Hansson
3d335a5278 Add migration for new hotkeys 2025-10-14 22:26:54 +03:00
David Heinemeier Hansson
fcae2e9809 Switch to new hotkeys
Make room for unified super + c/v and put all app launches on super +
shift + [letter]
2025-10-14 22:26:48 +03:00
Ryan Hughes
671194dfa9 Nvim is self-contained now 2025-10-14 13:17:40 -04:00
Ryan Hughes
ab3b65a2b1 Move to omarchy-nvim 2025-10-14 12:56:31 -04:00
Ryan Hughes
7c273f4944 Don't use chrootable here 2025-10-14 12:37:45 -04:00
David Heinemeier Hansson
3b8fce1c2d Consistent ordering with other themes 2025-10-14 12:41:35 +03:00
Wojciech Wnętrzak
154cd066ee Add auto nightlight example config (#2446)
By commenting out this config one can have nightlight applied automatically
2025-10-14 12:37:57 +03:00
David Heinemeier Hansson
90536dff3f Fix screenrecording menu and reveal it as the only hotkey 2025-10-14 12:35:06 +03:00
David Heinemeier Hansson
9c8dad9054 Not needed and distracting when themes are not available for Cursor 2025-10-14 12:15:10 +03:00
David Heinemeier Hansson
491e980dd9 Style 2025-10-14 12:02:27 +03:00
David Heinemeier Hansson
313dcd4468 Fix referencing existing extension 2025-10-14 12:02:18 +03:00
Alexandre Perreault
d615d2f9b5 fix: mute output when hiding cursor in screensaver (#2419) 2025-10-14 11:51:55 +03:00
Derek
800962b18f fix: prevent Chromium crash when moving windows between monitors (#2394)
* fix: prevent Chromium crash when moving windows between monitors

Adds --disable-features=WaylandWpColorManagerV1 to Chromium and Brave
flag configs to prevent crashes when moving windows between monitors or
workspaces on Hyprland. This is a workaround for a Chromium/Wayland
color management conflict.

Upstream Chromium fix exists but won't reach stable for ~a month. This
provides a temporary bridge until the fix lands in stable releases.

Fixes #2384
Refs #2184
Refs: https://github.com/hyprwm/Hyprland/issues/11957
Refs: https://github.com/hyprwm/Hyprland/discussions/11961
Refs: https://issues.chromium.org/issues/40263183
Refs: https://chromium-review.googlesource.com/c/chromium/src/+/7003036

* Add migration to update existing Chromium/Brave configs with crash fix

Adds migration script to append --disable-features=WaylandWpColorManagerV1
to existing users' chromium-flags.conf and brave-flags.conf files.

The script:
- Checks if config files exist before attempting to modify them
- Uses grep to verify the flag isn't already present
- Only adds the flag and explanatory comment if needed
- Handles both Chromium and Brave configurations

This ensures existing Omarchy users get the Hyprland crash workaround
without needing to manually update their configs.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Fix warnings and make conditional explicit

---------

Co-authored-by: Derek Castillo <d-cas@users.noreply.github.com>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: David Heinemeier Hansson <david@hey.com>
2025-10-14 11:44:55 +03:00
Luke Hsiao
87d7bd966b Fix typo in omarchy-update-firmware (#2442)
Signed-off-by: Luke Hsiao <luke@hsiao.dev>
2025-10-14 10:43:57 +03:00
Luke Hsiao
ff3d65993e Fix font menu by using --width parameter for walker (#2444)
When we call `omarchy-launch-walker` with `-w`, we get the following
error.

    echo -e $'Adwaita Mono\nBerkeley Mono\nBerkeley Mono Variable\nCaskaydiaMono Nerd Font\nCaskaydiaMono Nerd Font Mono\niA Writer Mono S\nIosevka Fixed\nJetBrainsMono Nerd Font\nJetBrainsMono Nerd Font Mono\nJetBrainsMonoNL Nerd Font\nJetBrainsMonoNL Nerd Font Mono\nLiberation Mono\nNimbus Mono PS' | omarchy-launch-walker --dmenu --width 295 --minheight 1 --maxheight 600 -p Font… -w 350 -c 3
    Error parsing option -w

Instead, we now pass `--width`, to properly override the default
`--width 295` for fonts.

Closes: https://github.com/basecamp/omarchy/issues/2404

Signed-off-by: Luke Hsiao <luke@hsiao.dev>
2025-10-14 10:43:20 +03:00
sadd al
5b8ee60cc4 fix: make bcm43xx driver script vendor agnostic 2025-10-13 14:27:30 +05:00
Ryan Hughes
80b37f229b Merge pull request #2422 from abenz1267/walkerfix
fix: broken walker keybinding
2025-10-13 01:52:00 -04:00
Ryan Hughes
5057101bbd Use chrootabl_systemctl_enable 2025-10-13 01:09:12 -04:00
Ryan Hughes
c6627f0e67 Cleanup 2025-10-13 01:06:56 -04:00
Ryan Hughes
9783b4b782 Exit hyprland for now 2025-10-13 01:01:57 -04:00
Ryan Hughes
2213589e6e Remove restart sddm 2025-10-13 01:01:57 -04:00
Ryan Hughes
10e8fe581b Prompt if they have a keyring 2025-10-13 01:01:57 -04:00
Andrej Benz
7e7b37095f fix: broken walker keybinding 2025-10-13 05:34:50 +02:00
David Heinemeier Hansson
6c2c85d2b9 Couldn't install them like this without having them appear as corporate managed 2025-10-12 21:13:01 -04:00
David Heinemeier Hansson
9d8d4bc5c1 Include flexoki as new default theme 2025-10-12 21:09:14 -04:00
David Heinemeier Hansson
00b3983f8a Fix ctrl+insert keybindings in kitty and ghostty too
So we can use it for super+c
2025-10-12 20:34:52 -04:00
Wey Gu
fa029c54fb macbook 12' fixes on login keyboard & suspend wake up (#1959)
* macbook 12' fixes on login keyboard & suspend wake up

- apple spi keyboard production_name pattern fixed:

Macbook 12' are MacBook8,1 9,1 and 10,1 for 2015, 2016 and 2017 models
The MacBookPro12,1 is not a thing.

ref: https://everymac.com/ultimate-mac-lookup/?identify=MacBook10%2C1

- add fix-apple-suspend-nvme.sh to fix MacBooks with NVMe cannot wake up

ref: https://github.com/Dunedan/mbp-2016-linux?tab=readme-ov-file#suspend--hibernation

* fix escapes in file path

* add invocation in all.sh and migration script

* Fix paths

---------

Co-authored-by: David Heinemeier Hansson <david@hey.com>
2025-10-12 20:19:10 -04:00
Martin Mose Facondini
56e690b861 feat: enable vim keys for btop (#1581)
* feat: enable vim keys for btop

* feat: add migration for btop vim keys

* Cleanup

---------

Co-authored-by: David Heinemeier Hansson <david@hey.com>
2025-10-12 20:13:45 -04:00
Qasim
cac8b03821 alacritty.toml with proper bg and fg (#1851)
* alacritty.toml wity proper bg and fg

background = "#1e1e2e"
foreground = "#cdd6f4"

are the proper colors for terminal bg and fg when themeing with Catppuccin

* Update alacritty.toml with proper Catppuccin Mocha colors

* vscode.json to use Proper Catppuccin Mocha
2025-10-12 20:06:43 -04:00
Jarek
adad20b6a1 Fix Tailscale split DNS compatibility by removing [!UNAVAIL=return] (#1884)
Removes [!UNAVAIL=return] from nsswitch.conf configuration to resolve
Tailscale split DNS issues while maintaining mDNS printer discovery.

- Updated printer setup script
- Updated existing Avahi migration
- Added migration for existing users

Addresses: https://github.com/basecamp/omarchy/pull/1021#issuecomment-3318650490
2025-10-12 19:59:04 -04:00
Miha Rekar
55604e43f5 Show overlay when changing display brightness (#2348) 2025-10-12 19:57:52 -04:00
Celso Benedetti
9f8db77a24 tweak(omarchy-theme-set): only restart waybar if already running (#2416) 2025-10-12 19:52:09 -04:00
Ryan Hughes
a20835f835 Add copy bind as well 2025-10-12 19:25:35 -04:00
David Heinemeier Hansson
c70e018571 Add the default keyring to existing systems
cc @ryanrhughes
2025-10-12 17:38:27 -04:00
David Heinemeier Hansson
ab7feeac6d Unnecessary 2025-10-12 17:36:03 -04:00
David Heinemeier Hansson
7ef30f69b8 Match the other themes 2025-10-12 17:30:27 -04:00
David Heinemeier Hansson
ebcb489621 No need for the empty opts 2025-10-12 17:25:04 -04:00
David Heinemeier Hansson
d72e948e03 We DID need two lines to prevent the ugly jitter between effects 2025-10-12 17:17:55 -04:00
David Heinemeier Hansson
6cab5d3e14 Fix light mode live switching for chromium 2025-10-12 17:06:32 -04:00
David Heinemeier Hansson
0df4dc1a1d Add Flexoki Light as new default theme 2025-10-12 16:43:17 -04:00
Ofir Miller
35cc9937ff feat(update): Add firmware update script to update process (#2014)
* Add firmware update script and include in update process

* typo

* type 2

* add sudo

* Add firmware update option to update menu

* Remove firmware update command from update process

* Lazy-install firmware updater

* Move option down and change icon

* Only lazy install if missing

---------

Co-authored-by: David Heinemeier Hansson <david@hey.com>
2025-10-12 16:34:50 -04:00
Mitch Lombardi
268b48644c Fix placeholder position and adjust fail text on lock screen (#2124)
* Fix placeholder position and adjust fail text on lock screen

* Expand input field to fully fit fingerprint authentication failure message

* Better explain what's happening

---------

Co-authored-by: David Heinemeier Hansson <david@hey.com>
2025-10-12 16:22:49 -04:00
Artem Popov
360a2ed943 Add LogLevelMax to battery monitor service (#2373) 2025-10-12 16:06:00 -04:00
Ryan Hughes
01a1e43b25 Fix command description
Co-authored-by: Daniel Pavone <danielpavone@gmail.com>
2025-10-11 18:58:52 -04:00
Shawn Yeager
04fa3fd32e Fix for '(null)' display on AirPod source selection 2025-10-11 02:08:06 -04:00
Ryan Hughes
a42ba3dcbf Merge pull request #2365 from basecamp/fix-omarchy-screenrecord
Fix Omarchy Screenrecord
2025-10-11 02:00:23 -04:00
Ryan Hughes
63aff7cd71 Cleanup 2025-10-11 01:36:51 -04:00
Ryan Hughes
a6aec518a5 Remove wl-screenrec 2025-10-11 01:33:45 -04:00
Ryan Hughes
a7a6ac1d21 Add error explanation if we have to kill 2025-10-11 01:25:44 -04:00
Ryan Hughes
af564ed07d Fix webcam to select 16:9 on FW13 and others 2025-10-10 21:37:57 -04:00
Ryan Hughes
eb74a97a0c Fix scaling for non 16:9 2025-10-10 21:23:42 -04:00
Ryan Hughes
883cb66f99 Migrate to gpu-screen-recorder 2025-10-10 21:11:25 -04:00
Ryan Hughes
2c74696735 Update packages 2025-10-10 21:11:05 -04:00
Ryan Hughes
a54044ea30 Change screenrecorder to gpu-screen-recorder 2025-10-10 21:07:20 -04:00
David Heinemeier Hansson
651025e3e8 Add Walker clipboard manager on Super + Ctrl + V 2025-10-10 10:20:25 -04:00
Samuel Péchèr
44de66dd2a Create migration to symlink systemd-resolved (#2313)
* Backup file if modified since system birth
* Symlink /etc/resolv.conf -> systemd-resolve's stub resolver
2025-10-10 10:18:38 -04:00
Damian Ignaczak
6b3fc34361 Add background for matte black theme (#2288) 2025-10-10 10:05:05 -04:00
Andrej Benz
cc1acc10b8 Walker: migrate to 2.0.0 (#1005)
* fix: remove theme-flag

* migration: walker 1.0.0-beta

* Fixups

* Add elephant and walker

* Update for new layout.xml

* Clean up some styling

* add unicode and todo providers

* remove default quick activate keybinds

* Update keybinds and remove defaults to prevent conflict

* Fix menu option

* Fixes

* Remove

* Update height

* Add elephant service

* Remove from hyprland

* Restart service now

* Trim

* Update height

* Fix keybindings style

* Fix install location

* Add walker restart

* Fix indention

* Fix indention

* Fix indention

* Fix indention

* Advance to present

* Need to refresh to bring over the new config

* style adjustments

* Correct the installation of the 1pw policy installer

* Skip the prebuilt for a second while we test

* Need libyaml to build ruby

* No longer needed, gcc-15 compatibility has been added

* Let's just stick to the official path

* GCC15 compatibility for Ruby has been achieved

* No longer necessary

The other mise option is set on Ruby on Rails install

* Added ZLS - Zig's Language Server when installing Zig (#1718)

* style adjustments

* styling changes

* add only_search_title

* css adjustments to fix broken styles

* Be tall again

* Remove for future variable height menu

* Update height / width params

* fix: remove theme-flag

* Fix spacing..again

* Remove service and add launch util

* Fix

* fix: wrong emojis flag

* remove flag, its dmenu only

* set min content width to prevent flickering if the item list contains shorter items

* Remove unused service

* Megakill needed

* Remove any old themes too

* Remove min-width

* Style adjustments

* changes for walker/elephant updates

* Match current width

* Add a little more space between icon and text

* fix: bluetooth find bind

* remove archlinux provider, fix migration with missing providers

* fix: css import

* Fix theme path

* fix: add new error label to layout

* Fix migration

---------

Co-authored-by: David Heinemeier Hansson <david@hey.com>
Co-authored-by: Ryan Hughes <ryan@heyoodle.com>
Co-authored-by: DoKoB0512 <123281216+DoKoB0512@users.noreply.github.com>
2025-10-10 10:01:02 -04:00
missing person
b063c7f5f3 fix comment: wrong path for base packages script (#2325)
* Fix comment

* fix comment: wrong path for base package script

---------

Co-authored-by: David Heinemeier Hansson <david@hey.com>
2025-10-10 09:19:43 -04:00
David Heinemeier Hansson
8871c829c5 Merge branch 'master' into dev 2025-10-10 09:19:12 -04:00
Mitch Lombardi
41b09c29f8 Disable wall messages on shutdown/reboot (#2341) 2025-10-10 09:18:36 -04:00
David Heinemeier Hansson
d7d8f525e3 Control icon size still 2025-10-09 07:52:32 -04:00
David Heinemeier Hansson
a544e78107 Add Ctrl + Super + Ins as Copy
So we can hook it up to super + C/V
2025-10-09 07:16:13 -04:00
Miguel P
c541faff7d chore: better contrast for ristretto kitty conf (#2297)
* Fix comment

* chore: better contrast for ristretto kitty conf

* better looking tab background

---------

Co-authored-by: David Heinemeier Hansson <david@hey.com>
2025-10-09 07:04:26 -04:00
David Heinemeier Hansson
8caf6dbe2c Remove settings that made it awkward for single line notifications 2025-10-09 07:02:39 -04:00
Ryan Hughes
779fd5a9f5 Prevent polkit error on reboot (fixes #2175) 2025-10-08 20:40:53 -04:00
David Heinemeier Hansson
1e859d37cb Fix comment 2025-10-01 23:27:11 +02:00
186 changed files with 2811 additions and 1306 deletions

View File

@@ -0,0 +1,2 @@
[Desktop Entry]
Hidden=true

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

View File

@@ -3,5 +3,12 @@
if [[ $# -eq 0 ]]; then if [[ $# -eq 0 ]]; then
echo "Adjust Apple Display Brightness by passing +5000 or -5000 (or any range from 0-60000)" echo "Adjust Apple Display Brightness by passing +5000 or -5000 (or any range from 0-60000)"
else else
sudo asdcontrol $(sudo asdcontrol --detect /dev/usb/hiddev* | grep ^/dev/usb/hiddev | cut -d: -f1) -- "$1" DEVICE="$(sudo asdcontrol --detect /dev/usb/hiddev* | grep ^/dev/usb/hiddev | cut -d: -f1)"
sudo asdcontrol "$DEVICE" -- "$1" >/dev/null
VALUE="$(sudo asdcontrol "$DEVICE" | awk -F= '/BRIGHTNESS=/{print $2+0}')"
swayosd-client \
--monitor "$(hyprctl monitors -j | jq -r '.[]|select(.focused==true).name')" \
--custom-icon display-brightness \
--custom-progress "$(awk -v v="$VALUE" 'BEGIN{printf "%.2f", v/60000}')" \
--custom-progress-text "$(( VALUE * 100 / 60000 ))%"
fi fi

View File

@@ -23,7 +23,13 @@ fi
next_sink=$(echo "$sinks" | jq -r ".[$next_sink_index]") next_sink=$(echo "$sinks" | jq -r ".[$next_sink_index]")
next_sink_name=$(echo "$next_sink" | jq -r '.name') next_sink_name=$(echo "$next_sink" | jq -r '.name')
next_sink_description=$(echo "$next_sink" | jq -r '.description') next_sink_description=$(echo "$next_sink" | jq -r '.description')
if [ "$next_sink_description" = "(null)" ] || [ "$next_sink_description" = "null" ] || [ -z "$next_sink_description" ]; then
sink_id=$(echo "$next_sink" | jq -r '.properties."object.id"')
next_sink_description=$(wpctl status | grep -E "\s+\*?\s+${sink_id}\." | sed -E 's/^.*[0-9]+\.\s+//' | sed -E 's/\s+\[.*$//')
fi
next_sink_volume=$(echo "$next_sink" | jq -r \ next_sink_volume=$(echo "$next_sink" | jq -r \
'.volume | to_entries[0].value.value_percent | sub("%"; "")') '.volume | to_entries[0].value.value_percent | sub("%"; "")')
next_sink_is_muted=$(echo "$next_sink" | jq -r '.mute') next_sink_is_muted=$(echo "$next_sink" | jq -r '.mute')

View File

@@ -8,6 +8,7 @@ if [[ -f "$FIRST_RUN_MODE" ]]; then
rm -f "$FIRST_RUN_MODE" rm -f "$FIRST_RUN_MODE"
bash "$OMARCHY_PATH/install/first-run/battery-monitor.sh" bash "$OMARCHY_PATH/install/first-run/battery-monitor.sh"
bash "$OMARCHY_PATH/install/first-run/cleanup-reboot-sudoers.sh"
bash "$OMARCHY_PATH/install/first-run/firewall.sh" bash "$OMARCHY_PATH/install/first-run/firewall.sh"
bash "$OMARCHY_PATH/install/first-run/dns-resolver.sh" bash "$OMARCHY_PATH/install/first-run/dns-resolver.sh"
bash "$OMARCHY_PATH/install/first-run/gnome-theme.sh" bash "$OMARCHY_PATH/install/first-run/gnome-theme.sh"

View File

@@ -8,31 +8,82 @@ if [[ ! -d "$OUTPUT_DIR" ]]; then
exit 1 exit 1
fi fi
# Selects region or output SCOPE=""
SCOPE="$1" AUDIO="false"
WEBCAM="false"
# Selects audio inclusion or not for arg in "$@"; do
AUDIO=$([[ $2 == "audio" ]] && echo "--audio") case "$arg" in
--with-audio) AUDIO="true" ;;
--with-webcam) WEBCAM="true" ;;
output|region) SCOPE="$arg" ;;
esac
done
cleanup_webcam() {
pkill -f "WebcamOverlay" 2>/dev/null
}
start_webcam_overlay() {
cleanup_webcam
# Get monitor scale
local scale=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true) | .scale')
# Target width (base 360px, scaled to monitor)
local target_width=$(awk "BEGIN {printf \"%.0f\", 360 * $scale}")
# Try preferred 16:9 resolutions in order, use first available
local preferred_resolutions=("640x360" "1280x720" "1920x1080")
local video_size_arg=""
local available_formats=$(v4l2-ctl --list-formats-ext -d /dev/video0 2>/dev/null)
for resolution in "${preferred_resolutions[@]}"; do
if echo "$available_formats" | grep -q "$resolution"; then
video_size_arg="-video_size $resolution"
break
fi
done
ffplay -f v4l2 $video_size_arg -framerate 30 /dev/video0 \
-vf "scale=${target_width}:-1" \
-window_title "WebcamOverlay" \
-noborder \
-fflags nobuffer -flags low_delay \
-probesize 32 -analyzeduration 0 \
-loglevel quiet &
sleep 1
}
start_screenrecording() { start_screenrecording() {
local filename="$OUTPUT_DIR/screenrecording-$(date +'%Y-%m-%d_%H-%M-%S').mp4" local filename="$OUTPUT_DIR/screenrecording-$(date +'%Y-%m-%d_%H-%M-%S').mp4"
local audio_args=""
if lspci | grep -qi 'nvidia'; then # Merge audio tracks into one - separate tracks only play one at a time in most players
wf-recorder $AUDIO -f "$filename" -c libx264 -p crf=23 -p preset=medium -p movflags=+faststart "$@" & [[ "$AUDIO" == "true" ]] && audio_args="-a default_output|default_input"
else
wl-screenrec $AUDIO -f "$filename" --ffmpeg-encoder-options="-c:v libx264 -crf 23 -preset medium -movflags +faststart" "$@" &
fi
gpu-screen-recorder -w "$@" -f 60 -c mp4 -o "$filename" $audio_args &
toggle_screenrecording_indicator toggle_screenrecording_indicator
} }
stop_screenrecording() { stop_screenrecording() {
pkill -x wl-screenrec pkill -SIGINT -f "gpu-screen-recorder" # SIGINT required to save video properly
pkill -x wf-recorder
notify-send "Screen recording saved to $OUTPUT_DIR" -t 2000 # Wait a maximum of 5 seconds to finish before hard killing
local count=0
while pgrep -f "gpu-screen-recorder" >/dev/null && [ $count -lt 50 ]; do
sleep 0.1
count=$((count + 1))
done
sleep 0.2 # ensures the process is actually dead before we check if pgrep -f "gpu-screen-recorder" >/dev/null; then
pkill -9 -f "gpu-screen-recorder"
cleanup_webcam
notify-send "Screen recording error" "Recording process had to be force-killed. Video may be corrupted." -u critical -t 5000
else
cleanup_webcam
notify-send "Screen recording saved to $OUTPUT_DIR" -t 2000
fi
toggle_screenrecording_indicator toggle_screenrecording_indicator
} }
@@ -41,15 +92,51 @@ toggle_screenrecording_indicator() {
} }
screenrecording_active() { screenrecording_active() {
pgrep -x wl-screenrec >/dev/null || pgrep -x wf-recorder >/dev/null pgrep -f "gpu-screen-recorder" >/dev/null || pgrep -x slurp >/dev/null || pgrep -f "WebcamOverlay" >/dev/null
} }
if screenrecording_active; then if screenrecording_active; then
stop_screenrecording if pgrep -x slurp >/dev/null; then
pkill -x slurp 2>/dev/null
elif pgrep -f "WebcamOverlay" >/dev/null && ! pgrep -f "gpu-screen-recorder" >/dev/null; then
cleanup_webcam
else
stop_screenrecording
fi
elif [[ "$SCOPE" == "output" ]]; then elif [[ "$SCOPE" == "output" ]]; then
output=$(slurp -o) || exit 1 [[ "$WEBCAM" == "true" ]] && start_webcam_overlay
start_screenrecording -g "$output"
if ! output=$(slurp -o -f "%o"); then
[[ "$WEBCAM" == "true" ]] && cleanup_webcam
exit 1
fi
if [[ -z "$output" ]]; then
notify-send "Error" "Could not detect monitor" -u critical
[[ "$WEBCAM" == "true" ]] && cleanup_webcam
exit 1
fi
start_screenrecording "$output"
else else
region=$(slurp) || exit 1 [[ "$WEBCAM" == "true" ]] && start_webcam_overlay
start_screenrecording -g "$region"
scale=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true) | .scale')
if ! region=$(slurp -f "%wx%h+%x+%y"); then
[[ "$WEBCAM" == "true" ]] && cleanup_webcam
exit 1
fi
if [[ "$region" =~ ^([0-9]+)x([0-9]+)\+([0-9]+)\+([0-9]+)$ ]]; then
w=$(awk "BEGIN {printf \"%.0f\", ${BASH_REMATCH[1]} * $scale}")
h=$(awk "BEGIN {printf \"%.0f\", ${BASH_REMATCH[2]} * $scale}")
x=$(awk "BEGIN {printf \"%.0f\", ${BASH_REMATCH[3]} * $scale}")
y=$(awk "BEGIN {printf \"%.0f\", ${BASH_REMATCH[4]} * $scale}")
scaled_region="${w}x${h}+${x}+${y}"
else
scaled_region="$region"
fi
start_screenrecording region -region "$scaled_region"
fi fi

View File

@@ -13,12 +13,12 @@ exit_screensaver() {
trap exit_screensaver SIGINT SIGTERM SIGHUP SIGQUIT trap exit_screensaver SIGINT SIGTERM SIGHUP SIGQUIT
hyprctl keyword cursor:invisible true hyprctl keyword cursor:invisible true &>/dev/null
while true; do while true; do
effect=$(tte 2>&1 | grep -oP '{\K[^}]+' | tr ',' ' ' | tr ' ' '\n' | sed -n '/^beams$/,$p' | sort -u | shuf -n1) effect=$(tte 2>&1 | grep -oP '{\K[^}]+' | tr ',' ' ' | tr ' ' '\n' | sed -n '/^beams$/,$p' | sort -u | shuf -n1)
tte -i ~/.config/omarchy/branding/screensaver.txt \ tte -i ~/.config/omarchy/branding/screensaver.txt \
--frame-rate 240 --canvas-width 0 --canvas-height $(($(tput lines) - 1)) --anchor-canvas c --anchor-text c \ --frame-rate 240 --canvas-width 0 --canvas-height $(($(tput lines) - 2)) --anchor-canvas c --anchor-text c \
"$effect" & "$effect" &
while pgrep -x tte >/dev/null; do while pgrep -x tte >/dev/null; do

View File

@@ -8,10 +8,76 @@ if [[ ! -d "$OUTPUT_DIR" ]]; then
exit 1 exit 1
fi fi
pkill slurp || hyprshot -m ${1:-region} --raw | pkill slurp && exit 0
MODE="${1:-smart}"
PROCESSING="${2:-slurp}"
get_rectangles() {
local active_workspace=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true) | .activeWorkspace.id')
hyprctl monitors -j | jq -r --arg ws "$active_workspace" '.[] | select(.activeWorkspace.id == ($ws | tonumber)) | "\(.x),\(.y) \((.width / .scale) | floor)x\((.height / .scale) | floor)"'
hyprctl clients -j | jq -r --arg ws "$active_workspace" '.[] | select(.workspace.id == ($ws | tonumber)) | "\(.at[0]),\(.at[1]) \(.size[0])x\(.size[1])"'
}
# Select based on mode
case "$MODE" in
region)
wayfreeze & PID=$!
sleep .1
SELECTION=$(slurp 2>/dev/null)
kill $PID 2>/dev/null
;;
windows)
wayfreeze & PID=$!
sleep .1
SELECTION=$(get_rectangles | slurp -r 2>/dev/null)
kill $PID 2>/dev/null
;;
fullscreen)
SELECTION=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true) | "\(.x),\(.y) \((.width / .scale) | floor)x\((.height / .scale) | floor)"')
;;
smart|*)
RECTS=$(get_rectangles)
wayfreeze & PID=$!
sleep .1
SELECTION=$(echo "$RECTS" | slurp 2>/dev/null)
kill $PID 2>/dev/null
# If the selction area is L * W < 20, we'll assume you were trying to select whichever
# window or output it was inside of to prevent accidental 2px snapshots
if [[ "$SELECTION" =~ ^([0-9]+),([0-9]+)[[:space:]]([0-9]+)x([0-9]+)$ ]]; then
if (( ${BASH_REMATCH[3]} * ${BASH_REMATCH[4]} < 20 )); then
click_x="${BASH_REMATCH[1]}"
click_y="${BASH_REMATCH[2]}"
while IFS= read -r rect; do
if [[ "$rect" =~ ^([0-9]+),([0-9]+)[[:space:]]([0-9]+)x([0-9]+) ]]; then
rect_x="${BASH_REMATCH[1]}"
rect_y="${BASH_REMATCH[2]}"
rect_width="${BASH_REMATCH[3]}"
rect_height="${BASH_REMATCH[4]}"
if (( click_x >= rect_x && click_x < rect_x+rect_width && click_y >= rect_y && click_y < rect_y+rect_height )); then
SELECTION="${rect_x},${rect_y} ${rect_width}x${rect_height}"
break
fi
fi
done <<< "$RECTS"
fi
fi
;;
esac
[ -z "$SELECTION" ] && exit 0
if [[ $PROCESSING == "slurp" ]]; then
grim -g "$SELECTION" - |
satty --filename - \ satty --filename - \
--output-filename "$OUTPUT_DIR/screenshot-$(date +'%Y-%m-%d_%H-%M-%S').png" \ --output-filename "$OUTPUT_DIR/screenshot-$(date +'%Y-%m-%d_%H-%M-%S').png" \
--early-exit \ --early-exit \
--actions-on-enter save-to-clipboard \ --actions-on-enter save-to-clipboard \
--save-after-copy \ --save-after-copy \
--copy-command 'wl-copy' --copy-command 'wl-copy'
else
grim -g "$SELECTION" - | wl-copy
fi

View File

@@ -2,7 +2,7 @@
# Go from current active terminal to its child shell process and run cwd there # Go from current active terminal to its child shell process and run cwd there
terminal_pid=$(hyprctl activewindow | awk '/pid:/ {print $2}') terminal_pid=$(hyprctl activewindow | awk '/pid:/ {print $2}')
shell_pid=$(pgrep -P "$terminal_pid" | head -n1) shell_pid=$(pgrep -P "$terminal_pid" | tail -n1)
if [[ -n $shell_pid ]]; then if [[ -n $shell_pid ]]; then
cwd=$(readlink -f "/proc/$shell_pid/cwd" 2>/dev/null) cwd=$(readlink -f "/proc/$shell_pid/cwd" 2>/dev/null)

View File

@@ -1,8 +0,0 @@
#!/bin/bash
notify-send " Updating time and timezone..."
sudo systemctl restart systemd-timesyncd
sudo tzupdate
new_timezone=$(timedatectl show -p Timezone --value)
omarchy-restart-waybar
notify-send " Time updated and timezone set to $new_timezone"

View File

@@ -28,6 +28,8 @@ if [[ -n "$font_name" && "$font_name" != "CNCLD" ]]; then
omarchy-restart-waybar omarchy-restart-waybar
omarchy-restart-swayosd omarchy-restart-swayosd
omarchy-restart-walker omarchy-restart-walker
omarchy-hook font-set "$font_name"
else else
echo "Font '$font_name' not found." echo "Font '$font_name' not found."
exit 1 exit 1

14
bin/omarchy-hook Executable file
View File

@@ -0,0 +1,14 @@
#!/bin/bash
if [[ $# -lt 1 ]]; then
echo "Usage: omarchy-hook [name] [args...]"
exit 1
fi
HOOK=$1
HOOK_PATH="$HOME/.config/omarchy/hooks/$1"
shift
if [[ -f $HOOK_PATH ]]; then
bash "$HOOK_PATH" "$@"
fi

View File

@@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
options=("MySQL" "PostgreSQL" "Redis" "MongoDB" "MariaDB") options=("MySQL" "PostgreSQL" "Redis" "MongoDB" "MariaDB" "MSSQL")
if [[ "$#" -eq 0 ]]; then if [[ "$#" -eq 0 ]]; then
choices=$(printf "%s\n" "${options[@]}" | gum choose --header "Select database (return to install, esc to cancel)") || main_menu choices=$(printf "%s\n" "${options[@]}" | gum choose --header "Select database (return to install, esc to cancel)") || main_menu
@@ -16,6 +16,7 @@ if [[ -n "$choices" ]]; then
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 ;;
MSSQL) sudo docker run -d --restart unless-stopped -p "127.0.0.1:1433:1433" --name mssql -e MSSQL_PID=Developer -e ACCEPT_EULA=Y -e "MSSQL_SA_PASSWORD=@dmin123" mcr.microsoft.com/mssql/server:2022-CU12-ubuntu-22.04 ;;
esac esac
done done
else else

View File

@@ -8,12 +8,14 @@ fi
package="$1" package="$1"
# Install package # Install package
omarchy-pkg-add $package if omarchy-pkg-add $package; then
# Set as default terminal
echo "Setting $package as new default terminal..."
sed -i "/export TERMINAL=/ c\export TERMINAL=$package" ~/.config/uwsm/default
# Set as default terminal # Restart is needed for new default to take effect
echo "Setting $package as new default terminal..." echo
sed -i "/export TERMINAL=/ c\export TERMINAL=$package" ~/.config/uwsm/default gum confirm "Restart to use new terminal?" && systemctl reboot --no-wall
else
# Relaunch is needed for new default to take effect echo "Failed to install $package"
echo fi
gum confirm "Relaunch Hyprland to use new terminal?" && uwsm stop

View File

@@ -18,4 +18,7 @@ cat > ~/.vscode/argv.json << 'EOF'
} }
EOF EOF
# Ensure VSC's own auto-update feature is turned off
printf '{\n "update.mode": "none"\n}\n' > ~/.config/Code/User/settings.json
setsid gtk-launch code setsid gtk-launch code

13
bin/omarchy-launch-walker Executable file
View File

@@ -0,0 +1,13 @@
#!/bin/bash
# Ensure elephant is running before launching walker
if ! pgrep -x elephant > /dev/null; then
setsid uwsm-app -- elephant &
fi
# Ensure walker service is running
if ! pgrep -f "walker --gapplication-service" > /dev/null; then
setsid uwsm-app -- walker --gapplication-service &
fi
exec walker --width 644 --maxheight 300 --minheight 300 "$@"

View File

@@ -29,11 +29,11 @@ menu() {
local index local index
index=$(echo -e "$options" | grep -nxF "$preselect" | cut -d: -f1) index=$(echo -e "$options" | grep -nxF "$preselect" | cut -d: -f1)
if [[ -n "$index" ]]; then if [[ -n "$index" ]]; then
args+=("-a" "$index") args+=("-c" "$index")
fi fi
fi fi
echo -e "$options" | walker --dmenu --theme dmenu_250 -p "$prompt…" "${args[@]}" echo -e "$options" | omarchy-launch-walker --dmenu --width 295 --minheight 1 --maxheight 600 -p "$prompt…" "${args[@]}" 2>/dev/null
} }
terminal() { terminal() {
@@ -104,21 +104,21 @@ show_capture_menu() {
} }
show_screenshot_menu() { show_screenshot_menu() {
case $(menu "Screenshot" " Region\n Window\n Display") in case $(menu "Screenshot" " Snap with Editing\n Straight to Clipboard") in
*Region*) omarchy-cmd-screenshot ;; *Editing*) omarchy-cmd-screenshot smart ;;
*Window*) omarchy-cmd-screenshot window ;; *Clipboard*) omarchy-cmd-screenshot smart clipboard ;;
*Display*) omarchy-cmd-screenshot output ;;
*) show_capture_menu ;; *) show_capture_menu ;;
esac esac
} }
show_screenrecord_menu() { show_screenrecord_menu() {
case $(menu "Screenrecord" " Region\n Region + Audio\n Display\n Display + Audio") in case $(menu "Screenrecord" " Region\n Region + Audio\n Display\n Display + Audio\n Display + Webcam") in
*"Region + Audio"*) omarchy-cmd-screenrecord region audio ;; *"Region + Audio"*) omarchy-cmd-screenrecord region --with-audio ;;
*Region*) omarchy-cmd-screenrecord ;; *Region*) omarchy-cmd-screenrecord ;;
*"Display + Audio"*) omarchy-cmd-screenrecord output audio ;; *"Display + Audio"*) omarchy-cmd-screenrecord output --with-audio ;;
*"Display + Webcam"*) omarchy-cmd-screenrecord output --with-audio --with-webcam ;;
*Display*) omarchy-cmd-screenrecord output ;; *Display*) omarchy-cmd-screenrecord output ;;
*) show_capture_menu ;; *) back_to show_capture_menu ;;
esac esac
} }
@@ -163,7 +163,7 @@ show_theme_menu() {
} }
show_font_menu() { show_font_menu() {
theme=$(menu "Font" "$(omarchy-font-list)" "-w 350" "$(omarchy-font-current)") theme=$(menu "Font" "$(omarchy-font-list)" "--width 350" "$(omarchy-font-current)")
if [[ "$theme" == "CNCLD" || -z "$theme" ]]; then if [[ "$theme" == "CNCLD" || -z "$theme" ]]; then
back_to show_style_menu back_to show_style_menu
else else
@@ -232,7 +232,7 @@ show_setup_security_menu() {
} }
show_install_menu() { show_install_menu() {
case $(menu "Install" "󰣇 Package\n󰣇 AUR\n Web App\n TUI\n Service\n Style\n󰵮 Development\n Editor\n Terminal\n󱚤 AI\n Gaming") in case $(menu "Install" "󰣇 Package\n󰣇 AUR\n Web App\n TUI\n Service\n Style\n󰵮 Development\n Editor\n Terminal\n󱚤 AI\n󰍲 Windows\n Gaming") in
*Package*) terminal omarchy-pkg-install ;; *Package*) terminal omarchy-pkg-install ;;
*AUR*) terminal omarchy-pkg-aur-install ;; *AUR*) terminal omarchy-pkg-aur-install ;;
*Web*) present_terminal omarchy-webapp-install ;; *Web*) present_terminal omarchy-webapp-install ;;
@@ -243,6 +243,7 @@ show_install_menu() {
*Editor*) show_install_editor_menu ;; *Editor*) show_install_editor_menu ;;
*Terminal*) show_install_terminal_menu ;; *Terminal*) show_install_terminal_menu ;;
*AI*) show_install_ai_menu ;; *AI*) show_install_ai_menu ;;
*Windows*) present_terminal "omarchy-windows-vm install" ;;
*Gaming*) show_install_gaming_menu ;; *Gaming*) show_install_gaming_menu ;;
*) show_main_menu ;; *) show_main_menu ;;
esac esac
@@ -318,7 +319,7 @@ show_install_style_menu() {
} }
show_install_font_menu() { show_install_font_menu() {
case $(menu "Install" " Meslo LG Mono\n Fira Code\n Victor Code\n Bistream Vera Mono" "-w 350") in case $(menu "Install" " Meslo LG Mono\n Fira Code\n Victor Code\n Bistream Vera Mono" "--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" ;;
@@ -373,11 +374,12 @@ show_install_elixir_menu() {
} }
show_remove_menu() { show_remove_menu() {
case $(menu "Remove" "󰣇 Package\n Web App\n TUI\n󰸌 Theme\n󰈷 Fingerprint\n Fido2") in case $(menu "Remove" "󰣇 Package\n Web App\n TUI\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 ;;
*Theme*) present_terminal omarchy-theme-remove ;; *Theme*) present_terminal omarchy-theme-remove ;;
*Windows*) present_terminal "omarchy-windows-vm remove" ;;
*Fingerprint*) present_terminal "omarchy-setup-fingerprint --remove" ;; *Fingerprint*) present_terminal "omarchy-setup-fingerprint --remove" ;;
*Fido2*) present_terminal "omarchy-setup-fido2 --remove" ;; *Fido2*) present_terminal "omarchy-setup-fido2 --remove" ;;
*) show_main_menu ;; *) show_main_menu ;;
@@ -385,14 +387,15 @@ show_remove_menu() {
} }
show_update_menu() { show_update_menu() {
case $(menu "Update" " Omarchy\n Branch\n Config\n󰸌 Extra Themes\n Process\n󰇅 Hardware\n Password\n Timezone") in case $(menu "Update" " Omarchy\n Branch\n Config\n󰸌 Extra Themes\n Process\n󰇅 Hardware\n Firmware\n Password\n Timezone") in
*Omarchy*) present_terminal omarchy-update ;; *Omarchy*) present_terminal omarchy-update ;;
*Branch*) show_update_branch_menu ;; *Branch*) show_update_branch_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 ;;
*Hardware*) show_update_hardware_menu ;; *Hardware*) show_update_hardware_menu ;;
*Timezone*) omarchy-cmd-tzupdate ;; *Firmware*) present_terminal omarchy-update-firmware ;;
*Timezone*) present_terminal omarchy-tz-select ;;
*Password*) show_update_password_menu ;; *Password*) show_update_password_menu ;;
*) show_main_menu ;; *) show_main_menu ;;
esac esac
@@ -448,13 +451,12 @@ show_update_password_menu() {
} }
show_system_menu() { show_system_menu() {
case $(menu "System" " Lock\n󱄄 Screensaver\n󰤄 Suspend\n Relaunch\n󰜉 Restart\n󰐥 Shutdown") in case $(menu "System" " Lock\n󱄄 Screensaver\n󰤄 Suspend\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 ;; *Suspend*) systemctl suspend ;;
*Relaunch*) omarchy-state clear relaunch-required && sudo systemctl restart sddm ;; *Restart*) omarchy-state clear re*-required && systemctl reboot --no-wall ;;
*Restart*) omarchy-state clear re*-required && systemctl reboot ;; *Shutdown*) omarchy-state clear re*-required && systemctl poweroff --no-wall ;;
*Shutdown*) omarchy-state clear re*-required && systemctl poweroff ;;
*) back_to show_main_menu ;; *) back_to show_main_menu ;;
esac esac
} }

View File

@@ -156,4 +156,4 @@ dynamic_bindings |
sort -u | sort -u |
parse_keycodes | parse_keycodes |
parse_bindings | parse_bindings |
walker --dmenu --theme keybindings -p 'Keybindings' -w 800 -h "$menu_height" walker --dmenu -p 'Keybindings' --width 800 --height "$menu_height"

View File

@@ -1,6 +1,8 @@
#!/bin/bash #!/bin/bash
sudo pacman -S --noconfirm --needed "$@" || exit 1 if omarchy-pkg-missing "$@"; then
sudo pacman -S --noconfirm --needed "$@" || exit 1
fi
for pkg in "$@"; do for pkg in "$@"; do
# Secondary check to handle states where pacman doesn't actually register an error # Secondary check to handle states where pacman doesn't actually register an error

View File

@@ -3,7 +3,7 @@
fzf_args=( fzf_args=(
--multi --multi
--preview 'yay -Siia {1}' --preview 'yay -Siia {1}'
--preview-label='alt-p: toggle description, alt-b/B: toggle PKGBUILD, alt-j/k: scroll, tab: multi-select, F11: maximize' --preview-label='alt-p: toggle description, alt-b/B: toggle PKGBUILD, alt-j/k: scroll, tab: multi-select'
--preview-label-pos='bottom' --preview-label-pos='bottom'
--preview-window 'down:65%:wrap' --preview-window 'down:65%:wrap'
--bind 'alt-p:toggle-preview' --bind 'alt-p:toggle-preview'

View File

@@ -3,7 +3,7 @@
fzf_args=( fzf_args=(
--multi --multi
--preview 'pacman -Sii {1}' --preview 'pacman -Sii {1}'
--preview-label='alt-p: toggle description, alt-j/k: scroll, tab: multi-select, F11: maximize' --preview-label='alt-p: toggle description, alt-j/k: scroll, tab: multi-select'
--preview-label-pos='bottom' --preview-label-pos='bottom'
--preview-window 'down:65%:wrap' --preview-window 'down:65%:wrap'
--bind 'alt-p:toggle-preview' --bind 'alt-p:toggle-preview'

View File

@@ -3,7 +3,7 @@
fzf_args=( fzf_args=(
--multi --multi
--preview 'yay -Qi {1}' --preview 'yay -Qi {1}'
--preview-label='alt-p: toggle description, alt-j/k: scroll, tab: multi-select, F11: maximize' --preview-label='alt-p: toggle description, alt-j/k: scroll, tab: multi-select'
--preview-label-pos='bottom' --preview-label-pos='bottom'
--preview-window 'down:65%:wrap' --preview-window 'down:65%:wrap'
--bind 'alt-p:toggle-preview' --bind 'alt-p:toggle-preview'

View File

@@ -1,4 +1,6 @@
#!/bin/bash #!/bin/bash
omarchy-refresh-config walker/config.toml omarchy-refresh-config walker/config.toml
omarchy-refresh-config elephant/calc.toml
omarchy-refresh-config elephant/desktopapplications.toml
omarchy-restart-walker omarchy-restart-walker

View File

@@ -1,7 +1,21 @@
#!/bin/bash #!/bin/bash
pkill elephant
pkill walker pkill walker
# FIXME: Just deal with the memory leak for now.
# See https://github.com/basecamp/omarchy/issues/698 # Detect if we're running as root (from pacman hook)
setsid uwsm-app -- walker --gapplication-service & if [[ $EUID -eq 0 ]]; then
echo # Always end in success so we don't terminate further running # Get the owner of this script to determine which user to run as
SCRIPT_OWNER=$(stat -c '%U' "$0")
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" \
bash -c "
setsid uwsm-app -- elephant &
setsid uwsm-app -- walker --gapplication-service &
"
else
setsid uwsm-app -- elephant &
setsid uwsm-app -- walker --gapplication-service &
fi

View File

@@ -5,7 +5,7 @@
BACKGROUNDS_DIR="$HOME/.config/omarchy/current/theme/backgrounds/" BACKGROUNDS_DIR="$HOME/.config/omarchy/current/theme/backgrounds/"
CURRENT_BACKGROUND_LINK="$HOME/.config/omarchy/current/background" CURRENT_BACKGROUND_LINK="$HOME/.config/omarchy/current/background"
mapfile -d '' -t BACKGROUNDS < <(find "$BACKGROUNDS_DIR" -type f -print0 | sort -z) mapfile -d '' -t BACKGROUNDS < <(find -L "$BACKGROUNDS_DIR" -type f -print0 | sort -z)
TOTAL=${#BACKGROUNDS[@]} TOTAL=${#BACKGROUNDS[@]}
if [[ $TOTAL -eq 0 ]]; then if [[ $TOTAL -eq 0 ]]; then

View File

@@ -24,7 +24,9 @@ ln -nsf "$THEME_PATH" "$CURRENT_THEME_DIR"
omarchy-theme-bg-next omarchy-theme-bg-next
# Restart components to apply new theme # Restart components to apply new theme
omarchy-restart-waybar if pgrep -x waybar >/dev/null; then
omarchy-restart-waybar
fi
omarchy-restart-swayosd omarchy-restart-swayosd
hyprctl reload hyprctl reload
pkill -SIGUSR2 btop pkill -SIGUSR2 btop
@@ -33,7 +35,10 @@ makoctl reload
# Change gnome, browser, vscode, cursor themes # Change gnome, browser, vscode, cursor themes
omarchy-theme-set-terminal omarchy-theme-set-terminal
omarchy-theme-set-gnome omarchy-theme-set-gnome
omarchy-theme-set-eza
omarchy-theme-set-browser omarchy-theme-set-browser
omarchy-theme-set-vscode omarchy-theme-set-vscode
omarchy-theme-set-cursor omarchy-theme-set-cursor
omarchy-theme-set-obsidian
# Call hook on theme set
omarchy-hook theme-set "$THEME_NAME"

View File

@@ -2,10 +2,10 @@
CHROMIUM_THEME=~/.config/omarchy/current/theme/chromium.theme CHROMIUM_THEME=~/.config/omarchy/current/theme/chromium.theme
if omarchy-cmd-present chromium || omarchy-cmd-present brave; then if omarchy-cmd-present chromium || omarchy-cmd-present helium-browser || omarchy-cmd-present brave; then
if [[ -f $CHROMIUM_THEME ]]; then if [[ -f $CHROMIUM_THEME ]]; then
THEME_RGB_COLOR=$(<$CHROMIUM_THEME) THEME_RGB_COLOR=$(<$CHROMIUM_THEME)
THEME_HEX_COLOR=$(printf '#%02x%02x%02x' ${rgb//,/ }) THEME_HEX_COLOR=$(printf '#%02x%02x%02x' ${THEME_RGB_COLOR//,/ })
else else
# Use a default, neutral grey if theme doesn't have a color # Use a default, neutral grey if theme doesn't have a color
THEME_RGB_COLOR="28,32,39" THEME_RGB_COLOR="28,32,39"
@@ -15,6 +15,17 @@ if omarchy-cmd-present chromium || omarchy-cmd-present brave; then
if omarchy-cmd-present chromium; then if omarchy-cmd-present chromium; then
rm -f /etc/chromium/policies/managed/color.json rm -f /etc/chromium/policies/managed/color.json
chromium --no-startup-window --set-theme-color="$THEME_RGB_COLOR" chromium --no-startup-window --set-theme-color="$THEME_RGB_COLOR"
if [[ -f ~/.config/omarchy/current/theme/light.mode ]]; then
chromium --no-startup-window --set-color-scheme="light"
else
chromium --no-startup-window --set-color-scheme="dark"
fi
fi
if omarchy-cmd-present helium-browser; then
echo "{\"BrowserThemeColor\": \"$THEME_HEX_COLOR\"}" | tee "/etc/chromium/policies/managed/color.json" >/dev/null
helium-browser --no-startup-window --refresh-platform-policy
fi fi
if omarchy-cmd-present brave; then if omarchy-cmd-present brave; then

View File

@@ -1,7 +0,0 @@
#!/bin/bash
if [ -f ~/.config/omarchy/current/theme/eza.yml ]; then
ln -snf ~/.config/omarchy/current/theme/eza.yml ~/.config/eza/theme.yml
else
rm -f ~/.config/eza/theme.yml
fi

659
bin/omarchy-theme-set-obsidian Executable file
View File

@@ -0,0 +1,659 @@
#!/bin/bash
# omarchy-theme-set-obsidian: Bootstrap and update Omarchy theme for Obsidian
#
# - Ensures registry at ~/.local/state/omarchy/obsidian-vaults
# - If missing/empty, bootstraps by scanning ~/Documents/*/.obsidian and ~/Dropbox/*/.obsidian
# - For each valid vault:
# - Ensures .obsidian/themes/Omarchy/{manifest.json, theme.css}
# - Updates theme.css (uses current themes obsidian.css if present; otherwise generates -- see below)
# Theme automagic generation logic:
#
# - Background/foreground: read from ~/.config/omarchy/current/theme/alacritty.toml [colors.primary]
# (background/foreground). Fallbacks: bg=#1a1b26, fg=#a9b1d6. Compute bg brightness for light/dark handling.
# - Palette extraction: collect colors from Alacritty (primary/normal/bright/dim/selection), Waybar (@define-color),
# and Hyprland (col.*_border; rgba->hex). Normalize, dedupe, and count frequencies.
# - Slot ordering: remove bg/fg, sort remaining colors by frequency, then fill 13 slots by cycling. Map slots to:
# h1h6, links, inline code, marks, interactive accent, blockquote border; muted/faint use border color.
# - Code colors: code background = closest color to bg (Euclidean RGB); if none, make a subtle bg variant (+/ RGB).
# code foreground = closest color to fg; fallback #e0e0e0.
# - Border color: from btop.theme theme[div_line]; else blended mix biased toward bg (≈ (bg+fg)/3).
# - Selection: from Alacritty [colors.selection] (background/text), honoring CellForeground/Background.
# If missing, background = 75% bg + 25% fg; text chosen for contrast vs selection background.
# - Fonts: monospace from Alacritty [font] or fontconfig monospace; UI font from fontconfig sans-serif.
VAULTS_FILE="$HOME/.local/state/omarchy/obsidian-vaults"
CURRENT_THEME_DIR="$HOME/.config/omarchy/current/theme"
# Ensure the vaults registry exists, or bootstrap from known locations
ensure_vaults_file() {
mkdir -p "$(dirname "$VAULTS_FILE")"
# If file exists (even empty), do not scan; treat as authoritative
if [ -f "$VAULTS_FILE" ]; then
return
fi
local tmpfile
tmpfile="$(mktemp)"
# Scan a couple of common locations for <base>/<vault>/.obsidian
for base in "$HOME/Documents" "$HOME/Dropbox"; do
[ -d "$base" ] || continue
for d in "$base"/*/.obsidian; do
[ -d "$d" ] || continue
vault_dir="${d%/.obsidian}"
printf "%s\n" "$vault_dir" >>"$tmpfile"
done
done
if [ -s "$tmpfile" ]; then
sort -u "$tmpfile" >"$VAULTS_FILE"
else
: >"$VAULTS_FILE"
fi
rm -f "$tmpfile"
}
# Ensure theme directory and minimal manifest exist in a vault
ensure_theme_scaffold() {
local vault_path="$1"
local theme_dir="$vault_path/.obsidian/themes/Omarchy"
mkdir -p "$theme_dir"
if [ ! -f "$theme_dir/manifest.json" ]; then
cat >"$theme_dir/manifest.json" <<'EOF'
{
"name": "Omarchy",
"version": "1.0.0",
"minAppVersion": "0.16.0",
"description": "Automatically syncs with your current Omarchy system theme colors and fonts",
"author": "Omarchy",
"authorUrl": "https://omarchy.org"
}
EOF
fi
[ -f "$theme_dir/theme.css" ] || : >"$theme_dir/theme.css"
}
# Function to extract hex color from string
extract_hex_color() {
echo "$1" | grep -oE '#[0-9a-fA-F]{6}' | head -1
}
# Function to convert RGB/RGBA to hex
rgb_to_hex() {
local rgb_string="$1"
if [[ $rgb_string =~ rgba?\(([0-9]+),\s*([0-9]+),\s*([0-9]+) ]]; then
printf "#%02x%02x%02x\n" "${BASH_REMATCH[1]}" "${BASH_REMATCH[2]}" "${BASH_REMATCH[3]}"
fi
}
# Convert hex to RGB components
hex_to_rgb() {
local hex="${1#\#}"
printf "%d %d %d\n" "0x${hex:0:2}" "0x${hex:2:2}" "0x${hex:4:2}"
}
# Calculate perceived brightness (0-255)
calculate_brightness() {
local hex="$1"
read -r r g b <<<"$(hex_to_rgb "$hex")"
# Use perceived brightness formula
echo $(((r * 299 + g * 587 + b * 114) / 1000))
}
# Calculate color distance (euclidean in RGB space)
color_distance() {
local hex1="$1"
local hex2="$2"
read -r r1 g1 b1 <<<"$(hex_to_rgb "$hex1")"
read -r r2 g2 b2 <<<"$(hex_to_rgb "$hex2")"
echo $(((r1 - r2) * (r1 - r2) + (g1 - g2) * (g1 - g2) + (b1 - b2) * (b1 - b2)))
}
# Extract all colors with frequency count
extract_all_colors_with_count() {
local -A color_counts
local color
# Extract from Alacritty config
if [ -f "$CURRENT_THEME_DIR/alacritty.toml" ]; then
# Primary colors
while IFS= read -r color; do
color=$(echo "$color" | tr '[:upper:]' '[:lower:]') # Lowercase for consistency
[ -n "$color" ] && ((color_counts["$color"]++))
done < <(grep -E "(background|foreground|cursor|text)" "$CURRENT_THEME_DIR/alacritty.toml" | sed "s/.*[\"']0x/#/;s/.*[\"']#/#/;s/[\"'].*//;s/.*#\([0-9a-fA-F]\{6\}\).*/\#\1/" | grep "^#")
# Normal colors
while IFS= read -r color; do
color=$(echo "$color" | tr '[:upper:]' '[:lower:]') # Lowercase for consistency
[ -n "$color" ] && ((color_counts["$color"]++))
done < <(grep -A 20 "\[colors.normal\]" "$CURRENT_THEME_DIR/alacritty.toml" | grep -E "(black|red|green|yellow|blue|magenta|cyan|white)" | sed "s/.*[\"']0x/#/;s/.*[\"']#/#/;s/[\"'].*//;s/.*#\([0-9a-fA-F]\{6\}\).*/\#\1/" | grep "^#")
# Bright colors
while IFS= read -r color; do
# Add # if missing
[[ "$color" =~ ^[0-9a-fA-F]{6}$ ]] && color="#$color"
color=$(echo "$color" | tr '[:upper:]' '[:lower:]') # Lowercase for consistency
[[ "$color" =~ ^#[0-9a-f]{6}$ ]] && ((color_counts["$color"]++))
done < <(grep -A 20 "\[colors.bright\]" "$CURRENT_THEME_DIR/alacritty.toml" | grep -E "(black|red|green|yellow|blue|magenta|cyan|white)" | sed "s/.*[\"']//;s/[\"'].*//")
# Dim colors if present
while IFS= read -r color; do
# Add # if missing
[[ "$color" =~ ^[0-9a-fA-F]{6}$ ]] && color="#$color"
color=$(echo "$color" | tr '[:upper:]' '[:lower:]') # Lowercase for consistency
[[ "$color" =~ ^#[0-9a-f]{6}$ ]] && ((color_counts["$color"]++))
done < <(grep -A 20 "\[colors.dim\]" "$CURRENT_THEME_DIR/alacritty.toml" 2>/dev/null | grep -E "(black|red|green|yellow|blue|magenta|cyan|white)" | sed "s/.*[\"']//;s/[\"'].*//")
# Selection colors
while IFS= read -r color; do
color=$(echo "$color" | tr '[:upper:]' '[:lower:]') # Lowercase for consistency
[ -n "$color" ] && ((color_counts["$color"]++))
done < <(grep -A 5 "\[colors.selection\]" "$CURRENT_THEME_DIR/alacritty.toml" 2>/dev/null | grep -E "(background|text)" | sed "s/.*[\"']0x/#/;s/.*[\"']#/#/;s/[\"'].*//;s/.*#\([0-9a-fA-F]\{6\}\).*/\#\1/" | grep "^#")
fi
# Extract from Waybar CSS
if [ -f "$CURRENT_THEME_DIR/waybar.css" ]; then
while IFS= read -r color; do
color=$(echo "$color" | tr '[:upper:]' '[:lower:]') # Lowercase for consistency
[ -n "$color" ] && ((color_counts["$color"]++))
done < <(grep -oE '@define-color [a-z_-]+ #[0-9a-fA-F]{6}' "$CURRENT_THEME_DIR/waybar.css" | grep -oE '#[0-9a-fA-F]{6}')
fi
# Extract from Hyprland config
if [ -f "$CURRENT_THEME_DIR/hyprland.conf" ]; then
while IFS= read -r color; do
if [[ $color == rgba* ]] || [[ $color == rgb* ]]; then
color=$(rgb_to_hex "$color")
fi
color=$(echo "$color" | tr '[:upper:]' '[:lower:]') # Lowercase for consistency
[ -n "$color" ] && ((color_counts["$color"]++))
done < <(grep -E "col\.(active|inactive)_border" "$CURRENT_THEME_DIR/hyprland.conf" | grep -oE 'rgba?\([^)]+\)|#[0-9a-fA-F]{6,8}' | sed 's/ff$//')
fi
# Output colors with their counts
for color in "${!color_counts[@]}"; do
echo "${color_counts[$color]} $color"
done
}
# Sort colors by frequency
sort_colors_by_frequency() {
# Input is already "count color" format
sort -rn | cut -d' ' -f2
}
# Fill color slots with cycling if needed
fill_color_slots() {
local -a colors=("$@")
local -a slots
local num_colors=${#colors[@]}
# Need 13 slots total (code colors are handled separately)
local slots_needed=13
if [ $num_colors -eq 0 ]; then
# No colors available, use defaults
colors=("#3d3d3d" "#5d5d5d" "#7d7d7d" "#9d9d9d" "#bd93f9" "#50fa7b")
num_colors=6
fi
# Fill slots, cycling if necessary
for ((i = 0; i < slots_needed; i++)); do
slots[$i]="${colors[$((i % num_colors))]}"
done
echo "${slots[@]}"
}
# Main color extraction and theme generation
extract_theme_data() {
# Get primary colors from Alacritty
local bg_color="#1a1b26"
local fg_color="#a9b1d6"
if [ -f "$CURRENT_THEME_DIR/alacritty.toml" ]; then
local extracted_bg=$(grep -A 5 "\[colors.primary\]" "$CURRENT_THEME_DIR/alacritty.toml" | grep "^background = " | sed "s/.*[\"']0x/#/;s/.*[\"']#/#/;s/[\"'].*//;s/.*#\([0-9a-fA-F]\{6\}\).*/\#\1/" | head -1 | tr '[:upper:]' '[:lower:]')
local extracted_fg=$(grep -A 5 "\[colors.primary\]" "$CURRENT_THEME_DIR/alacritty.toml" | grep "^foreground = " | sed "s/.*[\"']0x/#/;s/.*[\"']#/#/;s/[\"'].*//;s/.*#\([0-9a-fA-F]\{6\}\).*/\#\1/" | head -1 | tr '[:upper:]' '[:lower:]')
[ -n "$extracted_bg" ] && bg_color="$extracted_bg"
[ -n "$extracted_fg" ] && fg_color="$extracted_fg"
fi
# Determine if light or dark theme
local bg_brightness=$(calculate_brightness "$bg_color")
local is_light_theme=false
[ $bg_brightness -gt 127 ] && is_light_theme=true
# Extract all colors with counts
local color_data=$(extract_all_colors_with_count)
# Filter out background and foreground colors for the main array
local filtered_data=$(echo "$color_data" | grep -v "$bg_color" | grep -v "$fg_color")
# Get all unique colors (including bg/fg) for distance calculations
local -a all_unique_colors
readarray -t all_unique_colors < <(echo "$color_data" | cut -d' ' -f2 | sort -u)
# Find the 3 closest colors to background for background variations
local -a bg_distances
for color in "${all_unique_colors[@]}"; do
if [ "$color" != "$bg_color" ]; then
distance=$(color_distance "$color" "$bg_color")
bg_distances+=("$distance:$color")
fi
done
# Sort by distance and get the closest color for code background
local -a closest_to_bg
readarray -t closest_to_bg < <(printf '%s\n' "${bg_distances[@]}" | sort -n | head -1 | cut -d: -f2)
# All background variations use the same as primary background
local bg_primary_alt="$bg_color"
local bg_secondary="$bg_color"
local bg_secondary_alt="$bg_color"
# Code block background uses the closest different color
local code_bg="${closest_to_bg[0]}"
# If no different color available, create a subtle variant for code blocks
if [ -z "$code_bg" ]; then
read -r r g b <<<"$(hex_to_rgb "$bg_color")"
if [ $bg_brightness -gt 127 ]; then
r=$((r - 10))
g=$((g - 10))
b=$((b - 10))
else
r=$((r + 15))
g=$((g + 15))
b=$((b + 15))
fi
[ $r -lt 0 ] && r=0
[ $r -gt 255 ] && r=255
[ $g -lt 0 ] && g=0
[ $g -gt 255 ] && g=255
[ $b -lt 0 ] && b=0
[ $b -gt 255 ] && b=255
code_bg=$(printf "#%02x%02x%02x" "$r" "$g" "$b")
fi
# Find closest color to foreground for code block text
local code_fg=""
min_distance=999999999
for color in "${all_unique_colors[@]}"; do
if [ "$color" != "$fg_color" ]; then
distance=$(color_distance "$color" "$fg_color")
if [ $distance -lt $min_distance ]; then
min_distance=$distance
code_fg="$color"
fi
fi
done
[ -z "$code_fg" ] && code_fg="#e0e0e0" # Fallback
# Extract text selection colors from Alacritty
local selection_bg=""
local selection_fg=""
if [ -f "$CURRENT_THEME_DIR/alacritty.toml" ]; then
selection_bg=$(grep -A 5 "\[colors.selection\]" "$CURRENT_THEME_DIR/alacritty.toml" | grep "^background = " | sed "s/.*[\"']0x/#/;s/.*[\"']#/#/;s/[\"'].*//;s/.*#\([0-9a-fA-F]\{6\}\).*/\#\1/" | head -1 | tr '[:upper:]' '[:lower:]')
local selection_text=$(grep -A 5 "\[colors.selection\]" "$CURRENT_THEME_DIR/alacritty.toml" | grep "^text = " | sed "s/.*[\"']0x/#/;s/.*[\"']#/#/;s/[\"'].*//;s/.*#\([0-9a-fA-F]\{6\}\).*/\#\1/" | head -1 | tr '[:upper:]' '[:lower:]')
# If text is set to CellForeground/CellBackground, use the appropriate color
if [ -z "$selection_text" ] || [[ "$(grep -A 5 "\[colors.selection\]" "$CURRENT_THEME_DIR/alacritty.toml" | grep "^text = ")" == *"CellForeground"* ]]; then
selection_fg="$fg_color"
elif [[ "$(grep -A 5 "\[colors.selection\]" "$CURRENT_THEME_DIR/alacritty.toml" | grep "^text = ")" == *"CellBackground"* ]]; then
selection_fg="$bg_color"
else
selection_fg="$selection_text"
fi
fi
# Fallback if no selection colors found
if [ -z "$selection_bg" ]; then
read -r r1 g1 b1 <<<"$(hex_to_rgb "$bg_color")"
read -r r2 g2 b2 <<<"$(hex_to_rgb "$fg_color")"
local r=$(((r1 * 3 + r2) / 4)) # 75% background, 25% foreground
local g=$(((g1 * 3 + g2) / 4))
local b=$(((b1 * 3 + b2) / 4))
selection_bg=$(printf "#%02x%02x%02x" "$r" "$g" "$b")
fi
# Use contrasting color for selection text if not defined
if [ -z "$selection_fg" ]; then
# Calculate brightness of selection background
local sel_brightness=$(calculate_brightness "$selection_bg")
if [ $sel_brightness -gt 127 ]; then
selection_fg="$bg_color" # Dark text on light selection
else
selection_fg="$fg_color" # Light text on dark selection
fi
fi
# Extract border color from btop theme
local border_color=""
if [ -f "$CURRENT_THEME_DIR/btop.theme" ]; then
# Look for theme[div_line] in btop theme
local btop_divline=$(grep 'theme\[div_line\]' "$CURRENT_THEME_DIR/btop.theme" | head -1)
if [ -n "$btop_divline" ]; then
# Extract the color value after the = sign
local extracted=$(echo "$btop_divline" | sed 's/.*=//' | xargs)
# Check if it's a hex color and lowercase it
if [[ $extracted =~ ^#[0-9a-fA-F]{6}$ ]]; then
border_color=$(echo "$extracted" | tr '[:upper:]' '[:lower:]')
elif [[ $extracted =~ ^[0-9a-fA-F]{6}$ ]]; then
# Add # if missing and lowercase
border_color=$(echo "#$extracted" | tr '[:upper:]' '[:lower:]')
fi
fi
fi
# Fallback if no border color found
if [ -z "$border_color" ]; then
# Use a color between bg and fg
read -r r1 g1 b1 <<<"$(hex_to_rgb "$bg_color")"
read -r r2 g2 b2 <<<"$(hex_to_rgb "$fg_color")"
local r=$(((r1 + r2) / 3)) # Closer to background
local g=$(((g1 + g2) / 3))
local b=$(((b1 + b2) / 3))
border_color=$(printf "#%02x%02x%02x" "$r" "$g" "$b")
fi
# Get unique colors array (without bg/fg) sorted by frequency
local -a unique_colors
readarray -t unique_colors < <(echo "$filtered_data" | sort_colors_by_frequency)
# Fill the 13 color slots (code colors handled separately)
local -a color_slots
readarray -t color_slots < <(fill_color_slots "${unique_colors[@]}" | tr ' ' '\n')
# Extract fonts
local monospace_font="CaskaydiaMono Nerd Font"
local ui_font="Liberation Sans"
if [ -f "$CURRENT_THEME_DIR/alacritty.toml" ]; then
local alacritty_font=$(grep -A 5 "\[font\]" "$CURRENT_THEME_DIR/alacritty.toml" | grep 'family = ' | head -1 | cut -d'"' -f2)
[ -n "$alacritty_font" ] && monospace_font="$alacritty_font"
fi
if [ -f "$HOME/.config/fontconfig/fonts.conf" ]; then
local fontconfig_mono=$(xmlstarlet sel -t -v '//match[@target="pattern"][test/string="monospace"]/edit[@name="family"]/string' "$HOME/.config/fontconfig/fonts.conf" 2>/dev/null || true)
[ -n "$fontconfig_mono" ] && monospace_font="$fontconfig_mono"
local fontconfig_sans=$(xmlstarlet sel -t -v '//match[@target="pattern"][test/string="sans-serif"]/edit[@name="family"]/string' "$HOME/.config/fontconfig/fonts.conf" 2>/dev/null || true)
[ -n "$fontconfig_sans" ] && ui_font="$fontconfig_sans"
fi
# Generate CSS with 14-slot system
cat <<EOF
/* Omarchy Theme for Obsidian */
/* Generated on $(date) from theme: $(basename "$(readlink "$CURRENT_THEME_DIR" 2>/dev/null || echo "unknown")") */
/* Colors sorted by frequency, backgrounds by distance */
.theme-dark, .theme-light {
/* Core colors */
--background-primary: $bg_color;
--text-normal: $fg_color;
/* Background variations (always distance-based) */
--background-primary-alt: $bg_primary_alt;
--background-secondary: $bg_secondary;
--background-secondary-alt: $bg_secondary_alt;
/* Code block colors (always distance-based) */
--code-background: $code_bg;
--code-foreground: $code_fg;
/* Border color from btop theme */
--border-color: $border_color;
/* Selection colors from Alacritty */
--text-selection: $selection_bg;
--text-selection-fg: $selection_fg;
/* 13-slot color system for remaining elements */
--text-title-h1: ${color_slots[0]};
--text-title-h2: ${color_slots[1]};
--text-title-h3: ${color_slots[2]};
--text-title-h4: ${color_slots[3]};
--text-title-h5: ${color_slots[4]};
--text-title-h6: ${color_slots[4]}; /* Same as h5 */
--text-link: ${color_slots[5]};
--markup-code: ${color_slots[6]};
--text-mark: ${color_slots[7]};
--interactive-accent: ${color_slots[8]};
--blockquote-border: ${color_slots[9]};
--text-muted: $border_color; /* Use border color for muted text */
--text-faint: $border_color; /* Use border color for faint text */
/* Additional mappings */
--text-accent: var(--interactive-accent);
--text-accent-hover: var(--interactive-accent);
--text-error: var(--text-title-h1);
--text-error-hover: var(--text-title-h1);
--text-highlight-bg: $fg_color; /* Use text color as highlight background */
--text-on-accent: $bg_color;
--interactive-normal: var(--code-background);
--interactive-hover: var(--interactive-accent);
--interactive-accent-hover: var(--interactive-accent);
--interactive-success: var(--text-title-h2);
--scrollbar-bg: var(--background-primary);
--scrollbar-thumb-bg: var(--code-background);
--scrollbar-active-thumb-bg: var(--interactive-accent);
--background-modifier-border: var(--border-color);
--background-modifier-form-field: var(--code-background);
--background-modifier-form-field-highlighted: var(--code-background);
--background-modifier-box-shadow: rgba(0, 0, 0, 0.3);
--background-modifier-success: var(--interactive-success);
--background-modifier-error: var(--text-error);
--background-modifier-error-hover: var(--text-error);
--background-modifier-cover: rgba(0, 0, 0, 0.8);
--link-color: var(--text-link);
--link-color-hover: var(--text-link);
--link-unresolved-color: var(--text-muted);
--link-unresolved-opacity: 0.7;
--tag-color: var(--text-title-h3);
--tag-background: var(--code-background);
--graph-line: var(--text-muted);
--graph-node: var(--interactive-accent);
--graph-node-unresolved: var(--text-muted);
--graph-node-focused: var(--text-link);
--graph-node-tag: var(--text-title-h3);
--graph-node-attachment: var(--text-title-h2);
/* Fonts */
--font-interface-theme: "$ui_font";
--font-text-theme: "$ui_font";
--font-monospace-theme: "$monospace_font";
}
/* Headers */
.cm-header-1, .markdown-rendered h1 { color: var(--text-title-h1); }
.cm-header-2, .markdown-rendered h2 { color: var(--text-title-h2); }
.cm-header-3, .markdown-rendered h3 { color: var(--text-title-h3); }
.cm-header-4, .markdown-rendered h4 { color: var(--text-title-h4); }
.cm-header-5, .markdown-rendered h5 { color: var(--text-title-h5); }
.cm-header-6, .markdown-rendered h6 { color: var(--text-title-h6); }
/* Code blocks */
.markdown-rendered code {
font-family: var(--font-monospace-theme);
background-color: var(--code-background);
color: var(--markup-code);
padding: 2px 4px;
border-radius: 3px;
}
.markdown-rendered pre {
background-color: var(--code-background);
border: 1px solid var(--background-modifier-border);
border-radius: 5px;
}
.markdown-rendered pre code {
background-color: transparent;
color: var(--code-foreground);
}
/* Syntax highlighting */
.cm-s-obsidian span.cm-keyword { color: var(--text-title-h1); }
.cm-s-obsidian span.cm-string { color: var(--text-title-h2); }
.cm-s-obsidian span.cm-number { color: var(--text-title-h3); }
.cm-s-obsidian span.cm-comment { color: var(--text-muted); }
.cm-s-obsidian span.cm-operator { color: var(--text-link); }
.cm-s-obsidian span.cm-variable { color: var(--text-normal); }
.cm-s-obsidian span.cm-def { color: var(--text-link); }
/* Highlighted text */
.markdown-rendered mark,
.cm-s-obsidian span.cm-highlight,
mark {
background-color: var(--text-highlight-bg) !important;
color: var(--code-background) !important;
}
/* Links */
.markdown-rendered a {
color: var(--text-link);
}
/* Blockquotes */
.markdown-rendered blockquote {
border-left: 4px solid var(--blockquote-border);
padding-left: 1em;
}
/* Status bar */
.status-bar {
background-color: var(--code-background);
border-top: 1px solid var(--background-modifier-border);
}
/* Active file */
.workspace-leaf.mod-active .workspace-leaf-header-title {
color: var(--interactive-accent);
}
.nav-file-title.is-active {
background-color: var(--code-background);
color: var(--interactive-accent);
}
/* Text selection */
::selection {
background-color: var(--text-selection);
color: var(--text-selection-fg);
}
/* Search results */
.search-result-file-title {
color: var(--interactive-accent);
}
.search-result-file-match {
background-color: var(--code-background);
color: var(--text-normal);
border-left: 3px solid var(--interactive-accent);
}
.search-result-file-matched-text {
color: var(--code-background);
}
/* Tables */
.markdown-rendered table {
border: 1px solid var(--background-modifier-border);
}
.markdown-rendered th {
background-color: var(--code-background);
color: var(--text-accent);
}
.markdown-rendered td {
border: 1px solid var(--background-modifier-border);
}
/* Callouts */
.callout {
border-left: 4px solid var(--interactive-accent);
background-color: var(--code-background);
}
.callout * {
color: var(--text-normal);
}
/* Modal dialogs */
.modal {
background-color: var(--background-primary);
border: 2px solid var(--background-modifier-border);
}
/* Settings */
.vertical-tab-header-group-title {
color: var(--interactive-accent);
}
.vertical-tab-nav-item.is-active {
background-color: var(--code-background);
color: var(--interactive-accent);
}
EOF
}
# Option handling
if [ "${1:-}" = "--reset" ]; then
echo "♻️ Resetting Omarchy themes and registry..."
if [ -f "$VAULTS_FILE" ] && [ -s "$VAULTS_FILE" ]; then
while IFS= read -r vault_path || [ -n "$vault_path" ]; do
case "$vault_path" in ""|\#*) continue ;; esac
vault_path="${vault_path%/}"
vault_name=$(basename "$vault_path")
theme_dir="$vault_path/.obsidian/themes/Omarchy"
if [ -d "$theme_dir" ]; then
rm -rf "$theme_dir"
echo " ✅ $vault_name (theme removed)"
else
echo " $vault_name (no theme present)"
fi
done <"$VAULTS_FILE"
fi
rm -f "$VAULTS_FILE"
echo "✅ Registry removed"
exit 0
fi
# Main update logic
echo "🔄 Updating Obsidian vaults..."
# Step 1: ensure registry exists (bootstrap if needed)
ensure_vaults_file
while IFS= read -r vault_path || [ -n "$vault_path" ]; do
case "$vault_path" in "" | \#*) continue ;; esac
vault_path="${vault_path%/}"
vault_name=$(basename "$vault_path")
# Step 2: verify path exists; log/skip gracefully if invalid
if [ ! -d "$vault_path" ] || [ ! -d "$vault_path/.obsidian" ]; then
echo " ❌ $vault_name (invalid entry: missing directory or .obsidian)"
continue
fi
# Ensure theme files exist for this vault
ensure_theme_scaffold "$vault_path"
THEME_DIR="$vault_path/.obsidian/themes/Omarchy"
# Step 3: update theme.css
if [ -f "$CURRENT_THEME_DIR/obsidian.css" ]; then
cp "$CURRENT_THEME_DIR/obsidian.css" "$THEME_DIR/theme.css"
echo " ✅ $vault_name (custom theme)"
else
extract_theme_data >"$THEME_DIR/theme.css"
echo " ✅ $vault_name (generated theme)"
fi
done <"$VAULTS_FILE"

View File

@@ -1,7 +1,8 @@
#!/bin/bash #!/bin/bash
case "$TERMINAL" in if [[ -f ~/.config/alacritty/alacritty.toml ]]; then
"alacritty") touch ~/.config/alacritty/alacritty.toml ;; touch ~/.config/alacritty/alacritty.toml
"kitty") killall -SIGUSR1 kitty ;; fi
"ghostty") killall -SIGUSR2 ghostty ;;
esac killall -SIGUSR1 kitty
killall -SIGUSR2 ghostty

View File

@@ -18,22 +18,20 @@ if omarchy-cmd-present "$EDITOR_CMD" && [[ ! -f "$SKIP_FLAG" ]]; then
# Install $EDITOR_NAME theme extension # Install $EDITOR_NAME theme extension
if [[ -n "$extension" ]] && ! "$EDITOR_CMD" --list-extensions | grep -Fxq "$extension"; then if [[ -n "$extension" ]] && ! "$EDITOR_CMD" --list-extensions | grep -Fxq "$extension"; then
notify-send " Installing $EDITOR_NAME theme for $theme_name"
"$EDITOR_CMD" --install-extension "$extension" >/dev/null "$EDITOR_CMD" --install-extension "$extension" >/dev/null
fi fi
# Create config file if there isn't already one # Create config file if there isn't already one
mkdir -p "$(dirname "$SETTINGS_PATH")" mkdir -p "$(dirname "$SETTINGS_PATH")"
if [[ ! -f "$SETTINGS_PATH" ]]; then if [[ ! -f "$SETTINGS_PATH" ]]; then
printf '{\n}\n' > "$SETTINGS_PATH" printf '{\n}\n' >"$SETTINGS_PATH"
fi fi
# Create a `workbench.colorTheme` entry in settings. # Create a `workbench.colorTheme` entry in settings.
if ! grep -q '"workbench.colorTheme"' "$SETTINGS_PATH"; then if ! grep -q '"workbench.colorTheme"' "$SETTINGS_PATH"; then
# Insert `"workbench.colorTheme": "",` immediately after the first `{` # Insert `"workbench.colorTheme": "",` immediately after the first `{`
# Use sed's first-match range (0,/{/) to only replace the first `{` # Use sed's first-match range (0,/{/) to only replace the first `{`
sed -i --follow-symlinks -E '0,/\{/{s/\{/{\ sed -i --follow-symlinks -E '0,/\{/{s/\{/{\ "workbench.colorTheme": "",/}' "$SETTINGS_PATH"
"workbench.colorTheme": "",/}' "$SETTINGS_PATH"
fi fi
# Update theme # Update theme
@@ -43,8 +41,7 @@ if omarchy-cmd-present "$EDITOR_CMD" && [[ ! -f "$SKIP_FLAG" ]]; then
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_NAME support
if [[ -f "$SETTINGS_PATH" ]]; then if [[ -f "$SETTINGS_PATH" ]]; then
sed -i --follow-symlinks -E '/"workbench\.colorTheme"[[:space:]]*:[^,}]*,?/d' "$SETTINGS_PATH" sed -i --follow-symlinks -E 's/\"workbench\.colorTheme\"[[:space:]]*:[^,}]*,?//' "$SETTINGS_PATH"
fi fi
fi fi
fi fi

6
bin/omarchy-tz-select Executable file
View File

@@ -0,0 +1,6 @@
#!/bin/bash
timezone=$(timedatectl list-timezones | gum filter --height 20 --header "Set timezone") || exit 1
sudo timedatectl set-timezone "$timezone"
echo "Timezone is now set to $timezone"
omarchy-restart-waybar

View File

@@ -3,7 +3,7 @@
set -e set -e
if (($# == 0)); then if (($# == 0)); then
echo "Usage: omarchy-verion-branch-set [master|dev]" echo "Usage: omarchy-update-branch [master|dev]"
exit 1 exit 1
fi fi

11
bin/omarchy-update-firmware Executable file
View File

@@ -0,0 +1,11 @@
#!/bin/bash
set -e
echo -e "\e[32mUpdate Firmware\e[0m"
if omarchy-cmd-missing fwupdmgr; then
omarchy-pkg-add fwupd
fi
fwupdmgr refresh
sudo fwupdmgr update

View File

@@ -5,4 +5,5 @@ set -e
omarchy-update-available-reset omarchy-update-available-reset
omarchy-update-system-pkgs omarchy-update-system-pkgs
omarchy-migrate omarchy-migrate
omarchy-hook post-update
omarchy-update-restart omarchy-update-restart

View File

@@ -5,9 +5,6 @@ if [ "$(uname -r | sed 's/-arch/\.arch/')" != "$(pacman -Q linux | awk '{print $
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-state clear re*-required && sudo reboot now
elif [ -f "$HOME/.local/state/omarchy/relaunch-required" ]; then
gum confirm "Updates require Hyprland relaunch. Ready?" && omarchy-state clear re*-required && uwsm stop
fi fi
for file in "$HOME"/.local/state/omarchy/restart-*-required; do for file in "$HOME"/.local/state/omarchy/restart-*-required; do

445
bin/omarchy-windows-vm Executable file
View File

@@ -0,0 +1,445 @@
#!/bin/bash
COMPOSE_FILE="$HOME/.config/windows/docker-compose.yml"
check_prerequisites() {
local DISK_SIZE_GB=${1:-64}
local REQUIRED_SPACE=$((DISK_SIZE_GB + 10)) # Add 10GB for Windows ISO and overhead
# Check for KVM support
if [ ! -e /dev/kvm ]; then
gum style \
--border normal \
--padding "1 2" \
--margin "1" \
"❌ KVM virtualization not available!" \
"" \
"Please enable virtualization in BIOS or run:" \
" sudo modprobe kvm-intel # for Intel CPUs" \
" sudo modprobe kvm-amd # for AMD CPUs"
exit 1
fi
# Check disk space
AVAILABLE_SPACE=$(df "$HOME" | awk 'NR==2 {print int($4/1024/1024)}')
if [ "$AVAILABLE_SPACE" -lt "$REQUIRED_SPACE" ]; then
echo "❌ Insufficient disk space!"
echo " Available: ${AVAILABLE_SPACE}GB"
echo " Required: ${REQUIRED_SPACE}GB (${DISK_SIZE_GB}GB disk + 10GB for Windows image)"
exit 1
fi
}
install_windows() {
# Set up trap to handle Ctrl+C
trap "echo ''; echo 'Installation cancelled by user'; exit 1" INT
check_prerequisites
omarchy-pkg-add freerdp openbsd-netcat gum
mkdir -p "$HOME/.windows"
mkdir -p "$HOME/.config/windows"
mkdir -p "$HOME/.local/share/applications/icons"
# Install Windows VM icon and desktop file
if [ -f "$OMARCHY_PATH/applications/icons/windows.png" ]; then
cp "$OMARCHY_PATH/applications/icons/windows.png" "$HOME/.local/share/applications/icons/windows.png"
fi
cat << EOF | tee "$HOME/.local/share/applications/windows-vm.desktop" > /dev/null
[Desktop Entry]
Name=Windows
Comment=Start Windows VM via Docker and connect with RDP
Exec=uwsm app -- omarchy-windows-vm launch
Icon=$HOME/.local/share/applications/icons/windows.png
Terminal=false
Type=Application
Categories=System;Virtualization;
EOF
# Get system resources
TOTAL_RAM=$(free -h | awk 'NR==2 {print $2}')
TOTAL_RAM_GB=$(awk 'NR==1 {printf "%d", $2/1024/1024}' /proc/meminfo)
TOTAL_CORES=$(nproc)
echo ""
echo "System Resources Detected:"
echo " Total RAM: $TOTAL_RAM"
echo " Total CPU Cores: $TOTAL_CORES"
echo ""
RAM_OPTIONS=""
for size in 2 4 8 16 32 64; do
if [ $size -le $TOTAL_RAM_GB ]; then
RAM_OPTIONS="$RAM_OPTIONS ${size}G"
fi
done
SELECTED_RAM=$(echo $RAM_OPTIONS | tr ' ' '\n' | gum choose --selected="4G" --header="How much RAM would you like to allocate to Windows VM?")
# Check if user cancelled
if [ -z "$SELECTED_RAM" ]; then
echo "Installation cancelled by user"
exit 1
fi
SELECTED_CORES=$(gum input --placeholder="Number of CPU cores (1-$TOTAL_CORES)" --value="2" --header="How many CPU cores would you like to allocate to Windows VM?" --char-limit=2)
# Check if user cancelled (Ctrl+C in gum input returns empty string)
if [ -z "$SELECTED_CORES" ]; then
echo "Installation cancelled by user"
exit 1
fi
if ! [[ "$SELECTED_CORES" =~ ^[0-9]+$ ]] || [ "$SELECTED_CORES" -lt 1 ] || [ "$SELECTED_CORES" -gt "$TOTAL_CORES" ]; then
echo "Invalid input. Using default: 2 cores"
SELECTED_CORES=2
fi
AVAILABLE_SPACE=$(df "$HOME" | awk 'NR==2 {print int($4/1024/1024)}')
MAX_DISK_GB=$((AVAILABLE_SPACE - 10)) # Leave 10GB for Windows image
# Check if we have enough space for minimum
if [ $MAX_DISK_GB -lt 32 ]; then
echo "❌ Insufficient disk space for Windows VM!"
echo " Available: ${AVAILABLE_SPACE}GB"
echo " Minimum required: 42GB (32GB disk + 10GB for Windows image)"
exit 1
fi
DISK_OPTIONS=""
for size in 32 64 128 256 512; do
if [ $size -le $MAX_DISK_GB ]; then
DISK_OPTIONS="$DISK_OPTIONS ${size}G"
fi
done
# Default to 64G if available, otherwise 32G
DEFAULT_DISK="64G"
if ! echo "$DISK_OPTIONS" | grep -q "64G"; then
DEFAULT_DISK="32G"
fi
SELECTED_DISK=$(echo $DISK_OPTIONS | tr ' ' '\n' | gum choose --selected="$DEFAULT_DISK" --header="How much disk space would you like to give Windows VM? (64GB+ recommended)")
# Check if user cancelled
if [ -z "$SELECTED_DISK" ]; then
echo "Installation cancelled by user"
exit 1
fi
# Extract just the number for prerequisite check
DISK_SIZE_NUM=$(echo "$SELECTED_DISK" | sed 's/G//')
# Re-check prerequisites with selected disk size
check_prerequisites "$DISK_SIZE_NUM"
# Prompt for username and password
USERNAME=$(gum input --placeholder="Username (Press enter to use default: docker)" --header="Enter Windows username:")
if [ -z "$USERNAME" ]; then
USERNAME="docker"
fi
PASSWORD=$(gum input --placeholder="Password (Press enter to use default: admin)" --password --header="Enter Windows password:")
if [ -z "$PASSWORD" ]; then
PASSWORD="admin"
PASSWORD_DISPLAY="(default)"
else
PASSWORD_DISPLAY="(user-defined)"
fi
# Display configuration summary
gum style \
--border normal \
--padding "1 2" \
--margin "1" \
--align left \
--bold \
"Windows VM Configuration" \
"" \
"RAM: $SELECTED_RAM" \
"CPU: $SELECTED_CORES cores" \
"Disk: $SELECTED_DISK" \
"Username: $USERNAME" \
"Password: $PASSWORD_DISPLAY"
# Ask for confirmation
echo ""
if ! gum confirm "Proceed with this configuration?"; then
echo "Installation cancelled by user"
exit 1
fi
mkdir -p $HOME/Windows
# Create docker-compose.yml in user config directory
cat << EOF | tee "$COMPOSE_FILE" > /dev/null
services:
windows:
image: dockurr/windows
container_name: omarchy-windows
environment:
VERSION: "11"
RAM_SIZE: "$SELECTED_RAM"
CPU_CORES: "$SELECTED_CORES"
DISK_SIZE: "$SELECTED_DISK"
USERNAME: "$USERNAME"
PASSWORD: "$PASSWORD"
devices:
- /dev/kvm
- /dev/net/tun
cap_add:
- NET_ADMIN
ports:
- 8006:8006
- 3389:3389/tcp
- 3389:3389/udp
volumes:
- $HOME/.windows:/storage
- $HOME/Windows:/shared
restart: always
stop_grace_period: 2m
EOF
echo ""
echo "Starting Windows VM installation..."
echo "This will download a Windows 11 image (may take 10-15 minutes)."
echo ""
echo "Monitor installation progress at: http://127.0.0.1:8006"
echo ""
# Start docker-compose with user's config
echo "Starting Windows VM with docker-compose..."
if ! docker-compose -f "$COMPOSE_FILE" up -d 2>&1; then
echo "❌ Failed to start Windows VM!"
echo " Common issues:"
echo " - Docker daemon not running: sudo systemctl start docker"
echo " - Port already in use: check if another VM is running"
echo " - Permission issues: make sure you're in the docker group"
exit 1
fi
echo ""
echo "Windows VM is starting up!"
echo ""
echo "Opening browser to monitor installation..."
# Open browser to monitor installation
sleep 3
xdg-open "http://127.0.0.1:8006"
echo ""
echo "Installation is running in the background."
echo "You can monitor progress at: http://127.0.0.1:8006"
echo ""
echo "Once finished, launch 'Windows' via Super + Space"
echo ""
echo "To stop the VM: omarchy-windows-vm stop"
echo "To change resources: ~/.config/windows/docker-compose.yml"
echo ""
}
remove_windows() {
echo "Removing Windows VM..."
docker-compose -f "$COMPOSE_FILE" down 2>/dev/null || true
docker rmi dockurr/windows 2>/dev/null || echo "Image already removed or not found"
rm "$HOME/.local/share/applications/windows-vm.desktop"
rm -rf "$HOME/.config/windows"
rm -rf "$HOME/.windows"
echo ""
echo "Windows VM removal completed!"
}
launch_windows() {
KEEP_ALIVE=false
if [ "$1" = "--keep-alive" ] || [ "$1" = "-k" ]; then
KEEP_ALIVE=true
fi
# Check if config exists
if [ ! -f "$COMPOSE_FILE" ]; then
echo "Windows VM not configured. Please run: omarchy-windows-vm install"
exit 1
fi
# Check if container is already running
CONTAINER_STATUS=$(docker inspect --format='{{.State.Status}}' omarchy-windows 2>/dev/null)
if [ "$CONTAINER_STATUS" != "running" ]; then
echo "Starting Windows VM..."
# Send desktop notification
notify-send "Windows VM" "Starting Windows VM, this may take a moment..."
if ! docker-compose -f "$COMPOSE_FILE" up -d 2>&1; then
echo "❌ Failed to start Windows VM!"
echo " Try checking: omarchy-windows-vm status"
echo " View logs: docker logs omarchy-windows"
notify-send -u critical "Windows VM" "Failed to start Windows VM"
exit 1
fi
# Wait for RDP to be ready
echo "Waiting for Windows VM to be ready..."
WAIT_COUNT=0
while ! nc -z 127.0.0.1 3389 2>/dev/null; do
sleep 2
WAIT_COUNT=$((WAIT_COUNT + 1))
if [ $WAIT_COUNT -gt 60 ]; then # 2 minutes timeout
echo "❌ Timeout waiting for RDP!"
echo " The VM might still be installing Windows."
echo " Check progress at: http://127.0.0.1:8006"
exit 1
fi
done
# Give it a moment more to fully initialize
sleep 3
fi
# Extract credentials from compose file
WIN_USER=$(grep "USERNAME:" "$COMPOSE_FILE" | sed 's/.*USERNAME: "\(.*\)"/\1/')
WIN_PASS=$(grep "PASSWORD:" "$COMPOSE_FILE" | sed 's/.*PASSWORD: "\(.*\)"/\1/')
# Use defaults if not found
[ -z "$WIN_USER" ] && WIN_USER="docker"
[ -z "$WIN_PASS" ] && WIN_PASS="admin"
# Build the connection info
if [ "$KEEP_ALIVE" = true ]; then
LIFECYCLE="VM will keep running after RDP closes
To stop: omarchy-windows-vm stop"
else
LIFECYCLE="VM will auto-stop when RDP closes"
fi
gum style \
--border normal \
--padding "1 2" \
--margin "1" \
--align center \
"Connecting to Windows VM" \
"" \
"$LIFECYCLE"
# Detect display scale from Hyprland
HYPR_SCALE=$(hyprctl monitors -j | jq -r '.[0].scale')
SCALE_PERCENT=$(echo "$HYPR_SCALE" | awk '{print int($1 * 100)}')
RDP_SCALE=""
if [ "$SCALE_PERCENT" -ge 170 ]; then
RDP_SCALE="/scale:180"
elif [ "$SCALE_PERCENT" -ge 130 ]; then
RDP_SCALE="/scale:140"
fi
# If scale is less than 130%, don't set any scale (use default 100)
# Connect with RDP in fullscreen (auto-detects resolution)
xfreerdp3 /u:"$WIN_USER" /p:"$WIN_PASS" /v:127.0.0.1:3389 +f -grab-keyboard /cert:ignore /title:"Windows VM - Omarchy" /floatbar:sticky:off,default:visible,show:fullscreen $RDP_SCALE
# After RDP closes, stop the container unless --keep-alive was specified
if [ "$KEEP_ALIVE" = false ]; then
echo ""
echo "RDP session closed. Stopping Windows VM..."
docker-compose -f "$COMPOSE_FILE" down
echo "Windows VM stopped."
else
echo ""
echo "RDP session closed. Windows VM is still running."
echo "To stop it: omarchy-windows-vm stop"
fi
}
stop_windows() {
if [ ! -f "$COMPOSE_FILE" ]; then
echo "Windows VM not configured."
exit 1
fi
echo "Stopping Windows VM..."
docker-compose -f "$COMPOSE_FILE" down
echo "Windows VM stopped."
}
status_windows() {
if [ ! -f "$COMPOSE_FILE" ]; then
echo "Windows VM not configured."
echo "To set up: omarchy-windows-vm install"
exit 1
fi
CONTAINER_STATUS=$(docker inspect --format='{{.State.Status}}' omarchy-windows 2>/dev/null)
if [ -z "$CONTAINER_STATUS" ]; then
echo "Windows VM container not found."
echo "To start: omarchy-windows-vm launch"
elif [ "$CONTAINER_STATUS" = "running" ]; then
gum style \
--border normal \
--padding "1 2" \
--margin "1" \
--align left \
"Windows VM Status: RUNNING" \
"" \
"Web interface: http://127.0.0.1:8006" \
"RDP available: port 3389" \
"" \
"To connect: omarchy-windows-vm launch" \
"To stop: omarchy-windows-vm stop"
else
echo "Windows VM is stopped (status: $CONTAINER_STATUS)"
echo "To start: omarchy-windows-vm launch"
fi
}
show_usage() {
echo "Usage: omarchy-windows-vm [command] [options]"
echo ""
echo "Commands:"
echo " install Install and configure Windows VM"
echo " remove Remove Windows VM and optionally its data"
echo " launch [options] Start Windows VM (if needed) and connect via RDP"
echo " Options:"
echo " --keep-alive, -k Keep VM running after RDP closes"
echo " stop Stop the running Windows VM"
echo " status Show current VM status"
echo " help Show this help message"
echo ""
echo "Examples:"
echo " omarchy-windows-vm install # Set up Windows VM for first time"
echo " omarchy-windows-vm launch # Connect to VM (auto-stop on exit)"
echo " omarchy-windows-vm launch -k # Connect to VM (keep running)"
echo " omarchy-windows-vm stop # Shut down the VM"
}
# Main command dispatcher
case "$1" in
install)
install_windows
;;
remove)
remove_windows
;;
launch|start)
launch_windows "$2"
;;
stop|down)
stop_windows
;;
status)
status_windows
;;
help|--help|-h|"")
show_usage
;;
*)
echo "Unknown command: $1" >&2
echo "" >&2
show_usage >&2
exit 1
;;
esac

View File

@@ -16,6 +16,6 @@ decorations = "None"
[keyboard] [keyboard]
bindings = [ bindings = [
{ key = "F11", action = "ToggleFullscreen" }, { key = "Insert", mods = "Shift", action = "Paste" },
{ key = "Insert", mods = "Shift", action = "Paste" } { key = "Insert", mods = "Control", action = "Copy" }
] ]

View File

@@ -1,3 +1,5 @@
--ozone-platform=wayland --ozone-platform=wayland
--ozone-platform-hint=wayland --ozone-platform-hint=wayland
--enable-features=TouchpadOverscrollHistoryNavigation --enable-features=TouchpadOverscrollHistoryNavigation
# Chromium crash workaround for Wayland color management on Hyprland - see https://github.com/hyprwm/Hyprland/issues/11957
--disable-features=WaylandWpColorManagerV1

View File

@@ -22,7 +22,7 @@ presets = "cpu:1:default,proc:0:default cpu:0:default,mem:0:default,net:0:defaul
#* Set to True to enable "h,j,k,l,g,G" keys for directional control in lists. #* Set to True to enable "h,j,k,l,g,G" keys for directional control in lists.
#* Conflicting keys for h:"help" and k:"kill" is accessible while holding shift. #* Conflicting keys for h:"help" and k:"kill" is accessible while holding shift.
vim_keys = False vim_keys = True
#* Rounded corners on boxes, is ignored if TTY mode is ON. #* Rounded corners on boxes, is ignored if TTY mode is ON.
rounded_corners = True rounded_corners = True

View File

@@ -2,3 +2,5 @@
--ozone-platform-hint=wayland --ozone-platform-hint=wayland
--enable-features=TouchpadOverscrollHistoryNavigation --enable-features=TouchpadOverscrollHistoryNavigation
--load-extension=~/.local/share/omarchy/default/chromium/extensions/copy-url --load-extension=~/.local/share/omarchy/default/chromium/extensions/copy-url
# Chromium crash workaround for Wayland color management on Hyprland - see https://github.com/hyprwm/Hyprland/issues/11957
--disable-features=WaylandWpColorManagerV1

View File

@@ -0,0 +1 @@
async = false

View File

@@ -0,0 +1,3 @@
show_actions = false
only_search_title = true
history = false

View File

@@ -20,8 +20,8 @@ cursor-style-blink = false
shell-integration-features = no-cursor shell-integration-features = no-cursor
# Keyboard bindings # Keyboard bindings
keybind = f11=toggle_fullscreen
keybind = shift+insert=paste_from_clipboard keybind = shift+insert=paste_from_clipboard
keybind = control+insert=copy_to_clipboard
# SSH session terminfo # SSH session terminfo
shell-integration-features = ssh-env shell-integration-features = ssh-env

View File

@@ -3,27 +3,27 @@ $terminal = uwsm-app -- $TERMINAL
$browser = omarchy-launch-browser $browser = omarchy-launch-browser
bindd = SUPER, RETURN, Terminal, exec, $terminal --working-directory="$(omarchy-cmd-terminal-cwd)" bindd = SUPER, RETURN, Terminal, exec, $terminal --working-directory="$(omarchy-cmd-terminal-cwd)"
bindd = SUPER, F, File manager, exec, uwsm-app -- nautilus --new-window bindd = SUPER SHIFT, F, File manager, exec, uwsm-app -- nautilus --new-window
bindd = SUPER, B, Browser, exec, $browser bindd = SUPER SHIFT, B, Browser, exec, $browser
bindd = SUPER SHIFT, B, Browser (private), exec, $browser --private bindd = SUPER SHIFT ALT, B, Browser (private), exec, $browser --private
bindd = SUPER, M, Music, exec, omarchy-launch-or-focus spotify bindd = SUPER SHIFT, M, Music, exec, omarchy-launch-or-focus spotify
bindd = SUPER, N, Editor, exec, omarchy-launch-editor bindd = SUPER SHIFT, N, Editor, exec, omarchy-launch-editor
bindd = SUPER, T, Activity, exec, $terminal -e btop bindd = SUPER SHIFT, T, Activity, exec, $terminal -e btop
bindd = SUPER, D, Docker, exec, $terminal -e lazydocker bindd = SUPER SHIFT, D, Docker, exec, $terminal -e lazydocker
bindd = SUPER, 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, 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"
bindd = SUPER, SLASH, Passwords, exec, uwsm-app -- 1password bindd = SUPER SHIFT, SLASH, Passwords, exec, uwsm-app -- 1password
# If your web app url contains #, type it as ## to prevent hyprland from treating it as a comment # If your web app url contains #, type it as ## to prevent hyperland treat it as comments
bindd = SUPER, A, ChatGPT, exec, omarchy-launch-webapp "https://chatgpt.com" bindd = SUPER SHIFT, A, ChatGPT, exec, omarchy-launch-webapp "https://chatgpt.com"
bindd = SUPER SHIFT, 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, 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, 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, Y, YouTube, exec, omarchy-launch-or-focus-webapp YouTube "https://youtube.com/" bindd = SUPER SHIFT, Y, YouTube, exec, omarchy-launch-webapp "https://youtube.com/"
bindd = SUPER SHIFT, G, WhatsApp, exec, omarchy-launch-or-focus-webapp WhatsApp "https://web.whatsapp.com/" bindd = SUPER SHIFT ALT, G, WhatsApp, exec, omarchy-launch-or-focus-webapp WhatsApp "https://web.whatsapp.com/"
bindd = SUPER ALT, G, Google Messages, exec, omarchy-launch-or-focus-webapp "Google Messages" "https://messages.google.com/web/conversations" bindd = SUPER SHIFT CTRL, G, Google Messages, exec, omarchy-launch-or-focus-webapp "Google Messages" "https://messages.google.com/web/conversations"
bindd = SUPER, X, X, exec, omarchy-launch-webapp "https://x.com/" bindd = SUPER SHIFT, X, X, exec, omarchy-launch-webapp "https://x.com/"
bindd = SUPER SHIFT, X, X Post, exec, omarchy-launch-webapp "https://x.com/compose/post" bindd = SUPER SHIFT ALT, X, X Post, exec, omarchy-launch-webapp "https://x.com/compose/post"
# Overwrite existing bindings, like putting Omarchy Menu on Super + Space # Overwrite existing bindings, like putting Omarchy Menu on Super + Space
# unbind = SUPER, SPACE # unbind = SUPER, SPACE

View File

@@ -3,7 +3,8 @@
# Use defaults Omarchy defaults (but don't edit these directly!) # Use defaults Omarchy defaults (but don't edit these directly!)
source = ~/.local/share/omarchy/default/hypr/autostart.conf source = ~/.local/share/omarchy/default/hypr/autostart.conf
source = ~/.local/share/omarchy/default/hypr/bindings/media.conf source = ~/.local/share/omarchy/default/hypr/bindings/media.conf
source = ~/.local/share/omarchy/default/hypr/bindings/tiling.conf source = ~/.local/share/omarchy/default/hypr/bindings/clipboard.conf
source = ~/.local/share/omarchy/default/hypr/bindings/tiling-v2.conf
source = ~/.local/share/omarchy/default/hypr/bindings/utilities.conf source = ~/.local/share/omarchy/default/hypr/bindings/utilities.conf
source = ~/.local/share/omarchy/default/hypr/envs.conf source = ~/.local/share/omarchy/default/hypr/envs.conf
source = ~/.local/share/omarchy/default/hypr/looknfeel.conf source = ~/.local/share/omarchy/default/hypr/looknfeel.conf
@@ -18,3 +19,6 @@ source = ~/.config/hypr/bindings.conf
source = ~/.config/hypr/envs.conf source = ~/.config/hypr/envs.conf
source = ~/.config/hypr/looknfeel.conf source = ~/.config/hypr/looknfeel.conf
source = ~/.config/hypr/autostart.conf source = ~/.config/hypr/autostart.conf
# Add any other personal Hyprland configuration below
# windowrule = workspace 5, class:qemu

View File

@@ -13,7 +13,7 @@ animations {
input-field { input-field {
monitor = monitor =
size = 600, 100 size = 650, 100
position = 0, 0 position = 0, 0
halign = center halign = center
valign = center valign = center
@@ -22,12 +22,12 @@ input-field {
outer_color = $outer_color outer_color = $outer_color
outline_thickness = 4 outline_thickness = 4
font_family = CaskaydiaMono Nerd Font font_family = CaskaydiaMono Nerd Font Propo
font_color = $font_color font_color = $font_color
placeholder_text = Enter Password 󰈷 placeholder_text = Enter Password 󰈷
check_color = $check_color check_color = $check_color
fail_text = <i>$PAMFAIL ($ATTEMPTS)</i> fail_text = <i>$FAIL ($ATTEMPTS)</i>
rounding = 0 rounding = 0
shadow_passes = 0 shadow_passes = 0

View File

@@ -4,3 +4,9 @@ profile {
time = 07:00 time = 07:00
identity = true identity = true
} }
# Enable auto switch to nightlight:
# profile {
# time = 20:00
# temperature = 4000
# }

View File

@@ -1,7 +1,6 @@
# See https://wiki.hyprland.org/Configuring/Monitors/ # See https://wiki.hyprland.org/Configuring/Monitors/
# List current monitors and resolutions possible: hyprctl monitors # List current monitors and resolutions possible: hyprctl monitors
# Format: monitor = [port], resolution, position, scale # Format: monitor = [port], resolution, position, scale
# You must relaunch Hyprland after changing any envs (use Super+Esc, then Relaunch)
# Optimized for retina-class 2x displays, like 13" 2.8K, 27" 5K, 32" 6K. # Optimized for retina-class 2x displays, like 13" 2.8K, 27" 5K, 32" 6K.
env = GDK_SCALE,2 env = GDK_SCALE,2

View File

@@ -13,7 +13,8 @@ show_window_resize_notification no
confirm_os_window_close 0 confirm_os_window_close 0
# Keybindings # Keybindings
map F11 toggle_fullscreen map ctrl+insert copy_to_clipboard
map shift+insert paste_from_clipboard
# Allow remote access # Allow remote access
single_instance yes single_instance yes

View File

@@ -1,10 +0,0 @@
{
"extras": [
"lazyvim.plugins.extras.editor.neo-tree"
],
"install_version": 8,
"news": {
"NEWS.md": "10960"
},
"version": 8
}

View File

@@ -1,56 +0,0 @@
return {
-- Load all theme plugins but don't apply them
-- This ensures all colorschemes are available for hot-reloading
{
"ribru17/bamboo.nvim",
lazy = true,
priority = 1000,
},
{
"catppuccin/nvim",
name = "catppuccin",
lazy = true,
priority = 1000,
},
{
"sainnhe/everforest",
lazy = true,
priority = 1000,
},
{
"ellisonleao/gruvbox.nvim",
lazy = true,
priority = 1000,
},
{
"rebelot/kanagawa.nvim",
lazy = true,
priority = 1000,
},
{
"tahayvr/matteblack.nvim",
lazy = true,
priority = 1000,
},
{
"loctvl842/monokai-pro.nvim",
lazy = true,
priority = 1000,
},
{
"shaunsingh/nord.nvim",
lazy = true,
priority = 1000,
},
{
"rose-pine/neovim",
name = "rose-pine",
lazy = true,
priority = 1000,
},
{
"folke/tokyonight.nvim",
lazy = true,
priority = 1000,
},
}

View File

@@ -1,45 +0,0 @@
return {
{
name = "theme-hotreload",
dir = vim.fn.stdpath("config"),
lazy = false,
priority = 1000,
config = function()
local transparency_file = vim.fn.stdpath("config") .. "/plugin/after/transparency.lua"
vim.api.nvim_create_autocmd("User", {
pattern = "LazyReload",
callback = function()
package.loaded["plugins.theme"] = nil
vim.schedule(function()
local ok, theme_spec = pcall(require, "plugins.theme")
if not ok then
return
end
for _, spec in ipairs(theme_spec) do
if spec[1] == "LazyVim/LazyVim" and spec.opts and spec.opts.colorscheme then
local colorscheme = spec.opts.colorscheme
require("lazy.core.loader").colorscheme(colorscheme)
vim.defer_fn(function()
pcall(vim.cmd.colorscheme, colorscheme)
if vim.fn.filereadable(transparency_file) == 1 then
vim.defer_fn(function()
vim.cmd.source(transparency_file)
end, 5)
end
end, 5)
break
end
end
end)
end,
})
end,
},
}

View File

@@ -1,8 +0,0 @@
return {
"folke/snacks.nvim",
opts = {
scroll = {
enabled = false, -- Disable scrolling animations
},
},
}

View File

@@ -1,45 +0,0 @@
-- transparent background
vim.api.nvim_set_hl(0, "Normal", { bg = "none" })
vim.api.nvim_set_hl(0, "NormalFloat", { bg = "none" })
vim.api.nvim_set_hl(0, "FloatBorder", { bg = "none" })
vim.api.nvim_set_hl(0, "Pmenu", { bg = "none" })
vim.api.nvim_set_hl(0, "Terminal", { bg = "none" })
vim.api.nvim_set_hl(0, "EndOfBuffer", { bg = "none" })
vim.api.nvim_set_hl(0, "FoldColumn", { bg = "none" })
vim.api.nvim_set_hl(0, "Folded", { bg = "none" })
vim.api.nvim_set_hl(0, "SignColumn", { bg = "none" })
vim.api.nvim_set_hl(0, "NormalNC", { bg = "none" })
vim.api.nvim_set_hl(0, "WhichKeyFloat", { bg = "none" })
vim.api.nvim_set_hl(0, "TelescopeBorder", { bg = "none" })
vim.api.nvim_set_hl(0, "TelescopeNormal", { bg = "none" })
vim.api.nvim_set_hl(0, "TelescopePromptBorder", { bg = "none" })
vim.api.nvim_set_hl(0, "TelescopePromptTitle", { bg = "none" })
-- transparent background for neotree
vim.api.nvim_set_hl(0, "NeoTreeNormal", { bg = "none" })
vim.api.nvim_set_hl(0, "NeoTreeNormalNC", { bg = "none" })
vim.api.nvim_set_hl(0, "NeoTreeVertSplit", { bg = "none" })
vim.api.nvim_set_hl(0, "NeoTreeWinSeparator", { bg = "none" })
vim.api.nvim_set_hl(0, "NeoTreeEndOfBuffer", { bg = "none" })
-- transparent background for nvim-tree
vim.api.nvim_set_hl(0, "NvimTreeNormal", { bg = "none" })
vim.api.nvim_set_hl(0, "NvimTreeVertSplit", { bg = "none" })
vim.api.nvim_set_hl(0, "NvimTreeEndOfBuffer", { bg = "none" })
-- transparent notify background
vim.api.nvim_set_hl(0, "NotifyINFOBody", { bg = "none" })
vim.api.nvim_set_hl(0, "NotifyERRORBody", { bg = "none" })
vim.api.nvim_set_hl(0, "NotifyWARNBody", { bg = "none" })
vim.api.nvim_set_hl(0, "NotifyTRACEBody", { bg = "none" })
vim.api.nvim_set_hl(0, "NotifyDEBUGBody", { bg = "none" })
vim.api.nvim_set_hl(0, "NotifyINFOTitle", { bg = "none" })
vim.api.nvim_set_hl(0, "NotifyERRORTitle", { bg = "none" })
vim.api.nvim_set_hl(0, "NotifyWARNTitle", { bg = "none" })
vim.api.nvim_set_hl(0, "NotifyTRACETitle", { bg = "none" })
vim.api.nvim_set_hl(0, "NotifyDEBUGTitle", { bg = "none" })
vim.api.nvim_set_hl(0, "NotifyINFOBorder", { bg = "none" })
vim.api.nvim_set_hl(0, "NotifyERRORBorder", { bg = "none" })
vim.api.nvim_set_hl(0, "NotifyWARNBorder", { bg = "none" })
vim.api.nvim_set_hl(0, "NotifyTRACEBorder", { bg = "none" })
vim.api.nvim_set_hl(0, "NotifyDEBUGBorder", { bg = "none" })

View File

@@ -0,0 +1,7 @@
#!/bin/bash
# This hook is called with the snake-cased name of the font that has just been set.
# To put it into use, remove .sample from the name.
# Example: Show the name of the theme that was just set.
# notify-send "New font" "Your new font is $1"

View File

@@ -0,0 +1,7 @@
#!/bin/bash
# This hook is called after an Omarchy system update has been performed.
# To put it into use, remove .sample from the name.
# Example: Show notification after the system has been updated.
# notify-send "Update Performed" "Your system is now up to date"

View File

@@ -0,0 +1,7 @@
#!/bin/bash
# This hook is called with the snake-cased name of the theme that has just been set.
# To put it into use, remove .sample from the name.
# Example: Show the name of the theme that was just set.
# notify-send "New theme" "Your new theme is $1"

View File

@@ -6,3 +6,4 @@ After=graphical-session.target
Type=oneshot Type=oneshot
ExecStart=%h/.local/share/omarchy/bin/omarchy-battery-monitor ExecStart=%h/.local/share/omarchy/bin/omarchy-battery-monitor
Environment=DISPLAY=:0 Environment=DISPLAY=:0
LogLevelMax=warning

View File

@@ -1,4 +1,4 @@
# Changes require a relaunch of Hyprland to take effect. # Changes require a restart to take effect.
export TERMINAL=alacritty export TERMINAL=alacritty
export EDITOR=nvim export EDITOR=nvim

View File

@@ -1,4 +1,4 @@
# Changes require a relaunch of Hyprland to take effect. # Changes require a restart to take effect.
# Ensure Omarchy bins are in the path # Ensure Omarchy bins are in the path
export OMARCHY_PATH=$HOME/.local/share/omarchy export OMARCHY_PATH=$HOME/.local/share/omarchy

View File

@@ -1,100 +1,145 @@
close_when_open = true force_keyboard_focus = true # forces keyboard forcus to stay in Walker
theme = "omarchy-default" close_when_open = true # close walker when invoking while already opened
theme_base = [] selection_wrap = true # wrap list if at bottom or top
theme_location = ["~/.local/share/omarchy/default/walker/themes/"] click_to_close = true # closes walker if clicking outside of the main content area
hotreload_theme = true global_argument_delimiter = "#" # query: firefox#https://benz.dev => part after delimiter will be ignored when querying. this should be the same as in the elephant config
force_keyboard_focus = true exact_search_prefix = "'" # disable fuzzy searching
timeout = 60 theme = "omarchy-default" # theme to use
disable_mouse = false # disable mouse (on input and list only)
additional_theme_location = "~/.local/share/omarchy/default/walker/themes/"
[keys.ai] [shell]
run_last_response = ["ctrl e"] anchor_top = true
anchor_bottom = true
anchor_left = true
anchor_right = true
[list] [placeholders]
max_entries = 200 "default" = { input = " Search...", list = "No Results" } # placeholders for input and empty list, key is the providers name, so f.e. "desktopapplications" or "menus:other"
cycle = true
[search] [keybinds]
placeholder = " Search..." close = ["Escape"]
next = ["Down"]
previous = ["Up"]
toggle_exact = ["ctrl e"]
resume_last_query = ["ctrl r"]
quick_activate = []
[builtins.hyprland_keybinds] [providers]
path = "~/.config/hypr/hyprland.conf" default = [
hidden = true "desktopapplications",
"menus",
"websearch",
] # providers to be queried by default
empty = ["desktopapplications"] # providers to be queried when query is empty
max_results = 50 # global max results
[builtins.applications] [providers.sets] # define your own defaults/empty sets of providers
launch_prefix = "uwsm-app -- " [providers.max_results_provider] # define max results per provider in here
placeholder = " Search..."
prioritize_new = false
context_aware = false
show_sub_when_single = false
history = false
icon = ""
hidden = true
[builtins.applications.actions] [[providers.prefixes]]
enabled = false prefix = "/"
hide_category = true provider = "providerlist"
[builtins.bookmarks] [[providers.prefixes]]
hidden = true
[[builtins.bookmarks.entries]]
label = "Omarchy - Github"
url = "https://github.com/basecamp/omarchy"
keywords = ["omarchy", "github"]
[[builtins.bookmarks.entries]]
label = "Omarchy Manual"
url = "https://manuals.omamix.org/2/the-omarchy-manual"
keywords = ["omarchy"]
[builtins.calc]
name = "Calculator"
icon = ""
min_chars = 3
prefix = "="
[builtins.windows]
switcher_only = true
hidden = true
[builtins.clipboard]
hidden = true
[builtins.commands]
hidden = true
[builtins.custom_commands]
hidden = true
[builtins.emojis]
name = "Emojis"
icon = ""
prefix = ":"
[builtins.symbols]
after_copy = ""
hidden = true
[builtins.finder]
use_fd = true
cmd_alt = "xdg-open $(dirname ~/%RESULT%)"
icon = "file"
name = "Finder"
preview_images = true
hidden = false
prefix = "." prefix = "."
provider = "files"
[builtins.runner] [[providers.prefixes]]
shell_config = "" prefix = ":"
switcher_only = true provider = "symbols"
hidden = true
[builtins.ssh] [[providers.prefixes]]
hidden = true prefix = "="
provider = "calc"
[builtins.websearch] [[providers.prefixes]]
switcher_only = true prefix = "@"
hidden = true provider = "websearch"
[builtins.translation] [[providers.prefixes]]
hidden = true prefix = "$"
provider = "clipboard"
[providers.actions] # This will be MERGED/OVEWRITTEN with what the user specifies
dmenu = [{ action = "select", default = true, bind = "Return" }]
providerlist = [
{ action = "activate", default = true, bind = "Return", after = "ClearReload" },
]
bluetooth = [
{ action = "find", global = true, bind = "ctrl f", after = "AsyncClearReload" },
{ action = "trust", bind = "ctrl t", after = "AsyncReload" },
{ action = "untrust", bind = "ctrl t", after = "AsyncReload" },
{ action = "pair", bind = "Return", after = "AsyncReload" },
{ action = "remove", bind = "ctrl d", after = "AsyncReload" },
{ action = "connect", bind = "Return", after = "AsyncReload" },
{ action = "disconnect", bind = "Return", after = "AsyncReload" },
]
archlinuxpkgs = [
{ action = "install", bind = "Return", default = true },
{ action = "remove", bind = "Return" },
]
calc = [
{ action = "copy", default = true, bind = "Return" },
{ action = "delete", bind = "ctrl d", after = "AsyncReload" },
{ action = "save", bind = "ctrl s", after = "AsyncClearReload" },
]
websearch = [
{ action = "search", default = true, bind = "Return" },
{ action = "erase_history", label = "clear hist", bind = "ctrl h", after = "Reload" },
]
desktopapplications = [
{ action = "start", default = true, bind = "Return" },
{ action = "start:keep", label = "open+next", bind = "shift Return", after = "KeepOpen" },
{ action = "erase_history", label = "clear hist", bind = "ctrl h", after = "AsyncReload" },
{ action = "pin", bind = "ctrl p", after = "AsyncReload" },
{ action = "unpin", bind = "ctrl p", after = "AsyncReload" },
{ action = "pinup", bind = "ctrl n", after = "AsyncReload" },
{ action = "pindown", bind = "ctrl m", after = "AsyncReload" },
]
files = [
{ action = "open", default = true, bind = "Return" },
{ action = "opendir", label = "open dir", bind = "ctrl Return" },
{ action = "copypath", label = "copy path", bind = "ctrl shift c" },
{ action = "copyfile", label = "copy file", bind = "ctrl c" },
]
todo = [
{ action = "save", default = true, bind = "Return", after = "ClearReload" },
{ action = "delete", bind = "ctrl d", after = "ClearReload" },
{ action = "active", bind = "Return", after = "ClearReload" },
{ action = "inactive", bind = "Return", after = "ClearReload" },
{ action = "done", bind = "ctrl f", after = "ClearReload" },
{ action = "clear", bind = "ctrl x", after = "ClearReload", global = true },
]
runner = [
{ action = "run", default = true, bind = "Return" },
{ action = "runterminal", label = "run in terminal", bind = "shift Return" },
{ action = "erase_history", label = "clear hist", bind = "ctrl h", after = "Reload" },
]
symbols = [
{ action = "run_cmd", label = "select", default = true, bind = "Return" },
{ action = "erase_history", label = "clear hist", bind = "ctrl h", after = "Reload" },
]
unicode = [
{ action = "run_cmd", label = "select", default = true, bind = "Return" },
{ action = "erase_history", label = "clear hist", bind = "ctrl h", after = "Reload" },
]
clipboard = [
{ action = "copy", default = true, bind = "Return" },
{ action = "remove", bind = "ctrl d", after = "ClearReload" },
{ action = "remove_all", global = true, label = "clear", bind = "ctrl shift d", after = "ClearReload" },
{ action = "toggle_images", global = true, label = "toggle images", bind = "ctrl i", after = "ClearReload" },
{ action = "edit", bind = "ctrl o" },
]

View File

@@ -61,7 +61,7 @@
"format": "{:L%A %H:%M}", "format": "{:L%A %H:%M}",
"format-alt": "{:L%d %B W%V %Y}", "format-alt": "{:L%d %B W%V %Y}",
"tooltip": false, "tooltip": false,
"on-click-right": "omarchy-cmd-tzupdate" "on-click-right": "omarchy-launch-floating-terminal-with-presentation omarchy-tz-select"
}, },
"network": { "network": {
"format-icons": ["󰤯", "󰤟", "󰤢", "󰤥", "󰤨"], "format-icons": ["󰤯", "󰤟", "󰤢", "󰤥", "󰤨"],
@@ -122,7 +122,7 @@
"modules": ["custom/expand-icon", "tray"] "modules": ["custom/expand-icon", "tray"]
}, },
"custom/expand-icon": { "custom/expand-icon": {
"format": " ", "format": "",
"tooltip": false "tooltip": false
}, },
"custom/screenrecording-indicator": { "custom/screenrecording-indicator": {
@@ -133,6 +133,6 @@
}, },
"tray": { "tray": {
"icon-size": 12, "icon-size": 12,
"spacing": 12 "spacing": 17
} }
} }

View File

@@ -7,7 +7,7 @@
border: none; border: none;
border-radius: 0; border-radius: 0;
min-height: 0; min-height: 0;
font-family: CaskaydiaMono Nerd Font; font-family: 'CaskaydiaMono Nerd Font';
font-size: 12px; font-size: 12px;
} }
@@ -30,11 +30,8 @@
opacity: 0.5; opacity: 0.5;
} }
#tray,
#cpu, #cpu,
#battery, #battery,
#network,
#bluetooth,
#pulseaudio, #pulseaudio,
#custom-omarchy, #custom-omarchy,
#custom-screenrecording-indicator, #custom-screenrecording-indicator,
@@ -43,8 +40,20 @@
margin: 0 7.5px; margin: 0 7.5px;
} }
#tray {
margin-right: 16px;
}
#bluetooth {
margin-right: 17px;
}
#network {
margin-right: 13px;
}
#custom-expand-icon { #custom-expand-icon {
margin-right: 7px; margin-right: 20px;
} }
tooltip { tooltip {

View File

@@ -12,3 +12,4 @@ source = ~/.local/share/omarchy/default/hypr/apps/steam.conf
source = ~/.local/share/omarchy/default/hypr/apps/system.conf source = ~/.local/share/omarchy/default/hypr/apps/system.conf
source = ~/.local/share/omarchy/default/hypr/apps/terminals.conf source = ~/.local/share/omarchy/default/hypr/apps/terminals.conf
source = ~/.local/share/omarchy/default/hypr/apps/walker.conf source = ~/.local/share/omarchy/default/hypr/apps/walker.conf
source = ~/.local/share/omarchy/default/hypr/apps/webcam-overlay.conf

View File

@@ -1,5 +1,5 @@
# Browser types # Browser types
windowrule = tag +chromium-based-browser, class:([cC]hrom(e|ium)|[bB]rave-browser|Microsoft-edge|Vivaldi-stable|helium) windowrule = tag +chromium-based-browser, class:((google-)?[cC]hrom(e|ium)|[bB]rave-browser|Microsoft-edge|Vivaldi-stable|helium)
windowrule = tag +firefox-based-browser, class:([fF]irefox|zen|librewolf) windowrule = tag +firefox-based-browser, 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

View File

@@ -0,0 +1,6 @@
# Webcam overlay for screen recording
windowrule = float, title:WebcamOverlay
windowrule = pin, title:WebcamOverlay
windowrule = noinitialfocus, title:WebcamOverlay
windowrule = nodim, 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

View File

@@ -1,10 +1,10 @@
exec-once = uwsm app -- hypridle exec-once = uwsm-app -- hypridle
exec-once = uwsm app -- mako exec-once = uwsm-app -- mako
exec-once = uwsm app -- waybar exec-once = uwsm-app -- waybar
exec-once = uwsm app -- fcitx5 exec-once = uwsm-app -- fcitx5
exec-once = uwsm app -- swaybg -i ~/.config/omarchy/current/background -m fill exec-once = uwsm-app -- swaybg -i ~/.config/omarchy/current/background -m fill
exec-once = uwsm app -- swayosd-server exec-once = uwsm-app -- swayosd-server
exec-once = uwsm app -- walker --gapplication-service
exec-once = /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 exec-once = /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
exec-once = wl-clip-persist --clipboard regular --all-mime-type-regex '^(?!x-kde-passwordManagerHint).+'
exec-once = omarchy-cmd-first-run exec-once = omarchy-cmd-first-run
exec-once = uwsm-app -- elephant
exec-once = uwsm-app -- walker --gapplication-service

View File

@@ -0,0 +1,5 @@
# Copy / Paste
bindd = SUPER, C, Copy, sendshortcut, CTRL, Insert,
bindd = SUPER, V, Paste, sendshortcut, SHIFT, Insert,
bindd = SUPER, X, Cut, sendshortcut, CTRL, X,
bindd = SUPER CTRL, V, Clipboard, exec, omarchy-launch-walker -m clipboard

View File

@@ -0,0 +1,93 @@
# Close windows
bindd = SUPER, W, Close active window, killactive,
bindd = CTRL ALT, DELETE, Close all Windows, exec, omarchy-cmd-close-all-windows
# Control tiling
bindd = SUPER, J, Toggle split, togglesplit, # dwindle
bindd = SUPER, P, Pseudo window, pseudo, # dwindle
bindd = SUPER, T, Toggle floating, togglefloating,
bindd = SUPER, F, Force full screen, fullscreen, 0
bindd = SUPER CTRL, F, Tiled full screen, fullscreenstate, 0 2
bindd = SUPER ALT, F, Full width, fullscreen, 1
# Move focus with SUPER + arrow keys
bindd = SUPER, LEFT, Move focus left, movefocus, l
bindd = SUPER, RIGHT, Move focus right, movefocus, r
bindd = SUPER, UP, Move focus up, movefocus, u
bindd = SUPER, DOWN, Move focus down, movefocus, d
# Switch workspaces with SUPER + [0-9]
bindd = SUPER, code:10, Switch to workspace 1, workspace, 1
bindd = SUPER, code:11, Switch to workspace 2, workspace, 2
bindd = SUPER, code:12, Switch to workspace 3, workspace, 3
bindd = SUPER, code:13, Switch to workspace 4, workspace, 4
bindd = SUPER, code:14, Switch to workspace 5, workspace, 5
bindd = SUPER, code:15, Switch to workspace 6, workspace, 6
bindd = SUPER, code:16, Switch to workspace 7, workspace, 7
bindd = SUPER, code:17, Switch to workspace 8, workspace, 8
bindd = SUPER, code:18, Switch to workspace 9, workspace, 9
bindd = SUPER, code:19, Switch to workspace 10, workspace, 10
# Move active window to a workspace with SUPER + SHIFT + [0-9]
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:12, Move window to workspace 3, movetoworkspace, 3
bindd = SUPER SHIFT, code:13, Move window to workspace 4, movetoworkspace, 4
bindd = SUPER SHIFT, code:14, Move window to workspace 5, movetoworkspace, 5
bindd = SUPER SHIFT, code:15, Move window to workspace 6, movetoworkspace, 6
bindd = SUPER SHIFT, code:16, Move window to workspace 7, movetoworkspace, 7
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:19, Move window to workspace 10, movetoworkspace, 10
# TAB between workspaces
bindd = SUPER, TAB, Next workspace, workspace, e+1
bindd = SUPER SHIFT, TAB, Previous workspace, workspace, e-1
bindd = SUPER CTRL, TAB, Former workspace, workspace, previous
# 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, RIGHT, Swap window to the right, swapwindow, r
bindd = SUPER SHIFT, UP, Swap window up, swapwindow, u
bindd = SUPER SHIFT, DOWN, Swap window down, swapwindow, d
# Cycle through applications on active workspace
bindd = ALT, TAB, Cycle to next window, cyclenext
bindd = ALT SHIFT, TAB, Cycle to prev window, cyclenext, prev
bindd = ALT, TAB, Reveal active window on top, bringactivetotop
bindd = ALT SHIFT, TAB, Reveal active window on top, bringactivetotop
# Resize active window
bindd = SUPER, code:20, Expand window left, resizeactive, -100 0 # - key
bindd = SUPER, code:21, Shrink window left, resizeactive, 100 0 # = key
bindd = SUPER SHIFT, code:20, Shrink window up, resizeactive, 0 -100
bindd = SUPER SHIFT, code:21, Expand window down, resizeactive, 0 100
# Scroll through existing workspaces with SUPER + scroll
bindd = SUPER, mouse_down, Scroll active workspace forward, workspace, e+1
bindd = SUPER, mouse_up, Scroll active workspace backward, workspace, e-1
# Move/resize windows with mainMod + LMB/RMB and dragging
bindmd = SUPER, mouse:272, Move window, movewindow
bindmd = SUPER, mouse:273, Resize window, resizewindow
# Toggle groups
bindd = SUPER, G, Toggle window grouping, togglegroup
bindd = SUPER ALT, G, Move active window out of group, moveoutofgroup
# Join groups
bindd = SUPER ALT, LEFT, Move window to group on left, moveintogroup, l
bindd = SUPER ALT, RIGHT, Move window to group on right, moveintogroup, r
bindd = SUPER ALT, UP, Move window to group on top, moveintogroup, u
bindd = SUPER ALT, DOWN, Move window to group on bottom, moveintogroup, d
# Navigate a single set of grouped windows
bindd = SUPER ALT, TAB, Next window in group, changegroupactive, f
bindd = SUPER ALT SHIFT, TAB, Previous window in group, changegroupactive, b
# Activate window in a group by number
bindd = SUPER ALT, 1, Switch to group window 1, changegroupactive, 1
bindd = SUPER ALT, 2, Switch to group window 2, changegroupactive, 2
bindd = SUPER ALT, 3, Switch to group window 3, changegroupactive, 3
bindd = SUPER ALT, 4, Switch to group window 4, changegroupactive, 4
bindd = SUPER ALT, 5, Switch to group window 5, changegroupactive, 5

View File

@@ -1,3 +1,6 @@
# This is now a deprecated file meant for those who did not wish to learn the latest Omarchy hotkeys.
# Do not make changes here, but bring them to tiling-v2.conf instead.
# Close windows # Close windows
bindd = SUPER, W, Close active window, killactive, bindd = SUPER, W, Close active window, killactive,
bindd = CTRL ALT, DELETE, Close all Windows, exec, omarchy-cmd-close-all-windows bindd = CTRL ALT, DELETE, Close all Windows, exec, omarchy-cmd-close-all-windows
@@ -69,24 +72,3 @@ bindd = SUPER, MOUSE_UP, Scroll active workspace backward, workspace, e-1
# Move/resize windows with mainMod + LMB/RMB and dragging # Move/resize windows with mainMod + LMB/RMB and dragging
bindmd = SUPER, mouse:272, Move window, movewindow bindmd = SUPER, mouse:272, Move window, movewindow
bindmd = SUPER, mouse:273, Resize window, resizewindow bindmd = SUPER, mouse:273, Resize window, resizewindow
# Toggle groups
bindd = SUPER ALT, RETURN, Toggle window grouping, togglegroup
bindd = SUPER ALT, BACKSPACE, Move active window out of group, moveoutofgroup
# Join groups
bindd = SUPER ALT, LEFT, Move window to group on left, moveintogroup, l
bindd = SUPER ALT, RIGHT, Move window to group on right, moveintogroup, r
bindd = SUPER ALT, UP, Move window to group on top, moveintogroup, u
bindd = SUPER ALT, DOWN, Move window to group on bottom, moveintogroup, d
# Navigate a single set of grouped windows
bindd = SUPER ALT, TAB, Next window in group, changegroupactive, f
bindd = SUPER ALT SHIFT, TAB, Previous window in group, changegroupactive, b
# Activate window in a group by number
bindd = SUPER ALT, 1, Switch to group window 1, changegroupactive, 1
bindd = SUPER ALT, 2, Switch to group window 2, changegroupactive, 2
bindd = SUPER ALT, 3, Switch to group window 3, changegroupactive, 3
bindd = SUPER ALT, 4, Switch to group window 4, changegroupactive, 4
bindd = SUPER ALT, 5, Switch to group window 5, changegroupactive, 5

View File

@@ -1,6 +1,6 @@
# Menus # Menus
bindd = SUPER, SPACE, Launch apps, exec, walker -p "Start…" bindd = SUPER, SPACE, Launch apps, exec, omarchy-launch-walker
bindd = SUPER CTRL, E, Emoji picker, exec, walker -m Emojis bindd = SUPER CTRL, E, Emoji picker, exec, omarchy-launch-walker -m symbols
bindd = SUPER ALT, SPACE, Omarchy menu, exec, omarchy-menu bindd = SUPER ALT, SPACE, Omarchy menu, exec, omarchy-menu
bindd = SUPER, ESCAPE, Power menu, exec, omarchy-menu system bindd = SUPER, ESCAPE, Power menu, exec, omarchy-menu system
bindld = , XF86PowerOff, Power menu, exec, omarchy-menu system bindld = , XF86PowerOff, Power menu, exec, omarchy-menu system
@@ -29,23 +29,11 @@ bindd = CTRL, F1, Apple Display brightness down, exec, omarchy-cmd-apple-display
bindd = CTRL, F2, Apple Display brightness up, exec, omarchy-cmd-apple-display-brightness +5000 bindd = CTRL, F2, Apple Display brightness up, exec, omarchy-cmd-apple-display-brightness +5000
bindd = SHIFT CTRL, F2, Apple Display full brightness, exec, omarchy-cmd-apple-display-brightness +60000 bindd = SHIFT CTRL, F2, Apple Display full brightness, exec, omarchy-cmd-apple-display-brightness +60000
# Screenshots # Captures
bindd = , PRINT, Screenshot of region, exec, omarchy-cmd-screenshot bindd = , PRINT, Screenshot, exec, omarchy-cmd-screenshot
bindd = SHIFT, PRINT, Screenshot of window, exec, omarchy-cmd-screenshot window bindd = SHIFT, PRINT, Screenshot, exec, omarchy-cmd-screenshot smart clipboard
bindd = CTRL, PRINT, Screenshot of display, exec, omarchy-cmd-screenshot output bindd = ALT, PRINT, Screenrecording, exec, omarchy-menu screenrecord
bindd = SUPER, PRINT, Color picking, exec, pkill hyprpicker || hyprpicker -a
# Screen recordings
bindd = ALT, PRINT, Screen record a region, exec, omarchy-cmd-screenrecord region
bindd = ALT SHIFT, PRINT, Screen record a region with audio, exec, omarchy-cmd-screenrecord region audio
bindd = CTRL ALT, PRINT, Screen record display, exec, omarchy-cmd-screenrecord output
bindd = CTRL ALT SHIFT, PRINT, Screen record display with audio, exec, omarchy-cmd-screenrecord output audio
# Color picker
bindd = SUPER, PRINT, Color picker, exec, pkill hyprpicker || hyprpicker -a
# File sharing # File sharing
bindd = CTRL SUPER, S, Share, exec, omarchy-menu share bindd = CTRL SUPER, S, Share, exec, omarchy-menu share
# Copy / Paste
bind = SUPER, C, sendshortcut, CTRL, Insert,
bind = SUPER, V, sendshortcut, SHIFT, Insert,

View File

@@ -39,9 +39,7 @@ decoration {
blur { blur {
enabled = true enabled = true
size = 3 size = 3
passes = 1 passes = 3
vibrancy = 0.1696
} }
} }
@@ -61,18 +59,17 @@ group {
indicator_height = 0 indicator_height = 0
indicator_gap = 5 indicator_gap = 5
height = 22 height = 22
gaps_in = 5 gaps_in = 5
gaps_out = 0 gaps_out = 0
text_color = rgb(ffffff) text_color = rgb(ffffff)
text_color_inactive = rgba(ffffff90) text_color_inactive = rgba(ffffff90)
col.active = rgba(00000040) col.active = rgba(00000040)
col.inactive = rgba(00000020) col.inactive = rgba(00000020)
gradients = true gradients = true
gradient_rounding = 0 gradient_rounding = 0
gradient_round_only_edges = false gradient_round_only_edges = false
} }
} }

View File

@@ -1,13 +1,11 @@
anchor=top-right anchor=top-right
default-timeout=5000 default-timeout=5000
width=420 width=420
height=110
outer-margin=20 outer-margin=20
padding=10,15 padding=10,15
border-size=2 border-size=2
max-icon-size=32 max-icon-size=32
font=sans-serif 14px font=sans-serif 14px
format=<span line_height="1.2"><b>%s</b>\n%b</span>
[app-name=Spotify] [app-name=Spotify]
invisible=1 invisible=1
@@ -26,3 +24,6 @@ on-button-left=exec sh -c 'omarchy-notification-dismiss "Setup Wi-Fi"; omarchy-l
[summary~="Update System"] [summary~="Update System"]
on-button-left=exec sh -c 'omarchy-notification-dismiss "Update System"; omarchy-launch-floating-terminal-with-presentation omarchy-update' on-button-left=exec sh -c 'omarchy-notification-dismiss "Update System"; omarchy-launch-floating-terminal-with-presentation omarchy-update'
[summary~="Learn Keybindings"]
on-button-left=exec sh -c 'omarchy-notification-dismiss "Learn Keybindings"; omarchy-menu-keybindings'

View File

@@ -1,2 +0,0 @@
@import url("file://~/.local/share/omarchy/default/walker/themes/omarchy-default.css");
@import url("file://~/.config/omarchy/current/theme/walker.css");

View File

@@ -1,10 +0,0 @@
[ui.window.box]
width = 150
[ui.window.box.scroll.list]
max_width = 150
min_width = 150
width = 150
[ui.window.box.search]
hide = false

View File

@@ -1,2 +0,0 @@
@import url("file://~/.local/share/omarchy/default/walker/themes/omarchy-default.css");
@import url("file://~/.config/omarchy/current/theme/walker.css");

View File

@@ -1,11 +0,0 @@
[ui.window.box]
width = 250
[ui.window.box.scroll.list]
max_width = 250
min_width = 250
width = 250
max_height = 600
[ui.window.box.search]
hide = false

View File

@@ -1,2 +0,0 @@
@import url("file://~/.local/share/omarchy/default/walker/themes/omarchy-default.css");
@import url("file://~/.config/omarchy/current/theme/walker.css");

View File

@@ -1,48 +0,0 @@
[ui.window.box]
width = 964
min_width = 964
max_width = 964
height = 664
min_height = 664
max_height = 664
[ui.window.box.search]
hide = false
[ui.window.box.scroll]
v_align = "fill"
h_align = "fill"
min_width = 964
width = 964
max_width = 964
min_height = 664
height = 664
max_height = 664
[ui.window.box.scroll.list]
v_align = "fill"
h_align = "fill"
min_width = 900
width = 900
max_width = 900
min_height = 600
height = 600
max_height = 600
[ui.window.box.scroll.list.item]
h_align = "fill"
min_width = 900
width = 900
max_width = 900
[ui.window.box.scroll.list.item.activation_label]
hide = true
[ui.window.box.scroll.list.placeholder]
v_align = "start"
h_align = "fill"
hide = false
min_width = 900
width = 900
max_width = 900

View File

@@ -1,169 +0,0 @@
/* Reset all elements */
#window,
#box,
#search,
#password,
#input,
#prompt,
#clear,
#typeahead,
#list,
child,
scrollbar,
slider,
#item,
#text,
#label,
#sub,
#activationlabel {
all: unset;
}
* {
font-family: monospace;
font-size: 18px;
}
/* Window */
#window {
background: transparent;
color: @text;
}
/* Main box container */
#box {
background: alpha(@base, 0.95);
padding: 20px;
border: 2px solid @border;
border-radius: 0px;
}
/* Search container */
#search {
background: @base;
padding: 10px;
margin-bottom: 0;
}
/* Hide prompt icon */
#prompt {
opacity: 0;
min-width: 0;
margin: 0;
}
/* Hide clear button */
#clear {
opacity: 0;
min-width: 0;
}
/* Input field */
#input {
background: none;
color: @text;
padding: 0;
}
#input placeholder {
opacity: 0.5;
color: @text;
}
/* Hide typeahead */
#typeahead {
opacity: 0;
}
/* List */
#list {
background: transparent;
}
/* List items */
child {
padding: 0px 12px;
background: transparent;
border-radius: 0;
}
child:selected,
child:hover {
background: transparent;
}
/* Item layout */
#item {
padding: 0;
}
#item.active {
font-style: italic;
}
/* Icon */
#icon {
margin-right: 10px;
-gtk-icon-transform: scale(0.7);
}
/* Text */
#text {
color: @text;
padding: 14px 0;
}
#label {
font-weight: normal;
}
/* Selected state */
child:selected #text,
child:selected #label,
child:hover #text,
child:hover #label {
color: @selected-text;
}
/* Hide sub text */
#sub {
opacity: 0;
font-size: 0;
min-height: 0;
}
/* Hide activation label */
#activationlabel {
opacity: 0;
min-width: 0;
}
/* Scrollbar styling */
scrollbar {
opacity: 0;
}
/* Hide spinner */
#spinner {
opacity: 0;
}
/* Hide AI elements */
#aiScroll,
#aiList,
.aiItem {
opacity: 0;
min-height: 0;
}
/* Bar entry (switcher) */
#bar {
opacity: 0;
min-height: 0;
}
.barentry {
opacity: 0;
}
@import url("file://~/.config/omarchy/current/theme/walker.css");

View File

@@ -1,16 +0,0 @@
[ui.window.box]
width = 664
min_width = 664
max_width = 664
height = 396
min_height = 396
max_height = 396
# List constraints are critical - without these, the window shrinks when empty
[ui.window.box.scroll.list]
height = 300
min_height = 300
max_height = 300
[ui.window.box.scroll.list.item.icon]
pixel_size = 40

View File

@@ -0,0 +1,129 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<requires lib="gtk" version="4.0"></requires>
<object class="GtkWindow" id="Window">
<style>
<class name="window"></class>
</style>
<property name="resizable">true</property>
<property name="title">Walker</property>
<child>
<object class="GtkBox" id="BoxWrapper">
<style>
<class name="box-wrapper"></class>
</style>
<property name="width-request">644</property>
<property name="overflow">hidden</property>
<property name="orientation">horizontal</property>
<property name="valign">center</property>
<property name="halign">center</property>
<child>
<object class="GtkBox" id="Box">
<style>
<class name="box"></class>
</style>
<property name="orientation">vertical</property>
<property name="hexpand-set">true</property>
<property name="hexpand">true</property>
<property name="spacing">10</property>
<child>
<object class="GtkBox" id="SearchContainer">
<style>
<class name="search-container"></class>
</style>
<property name="overflow">hidden</property>
<property name="orientation">horizontal</property>
<property name="halign">fill</property>
<property name="hexpand-set">true</property>
<property name="hexpand">true</property>
<child>
<object class="GtkEntry" id="Input">
<style>
<class name="input"></class>
</style>
<property name="halign">fill</property>
<property name="hexpand-set">true</property>
<property name="hexpand">true</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkBox" id="ContentContainer">
<style>
<class name="content-container"></class>
</style>
<property name="orientation">horizontal</property>
<property name="spacing">10</property>
<property name="vexpand">true</property>
<property name="vexpand-set">true</property>
<child>
<object class="GtkLabel" id="ElephantHint">
<style>
<class name="elephant-hint"></class>
</style>
<property name="hexpand">true</property>
<property name="height-request">100</property>
<property name="label">Waiting for elephant...</property>
</object>
</child>
<child>
<object class="GtkLabel" id="Placeholder">
<style>
<class name="placeholder"></class>
</style>
<property name="label">No Results</property>
<property name="yalign">0.0</property>
<property name="hexpand">true</property>
</object>
</child>
<child>
<object class="GtkScrolledWindow" id="Scroll">
<style>
<class name="scroll"></class>
</style>
<property name="hexpand">true</property>
<property name="can_focus">false</property>
<property name="overlay-scrolling">true</property>
<property name="max-content-width">600</property>
<property name="max-content-height">300</property>
<property name="min-content-height">0</property>
<property name="propagate-natural-height">true</property>
<property name="propagate-natural-width">true</property>
<property name="hscrollbar-policy">automatic</property>
<property name="vscrollbar-policy">automatic</property>
<child>
<object class="GtkGridView" id="List">
<style>
<class name="list"></class>
</style>
<property name="max_columns">1</property>
<property name="can_focus">false</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkBox" id="Preview">
<style>
<class name="preview"></class>
</style>
</object>
</child>
</object>
</child>
<child>
<object class="GtkLabel" id="Error">
<style>
<class name="error"></class>
</style>
<property name="xalign">0</property>
<property name="visible">false</property>
</object>
</child>
</object>
</child>
</object>
</child>
</object>
</interface>

View File

@@ -0,0 +1,117 @@
@import "../../../../../../../.config/omarchy/current/theme/walker.css";
* {
all: unset;
}
* {
font-family: monospace;
font-size: 18px;
color: @text;
}
scrollbar {
opacity: 0;
}
.normal-icons {
-gtk-icon-size: 16px;
}
.large-icons {
-gtk-icon-size: 32px;
}
.box-wrapper {
background: alpha(@base, 0.95);
padding: 20px;
border: 2px solid @border;
}
.preview-box {
}
.box {
}
.search-container {
background: @base;
padding: 10px;
}
.input placeholder {
opacity: 0.5;
}
.input {
}
.input:focus,
.input:active {
box-shadow: none;
outline: none;
}
.content-container {
}
.placeholder {
}
.scroll {
}
.list {
}
child,
child > * {
}
child:hover .item-box {
}
child:selected .item-box {
}
child:selected .item-box * {
color: @selected-text;
}
.item-box {
padding-left: 14px;
}
.item-text-box {
all: unset;
padding: 14px 0;
}
.item-text {
}
.item-subtext {
font-size: 0px;
min-height: 0px;
margin: 0px;
padding: 0px;
}
.item-image {
margin-right: 14px;
-gtk-icon-transform: scale(0.9);
}
.current {
font-style: italic;
}
.keybind-hints {
background: @background;
padding: 10px;
margin-top: 10px;
}
.preview {
background: @background;
}

View File

@@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
if pgrep -x wl-screenrec >/dev/null || pgrep -x wf-recorder >/dev/null; then if pgrep -f "gpu-screen-recorder" >/dev/null; then
echo '{"text": "󰻂", "tooltip": "Stop recording", "class": "active"}' echo '{"text": "󰻂", "tooltip": "Stop recording", "class": "active"}'
else else
echo '{"text": ""}' echo '{"text": ""}'

View File

@@ -14,6 +14,7 @@ run_logged $OMARCHY_INSTALL/config/fix-powerprofilesctl-shebang.sh
run_logged $OMARCHY_INSTALL/config/docker.sh run_logged $OMARCHY_INSTALL/config/docker.sh
run_logged $OMARCHY_INSTALL/config/mimetypes.sh run_logged $OMARCHY_INSTALL/config/mimetypes.sh
run_logged $OMARCHY_INSTALL/config/localdb.sh run_logged $OMARCHY_INSTALL/config/localdb.sh
run_logged $OMARCHY_INSTALL/config/walker-elephant.sh
run_logged $OMARCHY_INSTALL/config/fast-shutdown.sh run_logged $OMARCHY_INSTALL/config/fast-shutdown.sh
run_logged $OMARCHY_INSTALL/config/sudoless-asdcontrol.sh run_logged $OMARCHY_INSTALL/config/sudoless-asdcontrol.sh
run_logged $OMARCHY_INSTALL/config/hardware/network.sh run_logged $OMARCHY_INSTALL/config/hardware/network.sh
@@ -25,6 +26,7 @@ run_logged $OMARCHY_INSTALL/config/hardware/usb-autosuspend.sh
run_logged $OMARCHY_INSTALL/config/hardware/ignore-power-button.sh run_logged $OMARCHY_INSTALL/config/hardware/ignore-power-button.sh
run_logged $OMARCHY_INSTALL/config/hardware/nvidia.sh run_logged $OMARCHY_INSTALL/config/hardware/nvidia.sh
run_logged $OMARCHY_INSTALL/config/hardware/fix-f13-amd-audio-input.sh run_logged $OMARCHY_INSTALL/config/hardware/fix-f13-amd-audio-input.sh
run_logged $OMARCHY_INSTALL/config/hardware/fix-apple-bcm43xx.sh run_logged $OMARCHY_INSTALL/config/hardware/fix-bcm43xx.sh
run_logged $OMARCHY_INSTALL/config/hardware/fix-apple-spi-keyboard.sh run_logged $OMARCHY_INSTALL/config/hardware/fix-apple-spi-keyboard.sh
run_logged $OMARCHY_INSTALL/config/hardware/fix-apple-suspend-nvme.sh
run_logged $OMARCHY_INSTALL/config/hardware/fix-apple-t2.sh run_logged $OMARCHY_INSTALL/config/hardware/fix-apple-t2.sh

0
install/config/fast-shutdown.sh Executable file → Normal file
View File

View File

@@ -1,11 +0,0 @@
# Install Wi-Fi drivers for Broadcom chips on MacBooks:
# - BCM4360 (20132015)
# - BCM4331 (2012, early 2013)
pci_info=$(lspci -nnv)
if echo "$pci_info" | grep -q "106b:" &&
(echo "$pci_info" | grep -q "14e4:43a0" || echo "$pci_info" | grep -q "14e4:4331"); then
echo "Apple BCM4360 / BCM4331 detected"
sudo pacman -S --noconfirm --needed broadcom-wl dkms linux-headers
fi

View File

@@ -0,0 +1,30 @@
# Fix NVMe suspend issues on MacBook models
# This prevents NVMe drives from failing to wake from sleep properly
MACBOOK_MODEL=$(cat /sys/class/dmi/id/product_name 2>/dev/null || true)
if [[ "$MACBOOK_MODEL" =~ MacBook(8,1|9,1|10,1)|MacBookPro13,[123]|MacBookPro14,[123] ]]; then
echo "Detected MacBook model: $MACBOOK_MODEL"
NVME_DEVICE="/sys/bus/pci/devices/0000:01:00.0/d3cold_allowed"
if [[ -f "$NVME_DEVICE" ]]; then
echo "Applying NVMe suspend fix..."
cat <<EOF | sudo tee /etc/systemd/system/omarchy-nvme-suspend-fix.service >/dev/null
[Unit]
Description=Omarchy NVMe Suspend Fix for MacBook
[Service]
ExecStart=/bin/bash -c 'echo 0 > /sys/bus/pci/devices/0000\:01\:00.0/d3cold_allowed'
[Install]
WantedBy=multi-user.target
EOF
chrootable_systemctl_enable omarchy-nvme-suspend-fix.service
sudo systemctl daemon-reload
else
echo "Warning: NVMe device not found at expected PCI address (0000:01:00.0)"
echo "This fix may not be needed for this MacBook model"
fi
fi

View File

@@ -0,0 +1,10 @@
# Install Wi-Fi drivers for Broadcom chips found in some MacBooks, as well as other systems:
# - BCM4360 (20132015 MacBooks)
# - BCM4331 (2012, early 2013 MacBooks)
pci_info=$(lspci -nnv)
if (echo "$pci_info" | grep -q "14e4:43a0" || echo "$pci_info" | grep -q "14e4:4331"); then
echo "BCM4360 / BCM4331 detected"
sudo pacman -S --noconfirm --needed broadcom-wl dkms linux-headers
fi

View File

@@ -6,7 +6,7 @@ echo -e "[Resolve]\nMulticastDNS=no" | sudo tee /etc/systemd/resolved.conf.d/10-
chrootable_systemctl_enable avahi-daemon.service chrootable_systemctl_enable avahi-daemon.service
# Enable mDNS resolution for .local domains # Enable mDNS resolution for .local domains
sudo sed -i 's/^hosts:.*/hosts: mymachines mdns_minimal [NOTFOUND=return] resolve [!UNAVAIL=return] files myhostname dns/' /etc/nsswitch.conf sudo sed -i 's/^hosts:.*/hosts: mymachines mdns_minimal [NOTFOUND=return] resolve files myhostname dns/' /etc/nsswitch.conf
# Enable automatically adding remote printers # Enable automatically adding remote printers
if ! grep -q '^CreateRemotePrinters Yes' /etc/cups/cups-browsed.conf; then if ! grep -q '^CreateRemotePrinters Yes' /etc/cups/cups-browsed.conf; then

View File

@@ -1 +0,0 @@
omarchy-lazyvim-setup

View File

@@ -7,3 +7,19 @@ _.path = "{{ cwd }}/bin"
EOF EOF
mise trust ~/Work/.mise.toml mise trust ~/Work/.mise.toml
if [[ -n "${OMARCHY_CHROOT_INSTALL:-}" ]]; then
NODE_TARBALL=$(find /opt/packages -name "node-v*-linux-x64.tar.gz" -type f 2>/dev/null | head -n1)
NODE_VERSION=$(basename "$NODE_TARBALL" | sed 's/node-v\(.*\)-linux-x64.tar.gz/\1/')
NODE_INSTALL_DIR="$HOME/.local/share/mise/installs/node/$NODE_VERSION"
mkdir -p "$NODE_INSTALL_DIR"
tar -xzf "$NODE_TARBALL" \
--strip-components=1 \
-C "$NODE_INSTALL_DIR"
mise use -g node@"$NODE_VERSION"
else
mise use -g node@latest
fi

View File

@@ -12,7 +12,7 @@ ln -snf ~/.config/omarchy/themes/tokyo-night ~/.config/omarchy/current/theme
ln -snf ~/.config/omarchy/current/theme/backgrounds/1-scenery-pink-lakeside-sunset-lake-landscape-scenic-panorama-7680x3215-144.png ~/.config/omarchy/current/background ln -snf ~/.config/omarchy/current/theme/backgrounds/1-scenery-pink-lakeside-sunset-lake-landscape-scenic-panorama-7680x3215-144.png ~/.config/omarchy/current/background
# Set specific app links for current theme # Set specific app links for current theme
ln -snf ~/.config/omarchy/current/theme/neovim.lua ~/.config/nvim/lua/plugins/theme.lua # ~/.config/omarchy/current/theme/neovim.lua -> ~/.config/nvim/lua/plugins/theme.lua is handled via omarchy-setup-nvim
mkdir -p ~/.config/btop/themes mkdir -p ~/.config/btop/themes
ln -snf ~/.config/omarchy/current/theme/btop.theme ~/.config/btop/themes/current.theme ln -snf ~/.config/omarchy/current/theme/btop.theme ~/.config/btop/themes/current.theme

View File

@@ -0,0 +1,17 @@
#!/bin/bash
# Create pacman hook to restart walker after updates
sudo mkdir -p /etc/pacman.d/hooks
sudo tee /etc/pacman.d/hooks/walker-restart.hook > /dev/null << EOF
[Trigger]
Type = Package
Operation = Upgrade
Target = walker
Target = walker-debug
Target = elephant*
[Action]
Description = Restarting Walker services after system update
When = PostTransaction
Exec = $OMARCHY_PATH/bin/omarchy-restart-walker
EOF

View File

@@ -0,0 +1,3 @@
if sudo test -f /etc/sudoers.d/99-omarchy-installer-reboot; then
sudo rm -f /etc/sudoers.d/99-omarchy-installer-reboot
fi

View File

@@ -1,2 +1,2 @@
notify-send " Update System" "When you have internet, click to update the system." -u critical notify-send " Update System" "When you have internet, click to update the system." -u critical
notify-send "👋 Welcome to Omarchy" "You're in for a great computing adventure. Have fun!" -t 30000 notify-send " Learn Keybindings" "Super + K for cheatsheet.\nSuper + Space for application launcher.\nSuper + Alt + Space for Omarchy Menu." -u critical

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