Compare commits

..

156 Commits

Author SHA1 Message Date
David Heinemeier Hansson
666dbd8f39 Merge pull request #528 from basecamp/dev
Omarchy 1.12.0
2025-08-07 13:12:01 +02:00
Johan Gyllenspetz
308033bd10 Allow selecting themes for deletion (#533)
Co-authored-by: Johan Gyllenspetz <gyllen@hey.com>
Co-authored-by: David Heinemeier Hansson <david@hey.com>
2025-08-07 13:05:18 +02:00
David Heinemeier Hansson
4a468041cb Fix comments and description 2025-08-07 13:03:50 +02:00
David Heinemeier Hansson
97e3902455 Merge branch 'master' into dev 2025-08-07 13:02:22 +02:00
David Heinemeier Hansson
b75065c4cf Ensure we are running the latest Walker and that its been restarted 2025-08-06 23:28:50 +02:00
David Heinemeier Hansson
8c8cf7aadb Add migration to fix that broken multicastdns issue for printer setups 2025-08-06 23:21:29 +02:00
David Heinemeier Hansson
722fa73bc8 No need to carry this 2025-08-06 23:16:12 +02:00
Manuel
6b8917450f Make Screensaver Background Color Black (#526)
* add sceensaver alacritty config file and changed screensaver cmd

* Move the screensaver config into defaults

Since its not meant to be user edited

---------

Co-authored-by: Manu <manuel.ramsaier@gmail.com>
Co-authored-by: David Heinemeier Hansson <david@hey.com>
2025-08-06 22:53:15 +02:00
David Heinemeier Hansson
26b09bb218 It is monospace 2025-08-06 22:02:46 +02:00
David Heinemeier Hansson
46d58ff0df Have Style > Font also set for Waybar, SwayOSD, and fontconfig 2025-08-06 22:01:23 +02:00
David Heinemeier Hansson
08bc9fcaea Better wording 2025-08-06 21:40:22 +02:00
David Heinemeier Hansson
81df3ce171 Add basic power profiles setup menu
Still need to be able to reveal which is the current profile
2025-08-06 21:36:07 +02:00
Glenn Oppegard
0fcda80630 Fix disabling of resolved Multicast DNS (#521) 2025-08-06 21:01:22 +02:00
Emmanuel Pastor
6348a0ad08 Fix wrong workspace numbers in description (#522) 2025-08-06 21:00:37 +02:00
David Heinemeier Hansson
43a31a10d0 Font menu needs to be wider 2025-08-06 20:28:48 +02:00
David Heinemeier Hansson
2737a76a85 Give the font cache 2 seconds to update before setting the font 2025-08-06 20:28:41 +02:00
David Heinemeier Hansson
ff0aedd0eb Add font installer menu with typical programmer fonts 2025-08-06 16:01:04 +02:00
David Heinemeier Hansson
bade5b0d34 Pull the font-menu into omarchy-menu 2025-08-06 15:50:51 +02:00
David Heinemeier Hansson
58fbda80ef Only attempt operation if a package name is selected 2025-08-06 15:19:53 +02:00
David Heinemeier Hansson
e3a3b98e0a Add dedicated section for installing popular programming editors 2025-08-06 14:59:07 +02:00
adcv
8002586392 small fix for theme-remove menu selection items (#505) 2025-08-06 13:49:46 +02:00
David Heinemeier Hansson
180dc7c9b5 Merge branch 'master' into dev 2025-08-06 13:44:34 +02:00
David Heinemeier Hansson
88969588c4 Add Osaka Jade as default theme 2025-08-06 13:44:21 +02:00
Justin Lowry
8281533b54 Add Osaka Jade theme to default theme set. (#514)
* Add Osaka Jade Theme

* Use jpg for bg for lower size with no quality difference

---------

Co-authored-by: Justin Lowry <j.lowry@hey.com>
Co-authored-by: David Heinemeier Hansson <david@hey.com>
2025-08-06 13:42:48 +02:00
David Heinemeier Hansson
d72f716c83 Add transcode functions 2025-08-06 13:34:19 +02:00
Justin Lowry
1d29c32fe5 Add Osaka Jade theme to default theme set. (#514)
* Add Osaka Jade Theme

* Use jpg for bg for lower size with no quality difference

---------

Co-authored-by: Justin Lowry <j.lowry@hey.com>
Co-authored-by: David Heinemeier Hansson <david@hey.com>
2025-08-06 13:28:08 +02:00
David Heinemeier Hansson
41249a271a Fit within the logo width 2025-08-06 08:44:53 +02:00
David Heinemeier Hansson
5ff0e82621 Do updatedb after installing a new package
So you can always find what's been installed via locate
2025-08-05 18:16:36 +02:00
David Heinemeier Hansson
1746c7556c Merge pull request #500 from basecamp/dev
Omarchy v1.11.0
2025-08-05 17:23:23 +02:00
David Heinemeier Hansson
a7798a57bc Make updating checking resilient against network being unavailable 2025-08-05 17:13:37 +02:00
David Heinemeier Hansson
9292c29640 Ensure we continue 2025-08-05 16:41:33 +02:00
David Heinemeier Hansson
db441e8813 Try to run this in a subshell to prevent the exit 2025-08-05 16:37:57 +02:00
David Heinemeier Hansson
137c24454f Ensure they can all run from Walker
Which does not have the bash-powered PATH
2025-08-05 16:35:28 +02:00
David Heinemeier Hansson
b6325ea810 No longer used 2025-08-05 16:30:34 +02:00
David Heinemeier Hansson
fc11ce61cc Add figma as a default web app 2025-08-05 16:28:58 +02:00
David Heinemeier Hansson
d9efaac906 Start hyprsunset on demand instead of needing it to run constantly 2025-08-05 16:25:08 +02:00
David Heinemeier Hansson
881af9b7d6 No longer need the functions 2025-08-05 15:58:53 +02:00
David Heinemeier Hansson
581937a204 Need the full path 2025-08-05 15:58:39 +02:00
David Heinemeier Hansson
d676f1a16f Link to the extra themes index 2025-08-05 15:44:58 +02:00
David Heinemeier Hansson
b4e9465970 Use the new omarchy-webapp-install command 2025-08-05 15:34:45 +02:00
David Heinemeier Hansson
bd26465912 Give you an easy way to install a new background image 2025-08-05 15:23:02 +02:00
David Heinemeier Hansson
1a4b2d9420 Somehow lost the bindd versions 2025-08-05 15:11:04 +02:00
David Heinemeier Hansson
59b1d690d0 We now have this in the About screen 2025-08-05 14:19:58 +02:00
David Heinemeier Hansson
1c4c42bf76 Make menu disappear after changing theme 2025-08-05 14:10:58 +02:00
David Heinemeier Hansson
8c46ff9303 Help people realize what they're editing 2025-08-05 13:55:10 +02:00
David Heinemeier Hansson
6d7cbf0d05 Setup configs menu with auto-restart 2025-08-05 13:54:17 +02:00
David Heinemeier Hansson
14d652b63d Use max volume 100 as default 2025-08-05 13:45:49 +02:00
David Heinemeier Hansson
e0e21b37d7 Don't like the SwayOSD overlay when max volume is above 100% 2025-08-05 13:45:37 +02:00
David Heinemeier Hansson
67d830cc39 Extract helper for nvim editing 2025-08-05 12:46:12 +02:00
David Heinemeier Hansson
a4bed3029e Offer to setup bindings and input if those files are split out 2025-08-05 12:40:59 +02:00
David Heinemeier Hansson
7e1ca837b8 Offer to reorganize hyprland.conf as is done in the new config 2025-08-05 12:35:06 +02:00
David Heinemeier Hansson
2c73e48172 Split up the default .config/hypr/hyprland.conf to be easier to tailor with less risk of overwritting 2025-08-05 12:17:37 +02:00
David Heinemeier Hansson
206dc44649 Correct use from cli 2025-08-05 12:08:30 +02:00
David Heinemeier Hansson
58bdc4c307 Avoid duplication 2025-08-05 12:02:38 +02:00
David Heinemeier Hansson
7e2676d565 Add neovim to learning
But would be nice with a better tutorial for newcomers
2025-08-05 11:53:45 +02:00
David Heinemeier Hansson
9bd2d6e0c1 Add monitor and hyprland config links too 2025-08-05 11:51:16 +02:00
David Heinemeier Hansson
678882810e Moved web app functions to full omarchy TUI commands 2025-08-05 11:40:35 +02:00
David Heinemeier Hansson
08ed9a5dff Add web app management to Omarchy menu 2025-08-05 11:39:57 +02:00
David Heinemeier Hansson
59fefd34b1 Match the other installer/removers 2025-08-05 11:39:46 +02:00
David Heinemeier Hansson
e31745e67d Don't leave lingering logo around 2025-08-05 11:36:33 +02:00
David Heinemeier Hansson
ae0e711e39 Give a hint for the hotkey 2025-08-05 10:50:13 +02:00
David Heinemeier Hansson
494c140859 Audio more common 2025-08-05 10:47:37 +02:00
David Heinemeier Hansson
d1b09e27a0 Add remove menu and tune up theme-remove script 2025-08-05 10:30:44 +02:00
David Heinemeier Hansson
2cd841a687 Explain what we are doing before asking for sudo 2025-08-05 09:42:25 +02:00
David Heinemeier Hansson
a75c9ef072 Add updating configs from defaults 2025-08-05 09:37:23 +02:00
David Heinemeier Hansson
8dc198c57f Use full path so they can safely be run from Walker menu 2025-08-05 09:32:35 +02:00
David Heinemeier Hansson
3a06b639c3 Add Bash learnings too 2025-08-05 09:18:51 +02:00
David Heinemeier Hansson
ea31b4a090 Add Arch wiki to learning list 2025-08-05 09:16:01 +02:00
David Heinemeier Hansson
ea0da160b8 Merge pull request #494 from DavidHoenisch/master
improved error handling in fido2 setup
2025-08-05 08:34:27 +02:00
DavidHoenisch
1b17a049ff improved error handling to exist on mistyped pin instead of failing silently 2025-08-04 22:03:42 -07:00
David Heinemeier Hansson
8170cb9ed4 Unified done showing and command style 2025-08-04 20:51:43 +02:00
David Heinemeier Hansson
82bcee5624 Fix grep 2025-08-04 20:42:20 +02:00
David Heinemeier Hansson
a8a8b017d6 Allow menu to install third party themes 2025-08-04 20:40:52 +02:00
David Heinemeier Hansson
e875a5d344 Old Omarchy TUI is gone! 2025-08-04 20:40:41 +02:00
David Heinemeier Hansson
4f8d758b07 Give it color 2025-08-04 20:30:00 +02:00
David Heinemeier Hansson
fc449efdb1 No longer needed 2025-08-04 20:28:44 +02:00
David Heinemeier Hansson
57443e74ad Show logo now that we are coming from the new menu 2025-08-04 20:26:33 +02:00
David Heinemeier Hansson
9c70a8e187 Just using omarchy-update now 2025-08-04 20:23:38 +02:00
David Heinemeier Hansson
fe396b305c Stray comment 2025-08-04 20:23:00 +02:00
David Heinemeier Hansson
2e117b57f0 Need to refresh waybar for the new Omarchy menu 2025-08-04 20:20:24 +02:00
David Heinemeier Hansson
eda03fcfe1 Try with Start instead 2025-08-04 20:18:49 +02:00
David Heinemeier Hansson
6dca3e1717 Renaming and order 2025-08-04 19:50:53 +02:00
David Heinemeier Hansson
9c4a45537a Reveal omarchy menu from waybar 2025-08-04 19:50:49 +02:00
David Heinemeier Hansson
b4a6550b29 Use new omarchy-menu for everything 2025-08-04 19:50:36 +02:00
David Heinemeier Hansson
d599a98a76 Allow updating themes 2025-08-04 19:50:03 +02:00
David Heinemeier Hansson
b2ab061e3c Rename function 2025-08-04 19:48:15 +02:00
David Heinemeier Hansson
7e84755c75 Extract theme-list and theme-set so they can be used more easily in any menu 2025-08-04 19:44:42 +02:00
David Heinemeier Hansson
552fbb47fe Overhaul the omarchy-menu 2025-08-04 18:33:38 +02:00
David Heinemeier Hansson
de1330cd9f Add standalone script for setting up the docker DBs
So we can use it via the new menu system
2025-08-04 18:27:04 +02:00
David Heinemeier Hansson
a9004662ca Make it easier to use the yay fzf installer/uninstaller via menu 2025-08-04 18:26:36 +02:00
David Heinemeier Hansson
62975f0a23 Prepare for use in the new menu system 2025-08-04 18:26:08 +02:00
David Heinemeier Hansson
29f4ee3524 Removed by mistake 2025-08-04 18:25:05 +02:00
David Heinemeier Hansson
3acb5c2a83 Add setting up fingerprint too 2025-08-04 16:49:28 +02:00
David Heinemeier Hansson
8e1beac707 Link to the manual from here too 2025-08-04 16:46:44 +02:00
David Heinemeier Hansson
15d4ed80a9 Add command to update timezone too 2025-08-04 16:40:48 +02:00
David Heinemeier Hansson
575368e8c4 Migration to restart walker to pick up menu selections 2025-08-04 12:59:12 +02:00
David Heinemeier Hansson
fb5a56474d Allow filtering on all the walker menus 2025-08-04 12:58:32 +02:00
David Heinemeier Hansson
45b6d96be0 Allow the wide menu to be filtered 2025-08-04 12:55:05 +02:00
David Heinemeier Hansson
256ce145ba Better ordering 2025-08-04 12:50:09 +02:00
David Heinemeier Hansson
4c0d38616e Better grouping 2025-08-04 12:50:05 +02:00
David Heinemeier Hansson
02043fa631 Turn screensaver binding into a full cmd menu 2025-08-04 12:44:19 +02:00
David Heinemeier Hansson
d16c178eb4 Excess CR 2025-08-04 12:43:21 +02:00
David Heinemeier Hansson
5e092c92ce Migration to update update-available icon in the waybar 2025-08-04 12:19:17 +02:00
David Heinemeier Hansson
93980e6138 No backup if user config doesn't already exist 2025-08-04 12:17:42 +02:00
David Heinemeier Hansson
f223bbcb98 Use more conventional icon for "updates available" 2025-08-04 12:08:43 +02:00
David Heinemeier Hansson
7540bddee1 Toggle instead of stack hyprpicker 2025-08-04 11:54:04 +02:00
David Heinemeier Hansson
b358990a70 Set default size 2025-08-04 11:42:04 +02:00
David Heinemeier Hansson
9855693eb1 Position picture-in-picture windows correctly (closes #260)
Co-authored-by: @ElFitaFlores
2025-08-04 11:33:00 +02:00
David Heinemeier Hansson
1b650c2503 Merge pull request #479 from ryanrhughes/add-touchpad-gestures
Add touchpad gestures for Chromium
2025-08-04 11:18:53 +02:00
David Heinemeier Hansson
d518557b6f Merge pull request #482 from ryanrhughes/add-theme-colors-to-tui
Add appropriate colors to TUI
2025-08-04 11:17:55 +02:00
Ryan Hughes
92e62ac26d Add appropriate colors to tui 2025-08-04 02:00:06 -04:00
Ryan Hughes
6478f8b9f8 Add migration 2025-08-03 20:03:31 -04:00
Ryan Hughes
43d1b7304a Add touchpad gestures 2025-08-03 19:57:33 -04:00
David Heinemeier Hansson
1306085102 Merge pull request #471 from rmacklin/fix-timeout
Fix hypridle timeout to actually be 2.5min
2025-08-03 20:12:13 +02:00
David Heinemeier Hansson
755633cd95 Documentation 2025-08-03 20:07:46 +02:00
David Heinemeier Hansson
63179c7d80 Add format-drive function to wipe drives 2025-08-03 19:59:25 +02:00
Richard Macklin
5a29322bf8 Fix hypridle timeout to actually be 2.5min
The intent was for this to be 2.5 minutes but 180s is 3 minutes.
2025-08-03 10:23:08 -07:00
David Heinemeier Hansson
fc911e16e6 Add script to update hyprland itself
Nice if you don't make any adjustments yourself
2025-08-03 16:57:53 +02:00
David Heinemeier Hansson
f21a808bc5 Merge pull request #467 from basecamp/dev
Omarchy 1.10.0
2025-08-03 16:10:52 +02:00
David Heinemeier Hansson
2712f268c8 Increase time before screensaver starts to 2.5 minutes (from 1 minute) 2025-08-03 10:00:21 -04:00
David Heinemeier Hansson
25ed6460e0 Forgot to add waybar refresh for auto-update icon to existing installations 2025-08-03 15:44:39 +02:00
David Heinemeier Hansson
d3fff87864 You really shouldn't have to mess with these regularly, so let's just use Update for Omarchy only 2025-08-03 15:34:31 +02:00
David Heinemeier Hansson
a9b9cbfa34 Must detach after restart 2025-08-03 15:30:49 +02:00
David Heinemeier Hansson
d84b521a19 Cleaner still 2025-08-03 14:09:07 +02:00
David Heinemeier Hansson
83e5faf224 Simplify migrations script 2025-08-03 14:07:39 +02:00
David Heinemeier Hansson
cb08f4ccd2 Extend time for battery warning to 30 seconds
Make it harder to miss. Closes #392.
2025-08-03 14:02:57 +02:00
David Heinemeier Hansson
1dc8379533 Add migration for gvfs-mtp 2025-08-03 13:54:20 +02:00
Erik Brüggemann
c78133251a feat: add gvfs-mtp (#466)
To view the contents of an Android device's storage via MTP in nautilus,
we need the corresponding plugin.
2025-08-03 13:52:47 +02:00
David Heinemeier Hansson
fb05e59bf6 Extract app-specific tweaks into their own files 2025-08-03 13:47:26 +02:00
David Heinemeier Hansson
5344885176 Its enough that its included in the Omarchy TUI 2025-08-03 13:10:29 +02:00
David Heinemeier Hansson
2278b400dd Enable auto-discovery of network printers
Co-authored-by: @rockorager
2025-08-03 13:07:23 +02:00
David Heinemeier Hansson
4b027a9242 Move out of conditional in case user has already installed hyprsunset 2025-08-03 06:47:05 -04:00
Ryan Hughes
e7f086370d Make repo configurable (#139) 2025-08-03 12:07:54 +02:00
David Heinemeier Hansson
4c650e53de Migration to refresh walker to show all keybindings 2025-08-03 12:05:33 +02:00
David Heinemeier Hansson
81aeee437c A few more binding description tweaks 2025-08-03 12:03:59 +02:00
David Heinemeier Hansson
9a09d45d6b Increase Walker list max entries to 200 to accomodate all hotkeys 2025-08-03 11:50:31 +02:00
David Heinemeier Hansson
933d18fce3 Expand bind descriptions 2025-08-03 11:48:53 +02:00
Simon Dawson
8f3647c5c5 Use dynamic bindings list in omarchy-menu-keybindings (#300)
* fix: Use dynamic bindings list in omarchy-menu-keybindings

We can use `hyprctl binds` to get a dynamic list of the currently-set
key bindings. This allows for a custom user configuration that is
split into arbitrary config files, and which makes use of `unbind` to
remove default Omarchy key bindings.

* chore: Support optional description for key bindings

If the description is present, use it in the key
bindings menu, instead of displaying some version
of the dispatched command.

* chore: Add some key binding description strings
2025-08-03 11:11:29 +02:00
David Heinemeier Hansson
8ed29e6ce1 Change wording 2025-08-03 11:02:14 +02:00
David Heinemeier Hansson
fe1f6d4c3a Just be consistent 2025-08-03 10:49:38 +02:00
David Heinemeier Hansson
65ba23d0bb Extract omarchy-refresh-hyprsunset 2025-08-03 10:45:39 +02:00
David Heinemeier Hansson
c35311676c Extract function 2025-08-03 10:44:45 +02:00
David Heinemeier Hansson
e1f697f914 Use restart bin extraction 2025-08-03 10:34:50 +02:00
David Heinemeier Hansson
8de2566fa4 Extract omarchy-restart-app 2025-08-03 10:33:34 +02:00
Jaxon Wright
3fb1bf9759 Add Hyprsunset for Blue Light Filtering / Nightlight (#447)
* install hyprsunset when installing other hypr packages

* add hyprsunset to autostart

* add default hyprsunset config to make it do nothing by default

* waybar: add hyprsunset shortcut next to bluetooth shortcut to quickly toggle blue light filtering

* waybar: fix icon switching for hyprsunset widget

* add migration for hyprsunset

* waybar: rename "Blue Light Filter" to "Nightlight"

* waybar: make nightlight module appear next to bluetooth module

* waybar: do not include nightlight module by default

* add omarchy-toggle-nightlight script

* add default keybinding for toggling hyprsunset nightlight (SUPER + CTRL + N)

* waybar: remove nightlight module from config entirely

* waybar: remove nightlight from css

* update hyprsunset migration to skip yay install if already installed

* omarchy-toggle-nightlight: use `omarchy-restart-waybar` script instead of pkill with -SIG

* omarchy-toggle-nightlight: only restart waybar if nightlight is in the waybar config

---------

Co-authored-by: David Heinemeier Hansson <david@hey.com>
2025-08-03 10:26:59 +02:00
David Heinemeier Hansson
3a5ef9d841 Ensure screensaver doesn't start while the computer is locked 2025-08-03 10:18:15 +02:00
David Heinemeier Hansson
008ede7bbd Tweaks 2025-08-03 10:02:19 +02:00
David Heinemeier Hansson
c7020ee875 Merge branch 'dev' into dev 2025-08-03 09:47:54 +02:00
David Heinemeier Hansson
1fda1ade8a Increase screensaver font size for looks and performance
Co-authored-by: @precision
2025-08-03 09:45:21 +02:00
David Heinemeier Hansson
cdc37313ad Revert "Merge pull request #464 from rosscondie/feat/vim-navigation-in-walker"
This reverts commit b8275ca5af, reversing
changes made to 23b9b15936.
2025-08-03 09:41:15 +02:00
David Heinemeier Hansson
b8275ca5af Merge pull request #464 from rosscondie/feat/vim-navigation-in-walker
Add Vim-style j/k navigation to walker config
2025-08-03 09:40:12 +02:00
David Heinemeier Hansson
23b9b15936 Convert refresh-compose command into the same bin as everything else 2025-08-03 09:38:40 +02:00
David Heinemeier Hansson
2a2c5c90d1 Cleanup the omarchy-refresh/restart combos 2025-08-03 09:37:04 +02:00
Ross Condie
cf1b671a71 Add Vim-style j/k navigation to walker config 2025-08-03 09:10:45 +02:00
Uriah Welcome
cb79065e5d Launch the screensaver on all monitors not just the focused one. We
also have to kill the screensaver across all monitors when we exit in
omarch-cmd-screensaver.
2025-08-02 19:51:47 -04:00
David Heinemeier Hansson
5fda6054ce New installations don't need to migrate from what's already there 2025-08-02 22:47:39 +02:00
132 changed files with 1262 additions and 621 deletions

View File

@@ -1,10 +0,0 @@
[Desktop Entry]
Version=1.0
Type=Application
Name=Omarchy
Comment=Omarchy TUI
Exec=alacritty --class=Omarchy --title=Omarchy -e bash -c '$HOME/.local/share/omarchy/bin/omarchy'
Icon=Arch
Terminal=false
Categories=System;Utility;
StartupNotify=false

View File

@@ -1,157 +0,0 @@
#!/bin/bash
OMARCHY_VERSION=$(git -C ~/.local/share/omarchy describe --tags --abbrev=0 2>/dev/null)
PATH="$PATH:$HOME/.local/share/omarchy/bin"
show_ascii_art() {
clear
tte -i ~/.local/share/omarchy/logo.txt --frame-rate 640 --no-color expand
echo " $OMARCHY_VERSION"
}
main_menu() {
show_ascii_art
local options=("Theme" "Font" "Setup" "Update" "Manual" "Exit")
choice=$(printf "%s\n" "${options[@]}" | gum choose --header "") || exit 0
case "$choice" in
Theme) theme_menu ;;
Font)
omarchy-font-menu
ack_command
main_menu
;;
Update) update_menu ;;
Setup) setup_menu ;;
Manual) open_manual ;;
Exit) clear && exit 0 ;;
esac
}
update_menu() {
show_ascii_art
local menu=("Omarchy" "Waybar" "Walker" "Plymouth" "SwayOSD" "Desktop apps" "Back")
local commands=(
"omarchy-update"
"omarchy-refresh-waybar"
"omarchy-refresh-walker"
"omarchy-refresh-plymouth"
"omarchy-refresh-swayosd"
"omarchy-refresh-applications"
"main_menu"
)
local choice
choice=$(printf "%s\n" "${menu[@]}" | gum choose --header="Update") || main_menu
for i in "${!menu[@]}"; do
if [[ "${menu[$i]}" == "$choice" ]]; then
if [[ "$choice" == "Back" ]]; then
main_menu
else
eval "${commands[$i]}"
ack_command
main_menu
fi
break
fi
done
}
theme_menu() {
show_ascii_art
local menu=("Pick" "Install" "Update" "Remove" "Back")
local commands=(
"omarchy-theme-menu"
"install_theme_prompt"
"omarchy-theme-update"
"remove_theme_prompt"
"main_menu"
)
local choice
choice=$(printf "%s\n" "${menu[@]}" | gum choose --header="Theme") || main_menu
for i in "${!menu[@]}"; do
if [[ "${menu[$i]}" == "$choice" ]]; then
if [[ "$choice" == "Back" ]]; then
main_menu
else
eval "${commands[$i]}"
ack_command
main_menu
fi
break
fi
done
}
install_theme_prompt() {
local url
url=$(gum input --placeholder="Git repo URL for theme" --header="")
if [[ -n "$url" ]]; then
omarchy-theme-install "$url"
fi
theme_menu
}
remove_theme_prompt() {
local theme
theme=$(gum input --placeholder="Theme name" --header="")
if [[ -n "$theme" ]]; then
omarchy-theme-remove "$theme"
fi
theme_menu
}
setup_menu() {
show_ascii_art
local menu=("Dropbox" "Steam" "Docker DBs" "Fingerprint sensor" "Fido2 device" "Back")
local commands=(
"omarchy-setup-dropbox"
"omarchy-setup-steam"
"setup_docker_dbs"
"omarchy-setup-fingerprint"
"omarchy-setup-fido2"
"main_menu"
)
local choice
choice=$(printf "%s\n" "${menu[@]}" | gum choose --header="Setup") || main_menu
for i in "${!menu[@]}"; do
if [[ "${menu[$i]}" == "$choice" ]]; then
if [[ "$choice" == "Back" ]]; then
main_menu
else
eval "${commands[$i]}"
ack_command
main_menu
fi
break
fi
done
}
setup_docker_dbs() {
options=("MariaDB" "MySQL" "Redis" "PostgreSQL")
choices=$(printf "%s\n" "${options[@]}" | gum choose --no-limit --header "Select databases (space to select, return to install, esc to cancel)") || main_menu
if [[ -n "$choices" ]]; then
for db in $choices; do
case $db in
MySQL) sudo docker run -d --restart unless-stopped -p "127.0.0.1:3306:3306" --name=mysql8 -e MYSQL_ROOT_PASSWORD= -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql:8.4 ;;
PostgreSQL) sudo docker run -d --restart unless-stopped -p "127.0.0.1:5432:5432" --name=postgres16 -e POSTGRES_HOST_AUTH_METHOD=trust postgres:16 ;;
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 ;;
esac
done
fi
main_menu
}
open_manual() {
setsid chromium --new-window --ozone-platform=wayland --app="https://manuals.omamix.org/2/the-omarchy-manual" >/dev/null 2>&1 &
clear
}
ack_command() {
gum spin --spinner "globe" --title "Done!" -- sleep 1
}
main_menu

View File

@@ -14,7 +14,7 @@ get_battery_state() {
}
send_notification() {
notify-send -u critical "Battery Low" "Time to recharge! (battery is at ${1}%)" -i battery-caution
notify-send -u critical "󱐋 Time to recharge!" "Battery is down to ${1}%" -i battery-caution -t 30000
}
BATTERY_LEVEL=$(get_battery_percentage)

View File

@@ -1,7 +1,5 @@
#!/bin/bash
# Set recorder based on GPU
[[ -f ~/.config/user-dirs.dirs ]] && source ~/.config/user-dirs.dirs
OUTPUT_DIR="${OMARCHY_SCREENRECORD_DIR:-${XDG_VIDEOS_DIR:-$HOME/Videos}}"

View File

@@ -10,6 +10,7 @@ if command -v tte &>/dev/null; then
while pgrep tte >/dev/null; do
if read -n 1 -t 0.01; then
pkill tte 2>/dev/null
pkill -f "alacritty --class Screensaver" 2>/dev/null
exit 0
fi
done
@@ -17,4 +18,3 @@ if command -v tte &>/dev/null; then
else
gum spin --title "Can't find tte. Try: pip install terminaltexteffects" -- sleep 2
fi

View File

@@ -4,4 +4,3 @@ cd ~/.local/share/omarchy
migration_file="$HOME/.local/share/omarchy/migrations/$(git log -1 --format=%cd --date=unix).sh"
touch $migration_file
nvim $migration_file
echo -e "Run with:\nsource $migration_file"

3
bin/omarchy-font-list Executable file
View File

@@ -0,0 +1,3 @@
#!/bin/bash
fc-list :spacing=100 -f "%{family[0]}\n" | grep -v -i -E 'emoji|signwriting' | sort -u

View File

@@ -1,12 +0,0 @@
#!/bin/bash
font=$(
fc-list :spacing=100 -f "%{family[0]}\n" |
grep -v -i -E 'emoji|signwriting' |
sort -u |
gum choose --header "Choose terminal font"
)
if [[ -n "$font" ]]; then
sed -i "s/family = \".*\"/family = \"$font\"/g" ~/.config/alacritty/alacritty.toml
fi

23
bin/omarchy-font-set Executable file
View File

@@ -0,0 +1,23 @@
#!/bin/bash
font_name="$1"
if [[ -n "$font_name" && "$font_name" != "CNCLD" ]]; then
if fc-list | grep -iq "$font_name"; then
sed -i "s/family = \".*\"/family = \"$font_name\"/g" ~/.config/alacritty/alacritty.toml
sed -i "s/font-family: .*/font-family: $font_name;/g" ~/.config/waybar/style.css
sed -i "s/font-family: .*/font-family: $font_name;/g" ~/.config/swayosd/style.css
xmlstarlet ed -L \
-u '//match[@target="pattern"][test/string="monospace"]/edit[@name="family"]/string' \
-v "$font_name" \
~/.config/fontconfig/fonts.conf
~/.local/share/omarchy/bin/omarchy-restart-waybar
~/.local/share/omarchy/bin/omarchy-restart-swayosd
else
echo "Font '$font_name' not found."
exit 1
fi
else
echo "Usage: omarchy-font-set <font-name>"
fi

View File

@@ -1,5 +1,16 @@
#!/bin/bash
pgrep -f "alacritty --class Screensaver" ||
alacritty --class Screensaver --title Screensaver -o 'colors.primary.background="#000000"' \
-o 'colors.cursor.cursor="#000000"' -e ~/.local/share/omarchy/bin/omarchy-cmd-screensaver
# Exit early if screensave is already running
pgrep -f "alacritty --class Screensaver" && exit 0
focused=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true).name')
for m in $(hyprctl monitors -j | jq -r '.[] | .name'); do
hyprctl dispatch focusmonitor $m
hyprctl dispatch exec -- \
alacritty --class Screensaver \
--config-file ~/.local/share/omarchy/default/alacritty/screensaver.toml \
-e ~/.local/share/omarchy/bin/omarchy-cmd-screensaver
done
hyprctl dispatch focusmonitor $focused

258
bin/omarchy-menu Executable file
View File

@@ -0,0 +1,258 @@
#!/bin/bash
OMARCHY_BIN_PATH=~/.local/share/omarchy/bin
menu() {
echo -e "$2" | walker --dmenu --theme dmenu_250 -p "$1…" $3
}
terminal() {
alacritty --class Omarchy -e $1
}
present_terminal() {
alacritty --class Omarchy -e bash -c "~/.local/share/omarchy/bin/omarchy-show-logo; eval \"$1\"; ~/.local/share/omarchy/bin/omarchy-show-done;"
}
edit_in_nvim() {
notify-send "Editing config file" "$1"
alacritty -e nvim "$1"
}
install_and_launch() {
present_terminal "echo 'Installing $1...'; yay -Sy --noconfirm $2 && gtk-launch $3"
}
install_font() {
present_terminal "echo 'Installing $1...'; yay -Sy --noconfirm --needed $2 && sleep 2 && ~/.local/share/omarchy/bin/omarchy-font-set '$3'"
}
show_learn_menu() {
case $(menu "Learn" " Keybindings\n Omarchy\n Hyprland\n󰣇 Arch\n Neovim\n󱆃 Bash") in
*Keybindings*) $OMARCHY_BIN_PATH/omarchy-menu-keybindings ;;
*Omarchy*) setsid chromium --new-window --app="https://manuals.omamix.org/2/the-omarchy-manual" & ;;
*Hyprland*) setsid chromium --new-window --app="https://wiki.hypr.land/" & ;;
*Arch*) setsid chromium --new-window --app="https://wiki.archlinux.org/title/Main_page" & ;;
*Bash*) setsid chromium --new-window --app="https://devhints.io/bash" & ;;
*Neovim*) setsid chromium --new-window --app="https://www.lazyvim.org/keymaps" & ;;
*) show_main_menu ;;
esac
}
show_style_menu() {
case $(menu "Style" "󰸌 Theme\n Font\n Background") in
*Theme*) show_theme_menu ;;
*Font*) show_font_menu ;;
*Background*) $OMARCHY_BIN_PATH/omarchy-theme-bg-next ;;
*) show_main_menu ;;
esac
}
show_theme_menu() {
theme=$(menu "Theme" "$($OMARCHY_BIN_PATH/omarchy-theme-list)")
if [[ "$theme" == "CNCLD" || -z "$theme" ]]; then
show_main_menu
else
$OMARCHY_BIN_PATH/omarchy-theme-set "$theme"
fi
}
show_font_menu() {
theme=$(menu "Font" "$($OMARCHY_BIN_PATH/omarchy-font-list)" "-w 350")
if [[ "$theme" == "CNCLD" || -z "$theme" ]]; then
show_main_menu
else
$OMARCHY_BIN_PATH/omarchy-font-set "$theme"
fi
}
show_capture_menu() {
case $(menu "Capture" " Screenshot\n Screenrecord\n󰃉 Color") in
*Screenshot*) show_screenshot_menu ;;
*Screenrecord*) show_screenrecord_menu ;;
*Color*) pkill hyprpicker || hyprpicker -a ;;
*) show_main_menu ;;
esac
}
show_screenshot_menu() {
case $(menu "Screenshot" " Region\n Window\n Display") in
*Region*) $OMARCHY_BIN_PATH/omarchy-cmd-screenshot ;;
*Window*) $OMARCHY_BIN_PATH/omarchy-cmd-screenshot window ;;
*Display*) $OMARCHY_BIN_PATH/omarchy-cmd-screenshot output ;;
*) show_capture_menu ;;
esac
}
show_screenrecord_menu() {
case $(menu "Screenrecord" " Region\n Display") in
*Region*) $OMARCHY_BIN_PATH/omarchy-cmd-screenrecord ;;
*Display*) $OMARCHY_BIN_PATH/omarchy-cmd-screenrecord output ;;
*) show_capture_menu ;;
esac
}
show_toggle_menu() {
case $(menu "Toggle" "󱄄 Screensaver\n󰔎 Nightlight\n󱫖 Idle Lock\n󰍜 Top Bar") in
*Screensaver*) $OMARCHY_BIN_PATH/omarchy-launch-screensaver ;;
*Nightlight*) $OMARCHY_BIN_PATH/omarchy-toggle-nightlight ;;
*Idle*) $OMARCHY_BIN_PATH/omarchy-toggle-idle ;;
*Bar*) pkill -SIGUSR1 waybar ;;
*) show_main_menu ;;
esac
}
show_setup_menu() {
local options=" Audio\n Wifi\n󰂯 Bluetooth\n󱐋 Power Profile\n󰍹 Monitors"
[ -f ~/.config/hypr/bindings.conf ] && options="$options\n Keybindings"
[ -f ~/.config/hypr/input.conf ] && options="$options\n Input"
options="$options\n Configs\n󰈷 Fingerprint\n Fido2"
case $(menu "Setup" "$options") in
*Audio*) alacritty --class=Wiremix -e wiremix ;;
*Wifi*) alacritty --class=Impala -e impala ;;
*Bluetooth*) blueberry ;;
*Power*) show_setup_power_menu ;;
*Monitors*) edit_in_nvim ~/.config/hypr/monitors.conf ;;
*Keybindings*) edit_in_nvim ~/.config/hypr/bindings.conf ;;
*Input*) edit_in_nvim ~/.config/hypr/input.conf ;;
*Configs*) show_setup_configs_menu ;;
*Fingerprint*) terminal $OMARCHY_BIN_PATH/omarchy-setup-fingerprint ;;
*Fido2*) terminal $OMARCHY_BIN_PATH/omarchy-setup-fido2 ;;
*) show_main_menu ;;
esac
}
show_setup_power_menu() {
current_profile=$(powerprofilesctl get)
new_profile=$(menu "Power Profile" "$($OMARCHY_BIN_PATH/omarchy-powerprofiles-list)" "-a '${current_profile}'")
if [[ "$new_profile" == "CNCLD" || -z "$new_profile" ]]; then
show_main_menu
else
powerprofilesctl set "$new_profile"
fi
}
show_setup_configs_menu() {
case $(menu "Setup" " Hyprland\n Hypridle\n Hyprlock\n Hyprsunset\n Swayosd\n󰌧 Walker\n󰍜 Waybar\n󰞅 XCompose") in
*Hyprland*) edit_in_nvim ~/.config/hypr/hyprland.conf ;;
*Hypridle*) edit_in_nvim ~/.config/hypr/hypridle.conf && ~/.local/share/omarchy/bin/omarchy-restart-hypridle ;;
*Hyprlock*) edit_in_nvim ~/.config/hypr/hyprlock.conf ;;
*Hyprsunset*) edit_in_nvim ~/.config/hypr/hyprsunset.conf && ~/.local/share/omarchy/bin/omarchy-restart-hyprsunset ;;
*Swayosd*) edit_in_nvim ~/.config/swayosd/config.toml && ~/.local/share/omarchy/bin/omarchy-restart-swayosd ;;
*Walker*) edit_in_nvim ~/.config/walker/config.toml && ~/.local/share/omarchy/bin/omarchy-restart-walker ;;
*Waybar*) edit_in_nvim ~/.config/waybar/config.jsonc && ~/.local/share/omarchy/bin/omarchy-restart-waybar ;;
*XCompose*) edit_in_nvim ~/.XCompose && ~/.local/share/omarchy/bin/omarchy-restart-xcompose ;;
*) show_main_menu ;;
esac
}
show_install_menu() {
case $(menu "Install" "󰣇 Package\n Web App\n Editor\n󰸌 Theme\n Background\n Font\n Dropbox\n Steam\n Docker DBs") in
*Package*) terminal $OMARCHY_BIN_PATH/omarchy-pkg-install ;;
*Web*) terminal $OMARCHY_BIN_PATH/omarchy-webapp-install ;;
*Editor*) show_install_editor_menu ;;
*Theme*) terminal $OMARCHY_BIN_PATH/omarchy-theme-install ;;
*Background*) nautilus ~/.config/omarchy/current/theme/backgrounds ;;
*Font*) show_install_font_menu ;;
*Dropbox*) terminal $OMARCHY_BIN_PATH/omarchy-setup-dropbox ;;
*Steam*) terminal $OMARCHY_BIN_PATH/omarchy-setup-steam ;;
*Docker*) terminal $OMARCHY_BIN_PATH/omarchy-setup-docker-dbs ;;
*) show_main_menu ;;
esac
}
show_install_editor_menu() {
case $(menu "Install" " VSCode\n Cursor\n Zed") in
*VSCode*) install_and_launch "VSCode" "visual-studio-code-bin" "code" ;;
*Cursor*) install_and_launch "Cursor" "cursor-bin" "cursor-cursor" ;;
*Zed*) install_and_launch "Zed" "zed" "dev.zed.Zed" ;;
*) show_install_menu ;;
esac
}
show_install_font_menu() {
case $(menu "Install" " Meslo LG Mono\n Fira Code\n Victor Code\n Bistream Vera Mono" "-w 350") in
*Meslo*) install_font "Meslo LG Mono" "ttf-meslo-nerd" "MesloLGL 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" ;;
*Bistream*) install_font "Bistream Vera Code" "ttf-bitstream-vera-mono-nerd" "BitstromWera Nerd Font" ;;
*) show_install_menu ;;
esac
}
show_remove_menu() {
case $(menu "Remove" "󰣇 Package\n Web App\n󰸌 Theme\n󰈷 Fingerprint\n Fido2") in
*Package*) terminal $OMARCHY_BIN_PATH/omarchy-pkg-remove ;;
*Web*) terminal $OMARCHY_BIN_PATH/omarchy-webapp-remove ;;
*Theme*) present_terminal $OMARCHY_BIN_PATH/omarchy-theme-remove ;;
*Fingerprint*) terminal "$OMARCHY_BIN_PATH/omarchy-setup-fingerprint --remove" ;;
*Fido2*) terminal "$OMARCHY_BIN_PATH/omarchy-setup-fido2 --remove" ;;
*) show_main_menu ;;
esac
}
show_update_menu() {
case $(menu "Update" "󰣇 Omarchy\n Configs\n󰸌 Themes\n Timezone") in
*Omarchy*) terminal $OMARCHY_BIN_PATH/omarchy-update ;;
*Configs*) show_update_configs_menu ;;
*Themes*) terminal $OMARCHY_BIN_PATH/omarchy-theme-update ;;
*Timezone*) $OMARCHY_BIN_PATH/omarchy-cmd-tzupdate ;;
*) show_main_menu ;;
esac
}
show_update_configs_menu() {
case $(menu "Use default config" " Hyprland\n Hypridle\n Hyprlock\n Hyprsunset\n󱣴 Plymouth\n Swayosd\n󰌧 Walker\n󰍜 Waybar") in
*Hyprland*) present_terminal $OMARCHY_BIN_PATH/omarchy-refresh-hyprland ;;
*Hypridle*) present_terminal $OMARCHY_BIN_PATH/omarchy-refresh-hypridle ;;
*Hyprlock*) present_terminal $OMARCHY_BIN_PATH/omarchy-refresh-hyprlock ;;
*Hyprsunset*) present_terminal $OMARCHY_BIN_PATH/omarchy-refresh-hyprsunset ;;
*Plymouth*) present_terminal $OMARCHY_BIN_PATH/omarchy-refresh-plymouth ;;
*Swayosd*) present_terminal $OMARCHY_BIN_PATH/omarchy-refresh-swayosd ;;
*Walker*) present_terminal $OMARCHY_BIN_PATH/omarchy-refresh-walker ;;
*Waybar*) present_terminal $OMARCHY_BIN_PATH/omarchy-refresh-waybar ;;
*) show_main_menu ;;
esac
}
show_system_menu() {
case $(menu "System" " Lock\n󰤄 Suspend\n Relaunch\n󰜉 Restart\n󰐥 Shutdown") in
*Lock*) hyprlock ;;
*Suspend*) systemctl suspend ;;
*Relaunch*) uwsm stop ;;
*Restart*) systemctl reboot ;;
*Shutdown*) systemctl poweroff ;;
*) show_main_menu ;;
esac
}
show_main_menu() {
go_to_menu "$(menu "Go" "󰀻 Apps\n󰧑 Learn\n Capture\n󰔎 Toggle\n Style\n Setup\n󰉉 Install\n󰭌 Remove\n Update\n About\n System")"
}
go_to_menu() {
case "${1,,}" in
*apps*) walker -p "Launch…" ;;
*learn*) show_learn_menu ;;
*style*) show_style_menu ;;
*theme*) show_theme_menu ;;
*capture*) show_capture_menu ;;
*screenshot*) show_screenshot_menu ;;
*screenrecord*) show_screenrecord_menu ;;
*toggle*) show_toggle_menu ;;
*setup*) show_setup_menu ;;
*install*) show_install_menu ;;
*remove*) show_remove_menu ;;
*update*) show_update_menu ;;
*system*) show_system_menu ;;
*about*) gtk-launch About.desktop ;;
esac
}
if [[ -n "$1" ]]; then
go_to_menu "$1"
else
show_main_menu
fi

