38 Commits
v1.9.0 ... dev

Author SHA1 Message Date
f21a808bc5 Merge pull request #467 from basecamp/dev
Omarchy 1.10.0
2025-08-03 16:10:52 +02:00
2712f268c8 Increase time before screensaver starts to 2.5 minutes (from 1 minute) 2025-08-03 10:00:21 -04:00
25ed6460e0 Forgot to add waybar refresh for auto-update icon to existing installations 2025-08-03 15:44:39 +02:00
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
a9b9cbfa34 Must detach after restart 2025-08-03 15:30:49 +02:00
d84b521a19 Cleaner still 2025-08-03 14:09:07 +02:00
83e5faf224 Simplify migrations script 2025-08-03 14:07:39 +02:00
cb08f4ccd2 Extend time for battery warning to 30 seconds
Make it harder to miss. Closes #392.
2025-08-03 14:02:57 +02:00
1dc8379533 Add migration for gvfs-mtp 2025-08-03 13:54:20 +02:00
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
fb05e59bf6 Extract app-specific tweaks into their own files 2025-08-03 13:47:26 +02:00
5344885176 Its enough that its included in the Omarchy TUI 2025-08-03 13:10:29 +02:00
2278b400dd Enable auto-discovery of network printers
Co-authored-by: @rockorager
2025-08-03 13:07:23 +02:00
4b027a9242 Move out of conditional in case user has already installed hyprsunset 2025-08-03 06:47:05 -04:00
e7f086370d Make repo configurable (#139) 2025-08-03 12:07:54 +02:00
4c650e53de Migration to refresh walker to show all keybindings 2025-08-03 12:05:33 +02:00
81aeee437c A few more binding description tweaks 2025-08-03 12:03:59 +02:00
9a09d45d6b Increase Walker list max entries to 200 to accomodate all hotkeys 2025-08-03 11:50:31 +02:00
933d18fce3 Expand bind descriptions 2025-08-03 11:48:53 +02:00
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
8ed29e6ce1 Change wording 2025-08-03 11:02:14 +02:00
fe1f6d4c3a Just be consistent 2025-08-03 10:49:38 +02:00
65ba23d0bb Extract omarchy-refresh-hyprsunset 2025-08-03 10:45:39 +02:00
c35311676c Extract function 2025-08-03 10:44:45 +02:00
e1f697f914 Use restart bin extraction 2025-08-03 10:34:50 +02:00
8de2566fa4 Extract omarchy-restart-app 2025-08-03 10:33:34 +02:00
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
3a5ef9d841 Ensure screensaver doesn't start while the computer is locked 2025-08-03 10:18:15 +02:00
008ede7bbd Tweaks 2025-08-03 10:02:19 +02:00
c7020ee875 Merge branch 'dev' into dev 2025-08-03 09:47:54 +02:00
1fda1ade8a Increase screensaver font size for looks and performance
Co-authored-by: @precision
2025-08-03 09:45:21 +02:00
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
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
23b9b15936 Convert refresh-compose command into the same bin as everything else 2025-08-03 09:38:40 +02:00
2a2c5c90d1 Cleanup the omarchy-refresh/restart combos 2025-08-03 09:37:04 +02:00
cf1b671a71 Add Vim-style j/k navigation to walker config 2025-08-03 09:10:45 +02:00
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
5fda6054ce New installations don't need to migrate from what's already there 2025-08-02 22:47:39 +02:00
53 changed files with 375 additions and 254 deletions

View File

@ -21,41 +21,16 @@ main_menu() {
ack_command
main_menu
;;
Update) update_menu ;;
Update)
omarchy-update
main_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")

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

@ -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