View File

@@ -3,34 +3,47 @@
# A script to display Hyprland keybindings defined in your configuration
# using walker for an interactive search menu.
USER_HYPRLAND_CONF="$HOME/.config/hypr/hyprland.conf"
OMARCHY_BINDINGS_CONF="$HOME/.local/share/omarchy/default/hypr/bindings.conf \
$HOME/.local/share/omarchy/default/hypr/bindings/tiling.conf \
$HOME/.local/share/omarchy/default/hypr/bindings/utilities.conf \
$HOME/.local/share/omarchy/default/hypr/bindings/media.conf"
# Fetch dynamic keybindings from Hyprland
#
# Also do some pre-processing:
# - Remove standard Omarchy bin path prefix
# - Remove uwsm prefix
# - Map numeric modifier key mask to a textual rendition
# - Output comma-separated values that the parser can understand
dynamic_bindings() {
hyprctl -j binds | \
jq -r '.[] | {modmask, key, keycode, description, dispatcher, arg} | "\(.modmask),\(.key)@\(.keycode),\(.description),\(.dispatcher),\(.arg)"' | \
sed -r \
-e 's/null//' \
-e 's,~/.local/share/omarchy/bin/,,' \
-e 's,uwsm app -- ,,' \
-e 's/@0//' \
-e 's/,@/,code:/' \
-e 's/^0,/,/' \
-e 's/^1,/SHIFT,/' \
-e 's/^4,/CTRL,/' \
-e 's/^5,/SHIFT CTRL,/' \
-e 's/^8,/ALT,/' \
-e 's/^9,/SHIFT ALT,/' \
-e 's/^12,/CTRL ALT,/' \
-e 's/^13,/SHIFT CTRL ALT,/' \
-e 's/^64,/SUPER,/' \
-e 's/^65,/SUPER SHIFT,/' \
-e 's/^68,/SUPER CTRL,/' \
-e 's/^69,/SUPER SHIFT CTRL,/' \
-e 's/^72,/SUPER ALT,/'
}
# Process the configuration file to extract and format keybindings
# 1. `grep` finds all lines starting with 'bind' (allowing for leading spaces).
# 2. The first `sed` removes comments (anything after a '#').
# 3. `awk` does the heavy lifting of formatting the output.
# - It sets the field separator to a comma ','.
# - It removes the 'bind... =' part from the beginning of the line.
# - It joins the key combination (e.g., "SUPER + Q").
# - It joins the command that the key executes.
# - It prints everything in a nicely aligned format.
# 4. The final `sed` cleans up any leftover commas from the end of lines.
grep -h '^[[:space:]]*bind' $USER_HYPRLAND_CONF $OMARCHY_BINDINGS_CONF |
sed 's/#.*//' |
sed '/^[[:space:]]*$/d' |
sort -u |
# Parse and format keybindings
#
# `awk` does the heavy lifting:
# - Set the field separator to a comma ','.
# - Joins the key combination (e.g., "SUPER + Q").
# - Joins the command that the key executes.
# - Prints everything in a nicely aligned format.
parse_bindings() {
awk -F, '
{
# Strip trailing comments
sub(/#.*/, "");
# Remove the "bind... =" part and surrounding whitespace
sub(/^[[:space:]]*bind[^=]*=(\+[[:space:]])?(exec, )?[[:space:]]*/, "", $1);
# Combine the modifier and key (first two fields)
key_combo = $1 " + " $2;
@@ -38,27 +51,36 @@ grep -h '^[[:space:]]*bind' $USER_HYPRLAND_CONF $OMARCHY_BINDINGS_CONF |
gsub(/^[ \t]*\+?[ \t]*/, "", key_combo);
gsub(/[ \t]+$/, "", key_combo);
# Reconstruct the command from the remaining fields
action = "";
for (i = 3; i <= NF; i++) {
action = action $i (i < NF ? "," : "");
}
# Use description, if set
action = $3;
# Clean up trailing commas, remove leading "exec, ", and trim
sub(/,$/, "", action);
gsub(/(^|,)[[:space:]]*exec[[:space:]]*,?/, "", action);
gsub(/^[ \t]+|[ \t]+$/, "", action);
gsub(/[ \t]+/, " ", key_combo); # Collapse multiple spaces to one
if (action == "") {
# Reconstruct the command from the remaining fields
for (i = 4; i <= NF; i++) {
action = action $i (i < NF ? "," : "");
}
# Clean up trailing commas, remove leading "exec, ", and trim
sub(/,$/, "", action);
gsub(/(^|,)[[:space:]]*exec[[:space:]]*,?/, "", action);
gsub(/^[ \t]+|[ \t]+$/, "", action);
gsub(/[ \t]+/, " ", key_combo); # Collapse multiple spaces to one
if (action != "") {
# Escape XML entities
gsub(/&/, "\\&amp;", action);
gsub(/</, "\\&lt;", action);
gsub(/>/, "\\&gt;", action);
gsub(/"/, "\\&quot;", action);
gsub(/'"'"'/, "\\&apos;", action);
}
if (action != "") {
printf "%-35s → %s\n", key_combo, action;
}
}' |
}'
}
dynamic_bindings | \
sort -u | \
parse_bindings | \
walker --dmenu --theme keybindings -p 'Keybindings'

View File

@@ -1,23 +0,0 @@
#!/bin/bash
show_power_menu() {
# The first characters are invisible sort keys.
local menu_options=" Lock
󱄄 Save
󰤄 Suspend
 Relaunch
󰜉 Restart
󰐥 Shutdown"
local selection=$(echo -e "$menu_options" | walker --dmenu --theme dmenu_150)
case "$selection" in
*Lock*) hyprlock ;;
*Save*) ~/.local/share/omarchy/bin/omarchy-launch-screensaver ;;
*Suspend*) systemctl suspend ;;
*Relaunch*) uwsm stop ;;
*Restart*) systemctl reboot ;;
*Shutdown*) systemctl poweroff ;;
esac
}
show_power_menu