@ -1,5 +1,19 @@
#!/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 \
-o 'colors.primary.background="#000000"' \
-o 'colors.cursor.cursor="#000000"' \
-o 'font.size=18' \
-o 'window.opacity=1' \
-e ~/.local/share/omarchy/bin/omarchy-cmd-screensaver
done
hyprctl dispatch focusmonitor $focused

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,9 +51,12 @@ grep -h '^[[:space:]]*bind' $USER_HYPRLAND_CONF $OMARCHY_BINDINGS_CONF |
gsub(/^[ \t]*\+?[ \t]*/, "", key_combo);
gsub(/[ \t]+$/, "", key_combo);
# Use description, if set
action = $3;
if (action == "") {
# Reconstruct the command from the remaining fields
action = "";
for (i = 3; i <= NF; i++) {
for (i = 4; i <= NF; i++) {
action = action $i (i < NF ? "," : "");
}
@ -50,15 +66,21 @@ grep -h '^[[:space:]]*bind' $USER_HYPRLAND_CONF $OMARCHY_BINDINGS_CONF |
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,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
if [[ ! -f "$STATE_DIR/$filename" ]]; then
echo -e "\e[32m\nRunning migration (${filename%.sh})\e[0m"
source $file
touch "${STATE_DIR}/$filename"
touch "$STATE_DIR/$filename"
fi
done
# Back to where we came from
cd - >/dev/null

View File

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

View File

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

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

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

View File

@ -2,6 +2,4 @@
omarchy-refresh-config swayosd/config.toml
omarchy-refresh-config swayosd/style.css
pkill swayosd-server
setsid uwsm app -- swayosd-server &>/dev/null &
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 &
omarchy-restart-walker

View File

@ -2,6 +2,4 @@
omarchy-refresh-config waybar/config.jsonc
omarchy-refresh-config waybar/style.css
# Restart waybar
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
omarchy-restart-app hypridle

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

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

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

@ -0,0 +1,3 @@
#!/bin/bash
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 &
omarchy-restart-app waybar

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

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

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

@ -0,0 +1,25 @@
#!/bin/bash
# Default temperature values
ON_TEMP=4000
OFF_TEMP=6500
# 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

@ -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

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

View File

@ -23,26 +23,26 @@ $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
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
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"
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"
# Extra autostart processes
# exec-once = uwsm app -- my-service

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
}

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

@ -65,9 +65,3 @@ web2app-remove() {
rm "$DESKTOP_FILE"
rm "$ICON_PATH"
}
# Ensure changes to ~/.XCompose are immediately available
refresh-xcompose() {
pkill fcitx5
uwsm app -- fcitx5 >/dev/null 2>&1 &
}

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

@ -0,0 +1,7 @@
# App-specific tweaks
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,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

@ -2,6 +2,7 @@ exec-once = uwsm app -- hypridle
exec-once = uwsm app -- mako
exec-once = uwsm app -- waybar
exec-once = uwsm app -- fcitx5
exec-once = uwsm app -- hyprsunset
exec-once = uwsm app -- swaybg -i ~/.config/omarchy/current/background -m fill
exec-once = uwsm app -- swayosd-server
exec-once = uwsm app -- walker --gapplication-service

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
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
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
bindd = SUPER SHIFT, code:10, Move window to workspace 1, movetoworkspace, 1
bindd = SUPER SHIFT, code:11, Move window to workspace 1, movetoworkspace, 2
bindd = SUPER SHIFT, code:12, Move window to workspace 1, movetoworkspace, 3
bindd = SUPER SHIFT, code:13, Move window to workspace 1, movetoworkspace, 4
bindd = SUPER SHIFT, code:14, Move window to workspace 1, movetoworkspace, 5
bindd = SUPER SHIFT, code:15, Move window to workspace 1, movetoworkspace, 6
bindd = SUPER SHIFT, code:16, Move window to workspace 1, movetoworkspace, 7
bindd = SUPER SHIFT, code:17, Move window to workspace 1, movetoworkspace, 8
bindd = SUPER SHIFT, code:18, Move window to workspace 1, movetoworkspace, 9
bindd = SUPER SHIFT, code:19, Move window to workspace 1, 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
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
bindd = SUPER, mouse_down, Scroll active worspace 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,42 @@
# Launching
bind = SUPER, space, exec, walker
bind = SUPER, K, exec, ~/.local/share/omarchy/bin/omarchy-menu-keybindings
bindd = SUPER, space, Launch apps, exec, walker
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-theme-menu
# 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"
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"
# Power menu controls lock, suspend, relaunch, restart, shutdown
bind = SUPER, ESCAPE, exec, ~/.local/share/omarchy/bin/omarchy-menu-power
bindd = SUPER, ESCAPE, Power menu, exec, ~/.local/share/omarchy/bin/omarchy-menu-power
# 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
# 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
# Screensaver
bind = SUPER ALT, SPACE, exec, ~/.local/share/omarchy/bin/omarchy-launch-screensaver
bindd = SUPER ALT, SPACE, Screensaver, exec, ~/.local/share/omarchy/bin/omarchy-launch-screensaver
# Color picker
bind = SUPER, PRINT, exec, hyprpicker -a
bindd = SUPER, PRINT, Color picker, exec, 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

@ -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

@ -12,5 +12,4 @@ if [ -z "$OMARCHY_BARE" ]; then
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
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 "[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

@ -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

6
migrations/1754109724.sh Normal file
View File

@ -0,0 +1,6 @@
echo "Add hyprsunset blue light filter"
if ! command -v hyprsunset &>/dev/null; then
yay -S --noconfirm --needed hyprsunset
fi
omarchy-refresh-hyprsunset

4
migrations/1754208139.sh Normal file
View File

@ -0,0 +1,4 @@
echo "Ensure screensaver doesn't start while the computer is locked"
if ! grep -q "pidof hyprlock || omarchy-launch-screensaver" ~/.config/hypr/hypridle.conf; then
omarchy-refresh-hypridle
fi

5
migrations/1754215439.sh Normal file
View File

@ -0,0 +1,5 @@
echo "Update app launcher config to allow enough entries to show all keybindings on SUPER+K"
if ! grep "max_entries = 200" ~/.config/walker/config.toml; then
omarchy-refresh-walker
fi

17
migrations/1754215533.sh Normal file
View File

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

2
migrations/1754221967.sh Normal file
View File

@ -0,0 +1,2 @@
echo "Add support for accessing Android phone data via file manager"
yay -S --noconfirm --needed gvfs-mtp

5
migrations/1754228071.sh Normal file
View File

@ -0,0 +1,5 @@
echo "Add auto-update icon to waybar when update available"
if ! grep -q "custom/update" ~/.config/waybar/config.jsonc; then
omarchy-refresh-waybar
fi

2
migrations/1754228679.sh Normal file
View File

@ -0,0 +1,2 @@
echo "Increase time before screensaver starts to 2.5 minutes (from 1 minute)"
omarchy-refresh-hypridle