View File

@@ -1,26 +1,18 @@
#!/bin/bash
# Exit immediately if a command exits with a non-zero status
set -e
# Create the migrations state directory, we will store an empty file for each migration that has already been performed.
# Where we store an empty file for each migration that has already been performed.
STATE_DIR="$HOME/.local/state/omarchy/migrations"
mkdir -p "$STATE_DIR"
# Run any pending migrations
cd ~/.local/share/omarchy
for file in migrations/*.sh; do
for file in ~/.local/share/omarchy/migrations/*.sh; do
filename=$(basename "$file")
migrate_at="${filename%.sh}"
# Migration already applied, to re-run it simply delete the state file and try again
[ -e "${STATE_DIR}/$filename" ] && continue
echo -e "\e[32m\nRunning migration (${filename%.sh})\e[0m"
source $file
touch "${STATE_DIR}/$filename"
if [[ ! -f "$STATE_DIR/$filename" ]]; then
echo -e "\e[32m\nRunning migration (${filename%.sh})\e[0m"
source $file
touch "$STATE_DIR/$filename"
fi
done
# Back to where we came from
cd - >/dev/null

9
bin/omarchy-pkg-install Executable file
View File

@@ -0,0 +1,9 @@
#!/bin/bash
pkg_name=$(yay -Slq | fzf --multi --preview 'yay -Sii {1}' --preview-window=down:75%)
if [[ -n "$pkg_name" ]]; then
yay -Sy --noconfirm "$pkg_name"
sudo updatedb
~/.local/share/omarchy/bin/omarchy-show-done
fi

9
bin/omarchy-pkg-remove Executable file
View File

@@ -0,0 +1,9 @@
#!/bin/bash
pkg_name=$(yay -Qqe | fzf --multi --preview 'yay -Qi {1}' --preview-window=down:75%)
if [[ -n "$pkg_name" ]]; then
yay -Rns --noconfirm "$pkg_name"
sudo updatedb
~/.local/share/omarchy/bin/omarchy-show-done
fi

5
bin/omarchy-powerprofiles-list Executable file
View File

@@ -0,0 +1,5 @@
#!/bin/bash
powerprofilesctl list |
awk '/^\s*[* ]\s*[a-zA-Z0-9\-]+:$/ { gsub(/^[*[:space:]]+|:$/,""); print }' |
tac

View File

@@ -20,16 +20,21 @@ user_config_file="${HOME}/.config/$config_file"
default_config_file="${HOME}/.local/share/omarchy/config/$config_file"
backup_config_file="$user_config_file.bak.$(date +%s)"
# Create preliminary backup
cp -f "$user_config_file" "$backup_config_file" 2>/dev/null
if [[ -f "$user_config_file" ]]; then
# Create preliminary backup
cp -f "$user_config_file" "$backup_config_file" 2>/dev/null
# Replace config with new default
cp -f "$default_config_file" "$user_config_file" 2>/dev/null
# Replace config with new default
cp -f "$default_config_file" "$user_config_file" 2>/dev/null
# Compare and delete/inform accordingly
if cmp -s "$user_config_file" "$backup_config_file"; then
rm "$backup_config_file"
# Compare and delete/inform accordingly
if cmp -s "$user_config_file" "$backup_config_file"; then
rm "$backup_config_file"
else
echo -e "\e[31mReplaced $user_config_file with new Omarchy default.\nSaved backup as ${backup_config_file}.\n\n\e[32mChanges:\e[0m"
diff "$user_config_file" "$backup_config_file"
fi
else
echo -e "\e[31mReplaced $user_config_file with new Omarchy default.\nSaved backup as ${backup_config_file}.\n\n\e[32mChanges:\e[0m"
diff "$user_config_file" "$backup_config_file"
# Config file did not exist already
cp -f "$default_config_file" "$user_config_file" 2>/dev/null
fi

View File

@@ -1,6 +1,4 @@
#!/bin/bash
omarchy-refresh-config hypr/hypridle.conf
pkill -x hypridle
uwsm app -- hypridle >/dev/null 2>&1 &
~/.local/share/omarchy/bin/omarchy-refresh-config hypr/hypridle.conf
~/.local/share/omarchy/bin/omarchy-restart-hypridle

7
bin/omarchy-refresh-hyprland Executable file
View File

@@ -0,0 +1,7 @@
#!/bin/bash
~/.local/share/omarchy/bin/omarchy-refresh-config hypr/autostart.conf
~/.local/share/omarchy/bin/omarchy-refresh-config hypr/bindings.conf
~/.local/share/omarchy/bin/omarchy-refresh-config hypr/envs.conf
~/.local/share/omarchy/bin/omarchy-refresh-config hypr/input.conf
~/.local/share/omarchy/bin/omarchy-refresh-config hypr/hyprland.conf

View File

@@ -1,4 +1,3 @@
#!/bin/bash
# Overwrite local Hyprlock settings with the latest in Omarchy
omarchy-refresh-config hypr/hyprlock.conf
~/.local/share/omarchy/bin/omarchy-refresh-config hypr/hyprlock.conf

4
bin/omarchy-refresh-hyprsunset Executable file
View File

@@ -0,0 +1,4 @@
#!/bin/bash
~/.local/share/omarchy/bin/omarchy-refresh-config hypr/hyprsunset.conf
~/.local/share/omarchy/bin/omarchy-restart-hyprsunset

View File

@@ -1,7 +1,5 @@
#!/bin/bash
omarchy-refresh-config swayosd/config.toml
omarchy-refresh-config swayosd/style.css
pkill swayosd-server
setsid uwsm app -- swayosd-server &>/dev/null &
~/.local/share/omarchy/bin/omarchy-refresh-config swayosd/config.toml
~/.local/share/omarchy/bin/omarchy-refresh-config swayosd/style.css
~/.local/share/omarchy/bin/omarchy-restart-swayosd

View File

@@ -1,6 +1,4 @@
#!/bin/bash
omarchy-refresh-config walker/config.toml
pkill walker
setsid uwsm app -- walker --gapplication-service &
~/.local/share/omarchy/bin/omarchy-refresh-config walker/config.toml
~/.local/share/omarchy/bin/omarchy-restart-walker

View File

@@ -1,7 +1,5 @@
#!/bin/bash
omarchy-refresh-config waybar/config.jsonc
omarchy-refresh-config waybar/style.css
# Restart waybar
omarchy-restart-waybar
~/.local/share/omarchy/bin/omarchy-refresh-config waybar/config.jsonc
~/.local/share/omarchy/bin/omarchy-refresh-config waybar/style.css
~/.local/share/omarchy/bin/omarchy-restart-waybar

4
bin/omarchy-restart-app Executable file
View File

@@ -0,0 +1,4 @@
#!/bin/bash
pkill -x $1
setsid uwsm app -- $1 >/dev/null 2>&1 &

3
bin/omarchy-restart-hypridle Executable file
View File

@@ -0,0 +1,3 @@
#!/bin/bash
~/.local/share/omarchy/bin/omarchy-restart-app hypridle

3
bin/omarchy-restart-hyprsunset Executable file
View File

@@ -0,0 +1,3 @@
#!/bin/bash
~/.local/share/omarchy/bin/omarchy-restart-app hyprsunset

3
bin/omarchy-restart-swayosd Executable file
View File

@@ -0,0 +1,3 @@
#!/bin/bash
~/.local/share/omarchy/bin/omarchy-restart-app swayosd-server

4
bin/omarchy-restart-walker Executable file
View File

@@ -0,0 +1,4 @@
#!/bin/bash
pkill walker
setsid uwsm app -- walker --gapplication-service &

View File

@@ -1,4 +1,3 @@
#!/bin/bash
killall waybar || true
setsid uwsm app -- waybar &>/dev/null &
~/.local/share/omarchy/bin/omarchy-restart-app waybar

3
bin/omarchy-restart-xcompose Executable file
View File

@@ -0,0 +1,3 @@
#!/bin/bash
~/.local/share/omarchy/bin/omarchy-restart-app fcitx5

19
bin/omarchy-setup-docker-dbs Executable file
View File

@@ -0,0 +1,19 @@
#!/bin/bash
~/.local/share/omarchy/bin/omarchy-show-logo
options=("MariaDB" "MySQL" "Redis" "PostgreSQL")
choices=$(printf "%s\n" "${options[@]}" | gum choose --no-limit --header "Select databases (space to select, return to install, esc to cancel)") || main_menu
if [[ -n "$choices" ]]; then
for db in $choices; do
case $db in
MySQL) sudo docker run -d --restart unless-stopped -p "127.0.0.1:3306:3306" --name=mysql8 -e MYSQL_ROOT_PASSWORD= -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql:8.4 ;;
PostgreSQL) sudo docker run -d --restart unless-stopped -p "127.0.0.1:5432:5432" --name=postgres16 -e POSTGRES_HOST_AUTH_METHOD=trust postgres:16 ;;
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 ;;
esac
done
fi
~/.local/share/omarchy/bin/omarchy-show-done

View File

@@ -1,5 +1,7 @@
#!/bin/bash
~/.local/share/omarchy/bin/omarchy-show-logo
echo "Installing all dependencies..."
yay -S --noconfirm --needed \
dropbox dropbox-cli libappindicator-gtk3 python-gpgme nautilus-dropbox
@@ -7,3 +9,5 @@ yay -S --noconfirm --needed \
echo "Starting Dropbox..."
uwsm app -- dropbox-cli start &>/dev/null &
echo "See Dropbox icon behind  hover tray in top right and right-click for setup."
~/.local/share/omarchy/bin/omarchy-show-done

View File

@@ -1,11 +1,15 @@
#!/bin/bash
~/.local/share/omarchy/bin/omarchy-show-logo
if [[ "--remove" == "$1" ]]; then
echo -e "\e[32mLet's remove your Fido2 device from sudo authentication.\n\e[0m"
yay -Rns --noconfirm libfido2 pam-u2f
sudo rm -rf /etc/fido2
sudo sed -i '\|^auth[[:space:]]\+sufficient[[:space:]]\+pam_u2f\.so[[:space:]]\+cue[[:space:]]\+authfile=/etc/fido2/fido2$|d' /etc/pam.d/sudo
echo -e "\e[32m\nYou've successfully removed the fido2 device setup.\e[0m"
else
echo -e "\e[32mLet's setup your Fido2 device for sudo authentication.\n\e[0m"
yay -S --noconfirm --needed libfido2 pam-u2f
tokens=$(fido2-token -L)
@@ -18,6 +22,10 @@ else
sudo mkdir -p /etc/fido2
echo -e "\e[32m\nLet's setup your device by confirming on the device now.\e[0m"
pamu2fcfg >/tmp/fido2 # This needs to run as the user
if [ $? -ne 0 ]; then
echo -e "\e[31m\nSomething went wrong. Maybe try again?\e[0m"
exit 1
fi
sudo mv /tmp/fido2 /etc/fido2/fido2
fi
@@ -31,3 +39,5 @@ else
fi
fi
fi
~/.local/share/omarchy/bin/omarchy-show-done

View File

@@ -1,11 +1,15 @@
#!/bin/bash
~/.local/share/omarchy/bin/omarchy-show-logo
if [[ "--remove" == "$1" ]]; then
echo -e "\e[32mLet's remove your fingerprint scanner from authentication.\n\e[0m"
yay -Rns --noconfirm fprintd
sudo rm -rf /etc/pam.d/polkit-1
sudo sed -i '/pam_fprintd\.so/d' /etc/pam.d/sudo
echo -e "\e[32mYou've successfully removed the fingerprint setup.\e[0m"
else
echo -e "\e[32mLet's setup your fingerprint scanner for authentication.\n\e[0m"
yay -S --noconfirm --needed fprintd usbutils
if ! lsusb | grep -Eiq 'fingerprint|synaptics|goodix'; then
@@ -41,3 +45,5 @@ EOF
fi
fi
fi
~/.local/share/omarchy/bin/omarchy-show-done

View File

@@ -1,5 +1,7 @@
#!/bin/bash
~/.local/share/omarchy/bin/omarchy-show-logo
echo "Adding multilib repository for 32-bit compatibility"
sudo sed -i '/^\s*#\[multilib\]/,/^$/{s/^\s*#//}' /etc/pacman.conf
sudo pacman -Sy
@@ -7,3 +9,5 @@ sudo pacman -Sy
echo "Now pick dependencies matching your graphics card"
yay -S steam
gtk-launch steam >/dev/null 2>&1 &
~/.local/share/omarchy/bin/omarchy-show-done

5
bin/omarchy-show-done Executable file
View File

@@ -0,0 +1,5 @@
#!/bin/bash
echo
gum spin --spinner "globe" --title "Done!" -- sleep 2
clear

7
bin/omarchy-show-logo Executable file
View File

@@ -0,0 +1,7 @@
#!/bin/bash
clear
echo -e "\033[32m"
cat <~/.local/share/omarchy/logo.txt
echo -e "\033[0m"
echo

View File

@@ -4,11 +4,17 @@
# Usage: omarchy-theme-install <git-repo-url>
if [ -z "$1" ]; then
echo "Usage: omarchy-theme-install <git-repo-url>"
~/.local/share/omarchy/bin/omarchy-show-logo
echo -e "\e[32mSee https://manuals.omamix.org/2/the-omarchy-manual/90/extra-themes\n\e[0m"
REPO_URL=$(gum input --placeholder="Git repo URL for theme" --header="")
else
REPO_URL="$1"
fi
if [ -z "$REPO_URL" ]; then
exit 1
fi
REPO_URL="$1"
THEMES_DIR="$HOME/.config/omarchy/themes"
THEME_NAME=$(basename "$REPO_URL" .git | sed -E 's/^omarchy-//; s/-theme$//')
THEME_PATH="$THEMES_DIR/$THEME_NAME"
@@ -25,4 +31,4 @@ if ! git clone "$REPO_URL" "$THEME_PATH"; then
fi
# Apply the new theme with omarchy-theme-set
omarchy-theme-set $THEME_NAME
~/.local/share/omarchy/bin/omarchy-theme-set $THEME_NAME

View File

@@ -18,14 +18,4 @@ mapfile -t themes < <(
done
)
# Show Walker menu
selection=$(printf '%s\n' "${themes[@]}" | walker --dmenu --theme dmenu_250 2>/dev/null)
# Remove any Pango markup before converting back to filename
clean_selection=$(echo "$selection" | sed -E 's/<[^>]+>//g')
# Convert to lowercase and dash-separated: "Tokyo Night" -> "tokyo-night"
selected_theme=$(echo "$clean_selection" | tr '[:upper:]' '[:lower:]' | tr ' ' '-')
# Apply the selected theme
"$HOME/.local/share/omarchy/bin/omarchy-theme-set" "$selected_theme"
printf '%s\n' "${themes[@]}"

View File

@@ -30,5 +30,5 @@ NEXT_INDEX=$(((INDEX + 1) % TOTAL))
NEW_THEME=${THEMES[$NEXT_INDEX]}
NEW_THEME_NAME=$(basename "$NEW_THEME")
"$HOME/.local/share/omarchy/bin/omarchy-theme-set" $NEW_THEME_NAME
~/.local/share/omarchy/bin/omarchy-theme-set $NEW_THEME_NAME
notify-send "Theme changed to $NEW_THEME_NAME" -t 2000

View File

@@ -4,17 +4,26 @@
# Usage: omarchy-theme-remove <theme-name>
if [ -z "$1" ]; then
echo "Usage: omarchy-theme-remove <theme-name>"
exit 1
mapfile -t extra_themes < <(find ~/.config/omarchy/themes -mindepth 1 -maxdepth 1 -type d ! -xtype l -printf '%f\n')
if [[ ${#extra_themes[@]} -gt 0 ]]; then
THEME_NAME=$(gum choose --header="Remove extra theme" "${extra_themes[@]}")
else
echo "No extra themes installed."
exit 1
fi
else
THEME_NAME="$1"
fi
THEME_NAME="$1"
THEMES_DIR="$HOME/.config/omarchy/themes"
BACKGROUND_DIR="$HOME/.config/omarchy/backgrounds"
CURRENT_DIR="$HOME/.config/omarchy/current"
THEME_PATH="$THEMES_DIR/$THEME_NAME"
BACKGROUND_PATH="$BACKGROUND_DIR/$THEME_NAME"
# Ensure a theme was set
if [ -z "$THEME_NAME" ]; then
exit 1
fi
# Check if theme exists before attempting removal
if [ ! -d "$THEME_PATH" ]; then
@@ -22,12 +31,10 @@ if [ ! -d "$THEME_PATH" ]; then
exit 1
fi
# Use readlink -f to resolve symlinks and get the absolute path
# Move to the next theme if the current theme is the one being removed
if [ "$(readlink -f "$CURRENT_DIR/theme")" = "$(readlink -f "$THEME_PATH")" ]; then
"$HOME/.local/share/omarchy/bin/omarchy-theme-next"
~/.local/share/omarchy/bin/omarchy-theme-next
fi
# Now remove the theme directory and backgrounds for THEME_NAME
# Now remove the theme directory for THEME_NAME
rm -rf "$THEME_PATH"
rm -rf "$BACKGROUND_PATH"

View File

@@ -3,7 +3,7 @@
# omarchy-theme-set: Set a theme, specified by its name.
# Usage: omarchy-theme-set <theme-name>
if [[ -z "$1" ]]; then
if [[ -z "$1" && "$1" != "CNCLD" ]]; then
echo "Usage: omarchy-theme-set <theme-name>" >&2
exit 1
fi
@@ -11,7 +11,7 @@ fi
THEMES_DIR="$HOME/.config/omarchy/themes/"
CURRENT_THEME_DIR="$HOME/.config/omarchy/current/theme"
THEME_NAME="$1"
THEME_NAME=$(echo "$1" | sed -E 's/<[^>]+>//g' | tr '[:upper:]' '[:lower:]' | tr ' ' '-')
THEME_PATH="$THEMES_DIR/$THEME_NAME"
# Check if the theme entered exists
@@ -44,11 +44,11 @@ touch "$HOME/.config/alacritty/alacritty.toml"
# Restart components to apply new theme
pkill -SIGUSR2 btop
"$HOME/.local/share/omarchy/bin/omarchy-restart-waybar"
~/.local/share/omarchy/bin/omarchy-restart-waybar
pkill swayosd-server
setsid uwsm app -- swayosd-server &>/dev/null &
makoctl reload
hyprctl reload
# Set new background
"$HOME/.local/share/omarchy/bin/omarchy-theme-bg-next"
~/.local/share/omarchy/bin/omarchy-theme-bg-next

View File

@@ -1,4 +1,9 @@
#!/bin/bash
~/.local/share/omarchy/bin/omarchy-show-logo
for dir in ~/.config/omarchy/themes/*/; do
[ -d "$dir" ] && [ ! -L "${dir%/}" ] && echo "Updating: $(basename "$dir")" && git -C "$dir" pull
done
[ -d "$dir" ] && [ ! -L "${dir%/}" ] && echo "Updating: $(basename "$dir")" && git -C "$dir" pull
done
~/.local/share/omarchy/bin/omarchy-show-done

30
bin/omarchy-toggle-nightlight Executable file
View File

@@ -0,0 +1,30 @@
#!/bin/bash
# Default temperature values
ON_TEMP=4000
OFF_TEMP=6000
# Ensure hyprsunset is running
if ! pgrep -x hyprsunset; then
setsid uwsm app -- hyprsunset &
sleep 1 # Give it time to register
fi
# Query the current temperature
CURRENT_TEMP=$(hyprctl hyprsunset temperature 2>/dev/null | grep -oE '[0-9]+')
restart_nightlighted_waybar() {
if grep -q "custom/nightlight" ~/.config/waybar/config.jsonc; then
omarchy-restart-waybar # restart waybar in case user has waybar module for hyprsunset
fi
}
if [[ "$CURRENT_TEMP" == "$OFF_TEMP" ]]; then
hyprctl hyprsunset temperature $ON_TEMP
notify-send " Nightlight screen temperature"
restart_nightlighted_waybar
else
hyprctl hyprsunset temperature $OFF_TEMP
notify-send " Daylight screen temperature"
restart_nightlighted_waybar
fi

View File

@@ -13,7 +13,7 @@ git -C $omarchy_path pull --autostash
git -C $omarchy_path diff --check || git -C $omarchy_path reset --merge
# Run migrations
"$HOME/.local/share/omarchy/bin/omarchy-migrate"
~/.local/share/omarchy/bin/omarchy-migrate
# Update system packages
echo -e "\e[32m\nUpdate system packages\e[0m"
@@ -23,3 +23,5 @@ yay -Syu --noconfirm
if [ "$(uname -r | sed 's/-arch/\.arch/')" != "$(pacman -Q linux | awk '{print $2}')" ]; then
gum confirm "Linux kernel has been updated. Reboot?" && sudo reboot now
fi
~/.local/share/omarchy/bin/omarchy-show-done

View File

@@ -1,8 +1,15 @@
#!/bin/bash
omarchy_path="$HOME/.local/share/omarchy"
latest_tag=$(git -C $omarchy_path ls-remote --tags origin | grep -v "{}" | awk '{print $2}' | sed 's#refs/tags/##' | sort -V | tail -n 1)
current_tag=$(git -C $omarchy_path describe --tags $(git -C $omarchy_path rev-list --tags --max-count=1))
# Ensure remote is reachable
if ! git -C "$omarchy_path" ls-remote &>/dev/null; then
echo "Error: Unable to reach remote repository."
exit 1
fi
latest_tag=$(git -C "$omarchy_path" ls-remote --tags origin | grep -v "{}" | awk '{print $2}' | sed 's#refs/tags/##' | sort -V | tail -n 1)
current_tag=$(git -C "$omarchy_path" describe --tags $(git -C "$omarchy_path" rev-list --tags --max-count=1))
if [[ "$current_tag" != "$latest_tag" ]]; then
echo "Omarchy update available ($latest_tag)"

48
bin/omarchy-webapp-install Executable file
View File

@@ -0,0 +1,48 @@
#!/bin/bash
if [ "$#" -ne 3 ]; then
~/.local/share/omarchy/bin/omarchy-show-logo
echo -e "\e[32mLet's create a new web app you can start with the app launcher.\n\e[0m"
APP_NAME=$(gum input --prompt "Name> " --placeholder "My favorite web app")
APP_URL=$(gum input --prompt "URL> " --placeholder "https://example.com")
ICON_URL=$(gum input --prompt "Icon URL> " --placeholder "See https://dashboardicons.com (must use PNG!)")
else
APP_NAME="$1"
APP_URL="$2"
ICON_URL="$3"
fi
if [[ -z "$APP_NAME" || -z "$APP_URL" || -z "$ICON_URL" ]]; then
echo "You must set app name, app URL, and icon URL!"
exit 1
fi
ICON_DIR="$HOME/.local/share/applications/icons"
DESKTOP_FILE="$HOME/.local/share/applications/$APP_NAME.desktop"
ICON_PATH="$ICON_DIR/$APP_NAME.png"
mkdir -p "$ICON_DIR"
if ! curl -sL -o "$ICON_PATH" "$ICON_URL"; then
echo "Error: Failed to download icon."
return 1
fi
cat >"$DESKTOP_FILE" <<EOF
[Desktop Entry]
Version=1.0
Name=$APP_NAME
Comment=$APP_NAME
Exec=chromium --new-window --ozone-platform=wayland --app="$APP_URL" --name="$APP_NAME" --class="$APP_NAME"
Terminal=false
Type=Application
Icon=$ICON_PATH
StartupNotify=true
EOF
chmod +x "$DESKTOP_FILE"
if [ "$#" -ne 3 ]; then
echo -e "You can now find $APP_NAME using the app launcher (SUPER + SPACE)\n"
~/.local/share/omarchy/bin/omarchy-show-done
fi

39
bin/omarchy-webapp-remove Executable file
View File

@@ -0,0 +1,39 @@
#!/bin/bash
ICON_DIR="$HOME/.local/share/applications/icons"
DESKTOP_DIR="$HOME/.local/share/applications/"
if [ "$#" -ne 1 ]; then
~/.local/share/omarchy/bin/omarchy-show-logo
# Find all web apps
while IFS= read -r -d '' file; do
if grep -q '^Exec=.*chromium.*--app' "$file"; then
WEB_APPS+=("$(basename "${file%.desktop}")")
fi
done < <(find "$DESKTOP_DIR" -name '*.desktop' -print0)
if ((${#WEB_APPS[@]})); then
IFS=$'\n' SORTED_WEB_APPS=($(sort <<<"${WEB_APPS[*]}"))
unset IFS
APP_NAME=$(gum choose --header "Select web app to remove..." "${SORTED_WEB_APPS[@]}")
else
echo "No web apps to remove."
exit 1
fi
else
APP_NAME="$1"
fi
if [[ -z "$APP_NAME" ]]; then
echo "You must provide web app name."
exit 1
fi
rm "$DESKTOP_DIR/$APP_NAME.desktop"
rm "$ICON_DIR/$APP_NAME.png"
if [ "$#" -ne 1 ]; then
echo -e "Removed $APP_NAME\n"
~/.local/share/omarchy/bin/omarchy-show-done
fi

View File

@@ -16,9 +16,12 @@ echo -e "\n$ansi_art\n"
sudo pacman -Sy --noconfirm --needed git
echo -e "\nCloning Omarchy..."
# Use custom repo if specified, otherwise default to basecamp/omarchy
OMARCHY_REPO="${OMARCHY_REPO:-basecamp/omarchy}"
echo -e "\nCloning Omarchy from: https://github.com/${OMARCHY_REPO}.git"
rm -rf ~/.local/share/omarchy/
git clone https://github.com/basecamp/omarchy.git ~/.local/share/omarchy >/dev/null
git clone "https://github.com/${OMARCHY_REPO}.git" ~/.local/share/omarchy >/dev/null
# Use custom branch if instructed
if [[ -n "$OMARCHY_REF" ]]; then

View File

@@ -0,0 +1,3 @@
--ozone-platform=wayland
--ozone-platform-hint=wayland
--enable-features=TouchpadOverscrollHistoryNavigation

View File

@@ -0,0 +1,2 @@
# Extra autostart processes
# exec-once = uwsm app -- my-service

25
config/hypr/bindings.conf Normal file
View File

@@ -0,0 +1,25 @@
# Application bindings
$terminal = uwsm app -- alacritty
$browser = uwsm app -- chromium --new-window --ozone-platform=wayland
$webapp = $browser --app
bindd = SUPER, return, Terminal, exec, $terminal
bindd = SUPER, F, File manager, exec, uwsm app -- nautilus --new-window
bindd = SUPER, B, Browser, exec, $browser
bindd = SUPER, M, Music, exec, uwsm app -- spotify
bindd = SUPER, N, Neovim, exec, $terminal -e nvim
bindd = SUPER, T, Activity, exec, $terminal -e btop
bindd = SUPER, D, Docker, exec, $terminal -e lazydocker
bindd = SUPER, G, Signal, exec, uwsm app -- signal-desktop
bindd = SUPER, O, Obsidian, exec, uwsm app -- obsidian -disable-gpu
bindd = SUPER, slash, Passwords, exec, uwsm app -- 1password
bindd = SUPER, A, ChatGPT, exec, $webapp="https://chatgpt.com"
bindd = SUPER SHIFT, A, Grok, exec, $webapp="https://grok.com"
bindd = SUPER, C, Calendar, exec, $webapp="https://app.hey.com/calendar/weeks/"
bindd = SUPER, E, Email, exec, $webapp="https://app.hey.com"
bindd = SUPER, Y, YouTube, exec, $webapp="https://youtube.com/"
bindd = SUPER SHIFT, G, WhatsApp, exec, $webapp="https://web.whatsapp.com/"
bindd = SUPER ALT, G, Google Messages, exec, $webapp="https://messages.google.com/web/conversations"
bindd = SUPER, X, X, exec, $webapp="https://x.com/"
bindd = SUPER SHIFT, X, X Post, exec, $webapp="https://x.com/compose/post"

3
config/hypr/envs.conf Normal file
View File

@@ -0,0 +1,3 @@
# Extra env variables
# Note: You must relaunch Hyprland after changing envs (use Super+Esc, then Relaunch)
# env = MY_GLOBAL_ENV,setting

View File

@@ -7,8 +7,8 @@ general {
}
listener {
timeout = 60 # 1min
on-timeout = omarchy-launch-screensaver # start screensaver
timeout = 150 # 2.5min
on-timeout = pidof hyprlock || omarchy-launch-screensaver # start screensaver (if we haven't locked already)
}
listener {

View File

@@ -1,13 +1,6 @@
# Learn how to configure Hyprland: https://wiki.hyprland.org/Configuring/
# You're encouraged to tailor your Hyprland config in this file by adding or overwriting any settings.
# But don't change anything that lives in ~/.local/share/omarchy, if you can help it!
# Those files are overwritten when Omarchy is updated.
# Change your personal monitor setup in here to keep the main config portable
source = ~/.config/hypr/monitors.conf
# Use defaults Omarchy defaults
# Use defaults Omarchy defaults (but don't edit these directly!)
source = ~/.local/share/omarchy/default/hypr/autostart.conf
source = ~/.local/share/omarchy/default/hypr/bindings/media.conf
source = ~/.local/share/omarchy/default/hypr/bindings/tiling.conf
@@ -18,64 +11,9 @@ source = ~/.local/share/omarchy/default/hypr/input.conf
source = ~/.local/share/omarchy/default/hypr/windows.conf
source = ~/.config/omarchy/current/theme/hyprland.conf
# Application bindings
$terminal = uwsm app -- alacritty
$browser = uwsm app -- chromium --new-window --ozone-platform=wayland
$webapp = $browser --app
bind = SUPER, return, exec, $terminal
bind = SUPER, F, exec, uwsm app -- nautilus --new-window
bind = SUPER, B, exec, $browser
bind = SUPER, M, exec, uwsm app -- spotify
bind = SUPER, N, exec, $terminal -e nvim
bind = SUPER, T, exec, $terminal -e btop
bind = SUPER, D, exec, $terminal -e lazydocker
bind = SUPER, G, exec, uwsm app -- signal-desktop
bind = SUPER, O, exec, uwsm app -- obsidian -disable-gpu
bind = SUPER, slash, exec, uwsm app -- 1password
bind = SUPER, A, exec, $webapp="https://chatgpt.com"
bind = SUPER SHIFT, A, exec, $webapp="https://grok.com"
bind = SUPER, C, exec, $webapp="https://app.hey.com/calendar/weeks/"
bind = SUPER, E, exec, $webapp="https://app.hey.com"
bind = SUPER, Y, exec, $webapp="https://youtube.com/"
bind = SUPER SHIFT, G, exec, $webapp="https://web.whatsapp.com/"
bind = SUPER ALT, G, exec, $webapp="https://messages.google.com/web/conversations"
bind = SUPER, X, exec, $webapp="https://x.com/"
bind = SUPER SHIFT, X, exec, $webapp="https://x.com/compose/post"
# Extra autostart processes
# exec-once = uwsm app -- my-service
# Extra env variables
# Note: You must relaunch Hyprland after changing envs (use Super+Esc, then Relaunch)
# env = MY_GLOBAL_ENV,setting
# Control your input devices
# See https://wiki.hypr.land/Configuring/Variables/#input
input {
# Use multiple keyboard layouts and switch between them with Alt + Space
# kb_layout = us,dk
kb_options = compose:caps # ,grp:alt_space_toggle
# Change speed of keyboard repeat
repeat_rate = 40
repeat_delay = 600
# Increase sensitity for mouse/trackpack (default: 0)
# sensitivity = 0.35
touchpad {
# Use natural (inverse) scrolling
# natural_scroll = true
# Use two-finger clicks for right-click instead of lower-right corner
# clickfinger_behavior = true
# Control the speed of your scrolling
scroll_factor = 0.4
}
}
# Scroll faster in the terminal
windowrule = scrolltouchpad 1.5, class:Alacritty
# Change your own setup in these files (and overwrite any settings from defaults!)
source = ~/.config/hypr/monitors.conf
source = ~/.config/hypr/input.conf
source = ~/.config/hypr/bindings.conf
source = ~/.config/hypr/envs.conf
source = ~/.config/hypr/autostart.conf

View File

@@ -0,0 +1,6 @@
# Makes hyprsunset do nothing to the screen by default
# Without this, the default applies some tint to the monitor
profile {
time = 00:00
identity = true
}

28
config/hypr/input.conf Normal file
View File

@@ -0,0 +1,28 @@
# Control your input devices
# See https://wiki.hypr.land/Configuring/Variables/#input
input {
# Use multiple keyboard layouts and switch between them with Alt + Space
# kb_layout = us,dk
kb_options = compose:caps # ,grp:alt_space_toggle
# Change speed of keyboard repeat
repeat_rate = 40
repeat_delay = 600
# Increase sensitity for mouse/trackpack (default: 0)
# sensitivity = 0.35
touchpad {
# Use natural (inverse) scrolling
# natural_scroll = true
# Use two-finger clicks for right-click instead of lower-right corner
# clickfinger_behavior = true
# Control the speed of your scrolling
scroll_factor = 0.4
}
}
# Scroll faster in the terminal
windowrule = scrolltouchpad 1.5, class:Alacritty

View File

@@ -1,4 +1,4 @@
[server]
show_percentage = true
max_volume = 150
max_volume = 100
style = "./style.css"

View File

@@ -9,7 +9,7 @@ window {
}
label {
font-family: 'CaskaydiaMono Nerd Font', monospace;
font-family: 'CaskaydiaMono Nerd Font';
font-size: 11pt;
color: @label;

View File

@@ -42,7 +42,7 @@ on_query_change = ""
[list]
dynamic_sub = true
keyboard_scroll_style = "emacs"
max_entries = 50
max_entries = 200
show_initial_entries = true
single_click = true
visibility_threshold = 20

View File

@@ -5,6 +5,7 @@
"spacing": 0,
"height": 26,
"modules-left": [
"custom/omarchy",
"hyprland/workspaces"
],
"modules-center": [
@@ -43,8 +44,13 @@
"5": []
}
},
"custom/omarchy": {
"format": "",
"on-click": "~/.local/share/omarchy/bin/omarchy-menu",
"tooltip-format": "SUPER + ALT + SPACE"
},
"custom/update": {
"format": "",
"format": "",
"exec": "~/.local/share/omarchy/bin/omarchy-update-available",
"on-click": "alacritty --class Omarchy --title Omarchy -e omarchy-update",
"interval": 3600

View File

@@ -37,7 +37,7 @@
#bluetooth,
#pulseaudio,
#clock,
#custom-power-menu {
#custom-omarchy {
min-width: 12px;
margin: 0 7.5px;
}

View File

@@ -0,0 +1,11 @@
[colors.primary]
background = "0x000000"
[colors.cursor]
cursor = "0x000000"
[font]
size = 18.0
[window]
opacity = 1.0

View File

@@ -15,59 +15,38 @@ iso2sd() {
fi
}
# Create a desktop launcher for a web app
web2app() {
if [ "$#" -ne 3 ]; then
echo "Usage: web2app <AppName> <AppURL> <IconURL> (IconURL must be in PNG -- use https://dashboardicons.com)"
return 1
# Format an entire drive for a single partition using ext4
format-drive() {
if [ $# -ne 2 ]; then
echo "Usage: format-drive <device> <name>"
echo "Example: format-drive /dev/sda 'My Stuff'"
echo -e "\nAvailable drives:"
lsblk -d -o NAME -n | awk '{print "/dev/"$1}'
else
echo "WARNING: This will completely erase all data on $1 and label it '$2'."
read -rp "Are you sure you want to continue? (y/N): " confirm
if [[ "$confirm" =~ ^[Yy]$ ]]; then
sudo wipefs -a "$1"
sudo dd if=/dev/zero of="$1" bs=1M count=100 status=progress
sudo parted -s "$1" mklabel gpt
sudo parted -s "$1" mkpart primary ext4 1MiB 100%
sudo mkfs.ext4 -L "$2" "$([[ $1 == *"nvme"* ]] && echo "${1}p1" || echo "${1}1")"
echo "Drive $1 formatted and labeled '$2'."
fi
fi
local APP_NAME="$1"
local APP_URL="$2"
local ICON_URL="$3"
local ICON_DIR="$HOME/.local/share/applications/icons"
local DESKTOP_FILE="$HOME/.local/share/applications/${APP_NAME}.desktop"
local ICON_PATH="${ICON_DIR}/${APP_NAME}.png"
mkdir -p "$ICON_DIR"
if ! curl -sL -o "$ICON_PATH" "$ICON_URL"; then
echo "Error: Failed to download icon."
return 1
fi
cat > "$DESKTOP_FILE" <<EOF
[Desktop Entry]
Version=1.0
Name=$APP_NAME
Comment=$APP_NAME
Exec=chromium --new-window --ozone-platform=wayland --app="$APP_URL" --name="$APP_NAME" --class="$APP_NAME"
Terminal=false
Type=Application
Icon=$ICON_PATH
StartupNotify=true
EOF
chmod +x "$DESKTOP_FILE"
}
web2app-remove() {
if [ "$#" -ne 1 ]; then
echo "Usage: web2app-remove <AppName>"
return 1
fi
local APP_NAME="$1"
local ICON_DIR="$HOME/.local/share/applications/icons"
local DESKTOP_FILE="$HOME/.local/share/applications/${APP_NAME}.desktop"
local ICON_PATH="${ICON_DIR}/${APP_NAME}.png"
rm "$DESKTOP_FILE"
rm "$ICON_PATH"
# Transcode a video to a good-balance 1080p that's great for sharing online
transcode-video-1080p() {
ffmpeg -i $1 -vf scale=1920:1080 -c:v libx264 -preset fast -crf 23 -c:a copy ${1%.*}-1080p.mp4
}
# Ensure changes to ~/.XCompose are immediately available
refresh-xcompose() {
pkill fcitx5
uwsm app -- fcitx5 >/dev/null 2>&1 &
# Transcode a video to a good-balance 4K that's great for sharing online
transcode-video-4K() {
ffmpeg -i $1 -c:v libx265 -preset slow -crf 24 -c:a aac -b:a 192k ${1%.*}-optimized.mp4
}
# Transcode PNG to JPG image that's great for shrinking wallpapers
transcode-png2jpg() {
convert $1 -quality 95 -strip $(1%.*).jpg
}

8
default/hypr/apps.conf Normal file
View File

@@ -0,0 +1,8 @@
# App-specific tweaks
source = ~/.local/share/omarchy/default/hypr/apps/pip.conf
source = ~/.local/share/omarchy/default/hypr/apps/chromium.conf
source = ~/.local/share/omarchy/default/hypr/apps/hyprshot.conf
source = ~/.local/share/omarchy/default/hypr/apps/retroarch.conf
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/walker.conf

View File

@@ -0,0 +1,6 @@
# Force chromium into a tile to deal with --app bug
windowrule = tile, class:^(Chromium)$
# Only slight opacity when unfocused
windowrule = opacity 1 0.97, class:^(Chromium|chromium|google-chrome|google-chrome-unstable)$
windowrule = opacity 1 1, initialTitle:^(youtube.com_/)$ # Youtube

View File

@@ -0,0 +1,2 @@
# Remove 1px border around hyprshot screenshots
layerrule = noanim, selection

View File

@@ -0,0 +1,9 @@
# Picture-in-picture overlays
windowrule = tag +pip, title:(Picture.{0,1}in.{0,1}[Pp]icture)
windowrule = float, tag:pip
windowrule = pin, tag:pip
windowrule = size 600 338, tag:pip
windowrule = keepaspectratio, tag:pip
windowrule = noborder, tag:pip
windowrule = opacity 1 1, tag:pip
windowrule = move 100%-w-40 4%, tag:pip

View File

@@ -0,0 +1,3 @@
windowrule = fullscreen, class:com.libretro.RetroArch
windowrule = opacity 1 1, class:com.libretro.RetroArch

View File

@@ -0,0 +1,4 @@
# Float Steam, fullscreen RetroArch
windowrule = float, class:steam
windowrule = center, class:steam, title:Steam
windowrule = opacity 1 1, class:steam

View File

@@ -0,0 +1,16 @@
# Float and center settings and previews
windowrule = float, class:^(blueberry.py|Impala|Wiremix|org.gnome.NautilusPreviewer|Omarchy|About)$
windowrule = center, class:^(blueberry.py|Impala|Wiremix|org.gnome.NautilusPreviewer|Omarchy|About)$
windowrule = size 800 600, class:^(blueberry.py|Impala|Wiremix|org.gnome.NautilusPreviewer|com.gabm.satty)$
windowrule = size 600 470, class:Omarchy
windowrule = size 700 470 class:About
# Float and center file pickers
windowrule = float, class:xdg-desktop-portal-gtk, title:^(Open.*Files?|Save.*Files?|All Files|Save)
windowrule = center, class:xdg-desktop-portal-gtk, title:^(Open.*Files?|Save.*Files?|All Files|Save)
# Fullscreen screensaver
windowrule = fullscreen, class:Screensaver
# No transparency on media windows
windowrule = opacity 1 1, class:^(zoom|vlc|mpv|org.kde.kdenlive|com.obsproject.Studio|com.github.PintaProject.Pinta|imv|org.gnome.NautilusPreviewer)$

View File

@@ -0,0 +1,2 @@
# Application-sepcific animation
layerrule = noanim, walker

View File

@@ -1,15 +1,15 @@
# Deprecated bindings file. New installations include everything directly.
bind = SUPER, return, exec, $terminal
bind = SUPER, F, exec, $fileManager
bind = SUPER, B, exec, $browser
bind = SUPER, M, exec, $music
bind = SUPER, N, exec, $terminal -e nvim
bind = SUPER, T, exec, $terminal -e btop
bind = SUPER, D, exec, $terminal -e lazydocker
bind = SUPER, G, exec, $messenger
bind = SUPER, O, exec, obsidian -disable-gpu
bind = SUPER, slash, exec, $passwordManager
bindd = SUPER, return, Terminal, exec, $terminal
bindd = SUPER, F, File manager, exec, $fileManager
bindd = SUPER, B, Web browser, exec, $browser
bindd = SUPER, M, Music player, exec, $music
bindd = SUPER, N, Neovim, exec, $terminal -e nvim
bindd = SUPER, T, Top, exec, $terminal -e btop
bindd = SUPER, D, Lazy Docker, exec, $terminal -e lazydocker
bindd = SUPER, G, Messenger, exec, $messenger
bindd = SUPER, O, Obsidian, exec, obsidian -disable-gpu
bindd = SUPER, slash, Pasword manager, exec, $passwordManager
source = ~/.local/share/omarchy/default/hypr/bindings/media.conf
source = ~/.local/share/omarchy/default/hypr/bindings/tiling.conf

View File

@@ -2,15 +2,15 @@
$osdclient = swayosd-client --monitor "$(hyprctl monitors -j | jq -r '.[] | select(.focused == true).name')"
# Laptop multimedia keys for volume and LCD brightness (with OSD)
bindel = ,XF86AudioRaiseVolume, exec, $osdclient --output-volume raise
bindel = ,XF86AudioLowerVolume, exec, $osdclient --output-volume lower
bindel = ,XF86AudioMute, exec, $osdclient --output-volume mute-toggle
bindel = ,XF86AudioMicMute, exec, $osdclient --input-volume mute-toggle
bindel = ,XF86MonBrightnessUp, exec, $osdclient --brightness raise
bindel = ,XF86MonBrightnessDown, exec, $osdclient --brightness lower
bindeld = ,XF86AudioRaiseVolume, Volume up, exec, $osdclient --output-volume raise
bindeld = ,XF86AudioLowerVolume, Volume down, exec, $osdclient --output-volume lower
bindeld = ,XF86AudioMute, Mute, exec, $osdclient --output-volume mute-toggle
bindeld = ,XF86AudioMicMute, Mute microphone, exec, $osdclient --input-volume mute-toggle
bindeld = ,XF86MonBrightnessUp, Brightness up, exec, $osdclient --brightness raise
bindeld = ,XF86MonBrightnessDown, Brightness down, exec, $osdclient --brightness lower
# Requires playerctl
bindl = , XF86AudioNext, exec, $osdclient --playerctl next
bindl = , XF86AudioPause, exec, $osdclient --playerctl play-pause
bindl = , XF86AudioPlay, exec, $osdclient --playerctl play-pause
bindl = , XF86AudioPrev, exec, $osdclient --playerctl previous
bindld = , XF86AudioNext, Next track, exec, $osdclient --playerctl next
bindld = , XF86AudioPause, Pause, exec, $osdclient --playerctl play-pause
bindld = , XF86AudioPlay, Play, exec, $osdclient --playerctl play-pause
bindld = , XF86AudioPrev, Previous track, exec, $osdclient --playerctl previous

View File

@@ -1,63 +1,62 @@
# Close window
bind = SUPER, W, killactive,
bindd = SUPER, W, Close active window, killactive,
# Control tiling
bind = SUPER, J, togglesplit, # dwindle
bind = SUPER, P, pseudo, # dwindle
bind = SUPER, V, togglefloating,
bind = SHIFT, F11, fullscreen, 0
bindd = SUPER, J, Toggle split, togglesplit, # dwindle
bindd = SUPER, P, Pseudo window, pseudo, # dwindle
bindd = SUPER, V, Toggle floating, togglefloating,
bindd = SHIFT, F11, Force full screen, fullscreen, 0
# Move focus with mainMod + arrow keys
bind = SUPER, left, movefocus, l
bind = SUPER, right, movefocus, r
bind = SUPER, up, movefocus, u
bind = SUPER, down, movefocus, d
# 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 mainMod + [0-9]
bind = SUPER, code:10, workspace, 1
bind = SUPER, code:11, workspace, 2
bind = SUPER, code:12, workspace, 3
bind = SUPER, code:13, workspace, 4
bind = SUPER, code:14, workspace, 5
bind = SUPER, code:15, workspace, 6
bind = SUPER, code:16, workspace, 7
bind = SUPER, code:17, workspace, 8
bind = SUPER, code:18, workspace, 9
bind = SUPER, code:19, workspace, 10
# 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 mainMod + SHIFT + [0-9]
bind = SUPER SHIFT, code:10, movetoworkspace, 1
bind = SUPER SHIFT, code:11, movetoworkspace, 2
bind = SUPER SHIFT, code:12, movetoworkspace, 3
bind = SUPER SHIFT, code:13, movetoworkspace, 4
bind = SUPER SHIFT, code:14, movetoworkspace, 5
bind = SUPER SHIFT, code:15, movetoworkspace, 6
bind = SUPER SHIFT, code:16, movetoworkspace, 7
bind = SUPER SHIFT, code:17, movetoworkspace, 8
bind = SUPER SHIFT, code:18, movetoworkspace, 9
bind = SUPER SHIFT, code:19, movetoworkspace, 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
# Swap active window with the one next to it with mainMod + SHIFT + arrow keys
bind = SUPER SHIFT, left, swapwindow, l
bind = SUPER SHIFT, right, swapwindow, r
bind = SUPER SHIFT, up, swapwindow, u
bind = SUPER SHIFT, down, swapwindow, d
# 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
bind = ALT, Tab, cyclenext
bind = ALT, Tab, bringactivetotop
bindd = ALT, Tab, Cycle to next window, cyclenext
bindd = ALT, Tab, Reveal active window on top, bringactivetotop
# Resize active window
bind = SUPER, minus, resizeactive, -100 0
bind = SUPER, equal, resizeactive, 100 0
bind = SUPER SHIFT, minus, resizeactive, 0 -100
bind = SUPER SHIFT, equal, resizeactive, 0 100
bindd = SUPER, minus, Expand window left, resizeactive, -100 0
bindd = SUPER, equal, Shrink window left, resizeactive, 100 0
bindd = SUPER SHIFT, minus, Shrink window up, resizeactive, 0 -100
bindd = SUPER SHIFT, equal, Expand window down, resizeactive, 0 100
# Scroll through existing workspaces with mainMod + scroll
bind = SUPER, mouse_down, workspace, e+1
bind = SUPER, mouse_up, workspace, e-1
# 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
bindm = SUPER, mouse:272, movewindow
bindm = SUPER, mouse:273, resizewindow
bindmd = SUPER, mouse:272, Move window, movewindow
bindmd = SUPER, mouse:273, Resize window, resizewindow

View File

@@ -1,39 +1,38 @@
# Launching
bind = SUPER, space, exec, walker
bind = SUPER, K, exec, ~/.local/share/omarchy/bin/omarchy-menu-keybindings
# Menus
bindd = SUPER, SPACE, Launch apps, exec, walker -p "Start…"
bindd = SUPER ALT, SPACE, Run commands, exec, ~/.local/share/omarchy/bin/omarchy-menu
bindd = SUPER, ESCAPE, Power menu, exec, ~/.local/share/omarchy/bin/omarchy-menu system
bindd = SUPER, K, Show key bindings, exec, ~/.local/share/omarchy/bin/omarchy-menu-keybindings
# Aesthetics
bind = SUPER SHIFT, SPACE, exec, pkill -SIGUSR1 waybar
bind = SUPER CTRL, SPACE, exec, ~/.local/share/omarchy/bin/omarchy-theme-bg-next
bind = SUPER SHIFT CTRL, SPACE, exec, ~/.local/share/omarchy/bin/omarchy-theme-menu
bindd = SUPER SHIFT, SPACE, Toggle top bar, exec, pkill -SIGUSR1 waybar
bindd = SUPER CTRL, SPACE, Next background in theme, exec, ~/.local/share/omarchy/bin/omarchy-theme-bg-next
bindd = SUPER SHIFT CTRL, SPACE, Pick new theme, exec, ~/.local/share/omarchy/bin/omarchy-menu theme
# Notifications
bind = SUPER, comma, exec, makoctl dismiss
bind = SUPER SHIFT, comma, exec, makoctl dismiss --all
bind = SUPER CTRL, comma, exec, makoctl mode -t do-not-disturb && makoctl mode | grep -q 'do-not-disturb' && notify-send "Silenced notifications" || notify-send "Enabled notifications"
# Power menu controls lock, suspend, relaunch, restart, shutdown
bind = SUPER, ESCAPE, exec, ~/.local/share/omarchy/bin/omarchy-menu-power
bindd = SUPER, COMMA, Dismiss last notification, exec, makoctl dismiss
bindd = SUPER SHIFT, COMMA, Dismiss all notifications, exec, makoctl dismiss --all
bindd = SUPER CTRL, COMMA, Toggle silencing notifications, exec, makoctl mode -t do-not-disturb && makoctl mode | grep -q 'do-not-disturb' && notify-send "Silenced notifications" || notify-send "Enabled notifications"
# Toggle idling
bind = SUPER CTRL, I, exec, ~/.local/share/omarchy/bin/omarchy-toggle-idle
bindd = SUPER CTRL, I, Toggle locking on idle, exec, ~/.local/share/omarchy/bin/omarchy-toggle-idle
# Toggle nightlight
bindd = SUPER CTRL, N, Toggle nightlight, exec, ~/.local/share/omarchy/bin/omarchy-toggle-nightlight
# Control Apple Display brightness
bind = CTRL, F1, exec, ~/.local/share/omarchy/bin/omarchy-cmd-apple-display-brightness -5000
bind = CTRL, F2, exec, ~/.local/share/omarchy/bin/omarchy-cmd-apple-display-brightness +5000
bind = SHIFT CTRL, F2, exec, ~/.local/share/omarchy/bin/omarchy-cmd-apple-display-brightness +60000
bindd = CTRL, F1, Apple Display brightness down, exec, ~/.local/share/omarchy/bin/omarchy-cmd-apple-display-brightness -5000
bindd = CTRL, F2, Apple Display brightness up, exec, ~/.local/share/omarchy/bin/omarchy-cmd-apple-display-brightness +5000
bindd = SHIFT CTRL, F2, Apple Display full brightness, exec, ~/.local/share/omarchy/bin/omarchy-cmd-apple-display-brightness +60000
# Screenshots
bind = , PRINT, exec, ~/.local/share/omarchy/bin/omarchy-cmd-screenshot
bind = SHIFT, PRINT, exec, ~/.local/share/omarchy/bin/omarchy-cmd-screenshot window
bind = CTRL, PRINT, exec, ~/.local/share/omarchy/bin/omarchy-cmd-screenshot output
bindd = , PRINT, Screenshot of region, exec, ~/.local/share/omarchy/bin/omarchy-cmd-screenshot
bindd = SHIFT, PRINT, Screenshot of window, exec, ~/.local/share/omarchy/bin/omarchy-cmd-screenshot window
bindd = CTRL, PRINT, Screenshot of display, exec, ~/.local/share/omarchy/bin/omarchy-cmd-screenshot output
# Screenshots
bind = ALT, PRINT, exec, ~/.local/share/omarchy/bin/omarchy-cmd-screenrecord
bind = CTRL ALT, PRINT, exec, ~/.local/share/omarchy/bin/omarchy-cmd-screenrecord output
# Screensaver
bind = SUPER ALT, SPACE, exec, ~/.local/share/omarchy/bin/omarchy-launch-screensaver
# Screen recordings
bindd = ALT, PRINT, Screen record a region, exec, ~/.local/share/omarchy/bin/omarchy-cmd-screenrecord
bindd = CTRL ALT, PRINT, Screen record display, exec, ~/.local/share/omarchy/bin/omarchy-cmd-screenrecord output
# Color picker
bind = SUPER, PRINT, exec, hyprpicker -a
bindd = SUPER, PRINT, Color picker, exec, pkill hyprpicker || hyprpicker -a

View File

@@ -69,12 +69,6 @@ animations {
animation = workspaces, 0, 0, ease
}
# Application-sepcific animation
layerrule = noanim,walker
# Remove 1px border around hyprshot screenshots
layerrule = noanim, selection
# Ref https://wiki.hyprland.org/Configuring/Workspace-Rules/
# "Smart gaps" / "No gaps when only"
# uncomment all if you wish to use that.

View File

@@ -1,34 +1,11 @@
# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
windowrule = suppressevent maximize, class:.*
# Force chromium into a tile to deal with --app bug
windowrule = tile, class:^(Chromium)$
# Float and center settings and previews
windowrule = float, class:^(blueberry.py|Impala|Wiremix|org.gnome.NautilusPreviewer|Omarchy|About)$
windowrule = center, class:^(blueberry.py|Impala|Wiremix|org.gnome.NautilusPreviewer|Omarchy|About)$
windowrule = size 800 600, class:^(blueberry.py|Impala|Wiremix|org.gnome.NautilusPreviewer|com.gabm.satty)$
windowrule = size 600 470, class:Omarchy
windowrule = size 700 470 class:About
# Float and center file pickers
windowrule = float, class:xdg-desktop-portal-gtk, title:^(Open.*Files?|Save.*Files?|All Files|Save)
windowrule = center, class:xdg-desktop-portal-gtk, title:^(Open.*Files?|Save.*Files?|All Files|Save)
# Float Steam, fullscreen RetroArch
windowrule = float, class:steam
windowrule = center, class:steam, title:Steam
windowrule = fullscreen, class:^(com.libretro.RetroArch)$
# Fullscreen screensaver
windowrule = fullscreen, class:Screensaver
# Just dash of opacity
# Just dash of opacity by default
windowrule = opacity 0.97 0.9, class:.*
windowrule = opacity 1 0.97, class:^(Chromium|chromium|google-chrome|google-chrome-unstable)$
windowrule = opacity 1 1, initialTitle:^(youtube.com_/)$ # Youtube
windowrule = opacity 1 1, class:^(zoom|vlc|mpv|org.kde.kdenlive|com.obsproject.Studio|com.github.PintaProject.Pinta|imv|org.gnome.NautilusPreviewer)$
windowrule = opacity 1 1, class:^(com.libretro.RetroArch|steam)$
# Fix some dragging issues with XWayland
windowrule = nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0
# App-specific tweaks
source = ~/.local/share/omarchy/default/hypr/apps.conf

View File

@@ -7,4 +7,4 @@ min_width = 150
width = 150
[ui.window.box.search]
hide = true
hide = false

View File

@@ -8,4 +8,4 @@ width = 250
max_height = 600
[ui.window.box.search]
hide = true
hide = false

View File

@@ -28,6 +28,7 @@ show_subtext() {
# Install prerequisites
source $OMARCHY_INSTALL/preflight/aur.sh
source $OMARCHY_INSTALL/preflight/presentation.sh
source $OMARCHY_INSTALL/preflight/migrations.sh
# Configuration
show_logo beams 240

View File

@@ -1,16 +1,15 @@
#!/bin/bash
if [ -z "$OMARCHY_BARE" ]; then
source ~/.local/share/omarchy/default/bash/functions
web2app "HEY" https://app.hey.com https://www.hey.com/assets/images/general/hey.png
web2app "Basecamp" https://launchpad.37signals.com https://basecamp.com/assets/images/general/basecamp.png
web2app "WhatsApp" https://web.whatsapp.com/ https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/whatsapp.png
web2app "Google Photos" https://photos.google.com/ https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/google-photos.png
web2app "Google Contacts" https://contacts.google.com/ https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/google-contacts.png
web2app "Google Messages" https://messages.google.com/web/conversations https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/google-messages.png
web2app "ChatGPT" https://chatgpt.com/ https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/chatgpt.png
web2app "YouTube" https://youtube.com/ https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/youtube.png
web2app "GitHub" https://github.com/ https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/github-light.png
web2app "X" https://x.com/ https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/x-light.png
web2app "Omarchy Manual" https://manuals.omamix.org/2/the-omarchy-manual https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/arch-linux.png
~/.local/share/omarchy/bin/omarchy-webapp-install "HEY" https://app.hey.com https://www.hey.com/assets/images/general/hey.png
~/.local/share/omarchy/bin/omarchy-webapp-install "Basecamp" https://launchpad.37signals.com https://basecamp.com/assets/images/general/basecamp.png
~/.local/share/omarchy/bin/omarchy-webapp-install "WhatsApp" https://web.whatsapp.com/ https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/whatsapp.png
~/.local/share/omarchy/bin/omarchy-webapp-install "Google Photos" https://photos.google.com/ https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/google-photos.png
~/.local/share/omarchy/bin/omarchy-webapp-install "Google Contacts" https://contacts.google.com/ https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/google-contacts.png
~/.local/share/omarchy/bin/omarchy-webapp-install "Google Messages" https://messages.google.com/web/conversations https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/google-messages.png
~/.local/share/omarchy/bin/omarchy-webapp-install "ChatGPT" https://chatgpt.com/ https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/chatgpt.png
~/.local/share/omarchy/bin/omarchy-webapp-install "YouTube" https://youtube.com/ https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/youtube.png
~/.local/share/omarchy/bin/omarchy-webapp-install "GitHub" https://github.com/ https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/github-light.png
~/.local/share/omarchy/bin/omarchy-webapp-install "X" https://x.com/ https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/x-light.png
~/.local/share/omarchy/bin/omarchy-webapp-install "Figma" https://figma.com/ https://www.veryicon.com/download/png/application/app-icon-7/figma-1?s=256
fi

View File

@@ -3,7 +3,7 @@
yay -S --noconfirm --needed \
brightnessctl playerctl pamixer wiremix wireplumber \
fcitx5 fcitx5-gtk fcitx5-qt wl-clip-persist \
nautilus sushi ffmpegthumbnailer \
nautilus sushi ffmpegthumbnailer gvfs-mtp \
slurp satty \
mpv evince imv \
chromium

View File

@@ -1,6 +1,6 @@
#!/bin/bash
yay -S --noconfirm --needed \
hyprland hyprshot hyprpicker hyprlock hypridle polkit-gnome hyprland-qtutils \
hyprland hyprshot hyprpicker hyprlock hypridle hyprsunset polkit-gnome hyprland-qtutils \
walker-bin libqalculate waybar mako swaybg swayosd \
xdg-desktop-portal-hyprland xdg-desktop-portal-gtk

View File

@@ -1,4 +1,16 @@
#!/bin/bash
sudo pacman -S --noconfirm cups cups-pdf cups-filters system-config-printer
sudo pacman -S --noconfirm cups cups-pdf cups-filters cups-browsed system-config-printer avahi nss-mdns
sudo systemctl enable --now cups.service
# Disable multicast dns in resolved. Avahi will provide this for better network printer discovery
sudo mkdir -p /etc/systemd/resolved.conf.d
echo -e "[Resolve]\nMulticastDNS=no" | sudo tee /etc/systemd/resolved.conf.d/10-disable-multicast.conf
sudo systemctl enable --now avahi-daemon.service
# Enable automatically adding remote printers
if ! grep -q '^CreateRemotePrinters Yes' /etc/cups/cups-browsed.conf; then
echo 'CreateRemotePrinters Yes' | sudo tee -a /etc/cups/cups-browsed.conf
fi
sudo systemctl enable --now cups-browsed.service

View File

@@ -2,7 +2,7 @@
yay -S --noconfirm --needed \
wget curl unzip inetutils impala \
fd eza fzf ripgrep zoxide bat jq \
fd eza fzf ripgrep zoxide bat jq xmlstarlet \
wl-clipboard fastfetch btop \
man tldr less whois plocate bash-completion \
alacritty

View File

@@ -0,0 +1,8 @@
#!/bin/bash
omarchy_migrations_state_path=~/.local/state/omarchy/migrations
mkdir -p $omarchy_migrations_state_path
for file in ~/.local/share/omarchy/migrations/*.sh; do
touch "$omarchy_migrations_state_path/$(basename "$file")"
done

View File

@@ -2,5 +2,5 @@ echo "Fixing persistent workspaces in waybar config"
if [[ -f ~/.config/waybar/config ]]; then
sed -i 's/"persistent_workspaces":/"persistent-workspaces":/' ~/.config/waybar/config
omarchy-restart-waybar
~/.local/share/omarchy/bin/omarchy-restart-waybar
fi

View File

@@ -2,5 +2,5 @@ echo "Install Impala as new wifi selection TUI"
if ! command -v impala &>/dev/null; then
yay -S --noconfirm --needed impala
echo "You need to update the Waybar config to use Impala Wi-Fi selector in top bar."
omarchy-refresh-waybar
~/.local/share/omarchy/bin/omarchy-refresh-waybar
fi

View File

@@ -1,2 +0,0 @@
echo "Copy desktop file for new Omarchy TUI"
cp ~/.local/share/omarchy/applications/omarchy.desktop ~/.local/share/applications/

View File

@@ -7,7 +7,7 @@ if [[ -f ~/.local/share/applications/blueberry.desktop ]]; then
gsettings set org.gnome.desktop.interface color-scheme "prefer-dark"
gsettings set org.gnome.desktop.interface gtk-theme "Adwaita-dark"
omarchy-refresh-waybar
~/.local/share/omarchy/bin/omarchy-refresh-waybar
fi
if [[ ! -L "~/.config/omarchy/themes/rose-pine" ]]; then

View File

@@ -4,6 +4,6 @@ if ! command -v wiremix &>/dev/null; then
yay -S --noconfirm --needed wiremix
yay -Rns --noconfirm pavucontrol
omarchy-refresh-applications
omarchy-refresh-waybar
~/.local/share/omarchy/bin/omarchy-refresh-applications
~/.local/share/omarchy/bin/omarchy-refresh-waybar
fi

View File

@@ -1,2 +1,2 @@
echo "Update .config/hypr/hyprlock.conf to include failed attempt counter"
omarchy-refresh-hyprlock
~/.local/share/omarchy/bin/omarchy-refresh-hyprlock

View File

@@ -1,5 +1,5 @@
echo "Fix dancing workspace numbers in Waybar"
if ! grep -q 'min-width: 9px' ~/.config/waybar/style.css; then
omarchy-refresh-waybar
~/.local/share/omarchy/bin/omarchy-refresh-waybar
fi

View File

@@ -1,5 +1,5 @@
echo "Allow updating of timezone by right-clicking on the clock (or running omarchy-cmd-tzupdate)"
if ! command -v tzupdate &>/dev/null; then
bash ~/.local/share/omarchy/install/config/timezones.sh
omarchy-refresh-waybar
~/.local/share/omarchy/bin/omarchy-refresh-waybar
fi

View File

@@ -1,4 +1,4 @@
echo "Update Walker config to include = as the leader key for the calculator"
if ! grep -q 'prefix = "="' ~/.config/walker/config.toml; then
omarchy-refresh-walker
~/.local/share/omarchy/bin/omarchy-refresh-walker
fi

View File

@@ -1,4 +1,4 @@
echo "Update Walker config to include . as the leader key for the finder"
if ! grep -q 'prefix = "\."' ~/.config/walker/config.toml; then
omarchy-refresh-walker
~/.local/share/omarchy/bin/omarchy-refresh-walker
fi

View File

@@ -1,2 +1,2 @@
echo "Fix Plymouth login positioning in multi-monitor setups + limit password from overflowing"
omarchy-refresh-plymouth
~/.local/share/omarchy/bin/omarchy-refresh-plymouth

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