From 8673fa41ba35b354d3fb250a46aa70ca0aaee8f9 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Thu, 31 Jul 2025 21:25:50 +0200 Subject: [PATCH 01/24] No need for these control characters any more now that we are using Walker --- bin/omarchy-menu-power | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/bin/omarchy-menu-power b/bin/omarchy-menu-power index 9535cd50..56e005e1 100755 --- a/bin/omarchy-menu-power +++ b/bin/omarchy-menu-power @@ -2,11 +2,11 @@ show_power_menu() { # The first characters are invisible sort keys. - local menu_options="\u200B Lock -\u200C󰤄 Suspend -\u200D Relaunch -\u2060󰜉 Restart -\u2063󰐥 Shutdown" + local menu_options=" Lock +󰤄 Suspend + Relaunch +󰜉 Restart +󰐥 Shutdown" local selection=$(echo -e "$menu_options" | walker --dmenu --theme dmenu_150) case "$selection" in From 95de5718091aab20b6ab6ef0cbf8ec24aec860d1 Mon Sep 17 00:00:00 2001 From: Andy Davis Date: Fri, 1 Aug 2025 07:32:21 -0400 Subject: [PATCH 02/24] Update migration to ensure walker is refreshed after finder prefix was added. (#425) * Update migration that looks for prefix with '.' as it matches the other prefixes in the file. Also mod walker prefix to use double quotes for consistency to match the others. * Rename fixed migration to ensure it runs again for all users --- config/walker/config.toml | 2 +- migrations/{1753910761.sh => 1753998861.sh} | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename migrations/{1753910761.sh => 1753998861.sh} (61%) diff --git a/config/walker/config.toml b/config/walker/config.toml index 4cf6d06d..9fe4c8be 100644 --- a/config/walker/config.toml +++ b/config/walker/config.toml @@ -213,7 +213,7 @@ concurrency = 8 show_icon_when_single = true preview_images = true hidden = false -prefix = '.' +prefix = "." [builtins.runner] eager_loading = true diff --git a/migrations/1753910761.sh b/migrations/1753998861.sh similarity index 61% rename from migrations/1753910761.sh rename to migrations/1753998861.sh index 213b2168..4751dee5 100644 --- a/migrations/1753910761.sh +++ b/migrations/1753998861.sh @@ -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 +if ! grep -q 'prefix = "\."' ~/.config/walker/config.toml; then omarchy-refresh-walker fi From 3d228405430313b702c66bcf50107a27b9cc1ade Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Fri, 1 Aug 2025 14:23:29 +0200 Subject: [PATCH 03/24] Allow themes to use a custom icon theme via the icons.theme file They get to pick from the Yaru color set --- bin/omarchy-theme-set | 7 +++++++ install/desktop/theme.sh | 5 +++++ migrations/1754047941.sh | 9 +++++++++ themes/catppuccin-latte/icons.theme | 1 + themes/catppuccin/icons.theme | 1 + themes/everforest/icons.theme | 1 + themes/gruvbox/icons.theme | 1 + themes/kanagawa/icons.theme | 1 + themes/matte-black/icons.theme | 1 + themes/nord/icons.theme | 1 + themes/ristretto/icons.theme | 1 + themes/rose-pine/icons.theme | 1 + themes/tokyo-night/icons.theme | 1 + 13 files changed, 31 insertions(+) create mode 100644 migrations/1754047941.sh create mode 100644 themes/catppuccin-latte/icons.theme create mode 100644 themes/catppuccin/icons.theme create mode 100644 themes/everforest/icons.theme create mode 100644 themes/gruvbox/icons.theme create mode 100644 themes/kanagawa/icons.theme create mode 100644 themes/matte-black/icons.theme create mode 100644 themes/nord/icons.theme create mode 100644 themes/ristretto/icons.theme create mode 100644 themes/rose-pine/icons.theme create mode 100644 themes/tokyo-night/icons.theme diff --git a/bin/omarchy-theme-set b/bin/omarchy-theme-set index 3766c203..46cd7a0b 100755 --- a/bin/omarchy-theme-set +++ b/bin/omarchy-theme-set @@ -32,6 +32,13 @@ else gsettings set org.gnome.desktop.interface gtk-theme "Adwaita-dark" fi +# Change gnome icon theme color +if [[ -f ~/.config/omarchy/current/theme/icons.theme ]]; then + gsettings set org.gnome.desktop.interface icon-theme "$(<~/.config/omarchy/current/theme/icons.theme)" +else + gsettings set org.gnome.desktop.interface icon-theme "Adwaita" +fi + # Trigger alacritty config reload touch "$HOME/.config/alacritty/alacritty.toml" diff --git a/install/desktop/theme.sh b/install/desktop/theme.sh index c744c2a9..a61a4de5 100644 --- a/install/desktop/theme.sh +++ b/install/desktop/theme.sh @@ -10,6 +10,11 @@ if ! yay -Q gnome-themes-extra &>/dev/null; then yay -S --noconfirm gnome-themes-extra # Adds Adwaita-dark theme fi +# Allow icons to match the theme +if ! yay -! yaru-icon-theme &>/dev/null; then + yay -S --noconfirm yaru-icon-theme +fi + gsettings set org.gnome.desktop.interface gtk-theme "Adwaita-dark" gsettings set org.gnome.desktop.interface color-scheme "prefer-dark" diff --git a/migrations/1754047941.sh b/migrations/1754047941.sh new file mode 100644 index 00000000..39ddd154 --- /dev/null +++ b/migrations/1754047941.sh @@ -0,0 +1,9 @@ +echo "Add icon theme coloring" + +if ! yay -! yaru-icon-theme &>/dev/null; then + yay -S --noconfirm yaru-icon-theme + + if [[ -f ~/.config/omarchy/current/theme/icons.theme ]]; then + gsettings set org.gnome.desktop.interface icon-theme "$(<~/.config/omarchy/current/theme/icons.theme)" + fi +fi diff --git a/themes/catppuccin-latte/icons.theme b/themes/catppuccin-latte/icons.theme new file mode 100644 index 00000000..6ce2f147 --- /dev/null +++ b/themes/catppuccin-latte/icons.theme @@ -0,0 +1 @@ +Yaru-blue diff --git a/themes/catppuccin/icons.theme b/themes/catppuccin/icons.theme new file mode 100644 index 00000000..24a4551d --- /dev/null +++ b/themes/catppuccin/icons.theme @@ -0,0 +1 @@ +Yaru-purple diff --git a/themes/everforest/icons.theme b/themes/everforest/icons.theme new file mode 100644 index 00000000..140e422c --- /dev/null +++ b/themes/everforest/icons.theme @@ -0,0 +1 @@ +Yaru-sage diff --git a/themes/gruvbox/icons.theme b/themes/gruvbox/icons.theme new file mode 100644 index 00000000..7bb20fc4 --- /dev/null +++ b/themes/gruvbox/icons.theme @@ -0,0 +1 @@ +Yaru-olive diff --git a/themes/kanagawa/icons.theme b/themes/kanagawa/icons.theme new file mode 100644 index 00000000..6ce2f147 --- /dev/null +++ b/themes/kanagawa/icons.theme @@ -0,0 +1 @@ +Yaru-blue diff --git a/themes/matte-black/icons.theme b/themes/matte-black/icons.theme new file mode 100644 index 00000000..a3c0a4ca --- /dev/null +++ b/themes/matte-black/icons.theme @@ -0,0 +1 @@ +Yaru-red diff --git a/themes/nord/icons.theme b/themes/nord/icons.theme new file mode 100644 index 00000000..6ce2f147 --- /dev/null +++ b/themes/nord/icons.theme @@ -0,0 +1 @@ +Yaru-blue diff --git a/themes/ristretto/icons.theme b/themes/ristretto/icons.theme new file mode 100644 index 00000000..e38b9cee --- /dev/null +++ b/themes/ristretto/icons.theme @@ -0,0 +1 @@ +Yaru-yellow diff --git a/themes/rose-pine/icons.theme b/themes/rose-pine/icons.theme new file mode 100644 index 00000000..6ce2f147 --- /dev/null +++ b/themes/rose-pine/icons.theme @@ -0,0 +1 @@ +Yaru-blue diff --git a/themes/tokyo-night/icons.theme b/themes/tokyo-night/icons.theme new file mode 100644 index 00000000..5d006387 --- /dev/null +++ b/themes/tokyo-night/icons.theme @@ -0,0 +1 @@ +Yaru-magenta From 7bca5c1903eef4cc750c9a52d7c30c2893cc8925 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Fri, 1 Aug 2025 14:26:28 +0200 Subject: [PATCH 04/24] Make Yaru-blue the default --- bin/omarchy-theme-set | 2 +- install/desktop/theme.sh | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/bin/omarchy-theme-set b/bin/omarchy-theme-set index 46cd7a0b..03baae45 100755 --- a/bin/omarchy-theme-set +++ b/bin/omarchy-theme-set @@ -36,7 +36,7 @@ fi if [[ -f ~/.config/omarchy/current/theme/icons.theme ]]; then gsettings set org.gnome.desktop.interface icon-theme "$(<~/.config/omarchy/current/theme/icons.theme)" else - gsettings set org.gnome.desktop.interface icon-theme "Adwaita" + gsettings set org.gnome.desktop.interface icon-theme "Yaru-blue" fi # Trigger alacritty config reload diff --git a/install/desktop/theme.sh b/install/desktop/theme.sh index a61a4de5..0076d192 100644 --- a/install/desktop/theme.sh +++ b/install/desktop/theme.sh @@ -17,6 +17,7 @@ fi gsettings set org.gnome.desktop.interface gtk-theme "Adwaita-dark" gsettings set org.gnome.desktop.interface color-scheme "prefer-dark" +gsettings set org.gnome.desktop.interface icon-theme "Yaru-blue" # Setup theme links mkdir -p ~/.config/omarchy/themes From 06d61be018118523de88c04e3925dd3f2a91a32b Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Fri, 1 Aug 2025 16:05:04 +0200 Subject: [PATCH 05/24] Try to protect the screensaver from missing tte or pip --- bin/omarchy-cmd-screensaver | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/bin/omarchy-cmd-screensaver b/bin/omarchy-cmd-screensaver index 03fd1a66..8240023f 100755 --- a/bin/omarchy-cmd-screensaver +++ b/bin/omarchy-cmd-screensaver @@ -2,9 +2,22 @@ trap "exit" SIGINT -while true; do - effect=$(tte 2>&1 | grep -oP '{\K[^}]+' | tr ',' ' ' | tr ' ' '\n' | sed -n '/^beams$/,$p' | sort -u | shuf -n1) - tte -i ~/.local/share/omarchy/logo.txt \ - --frame-rate 240 --canvas-width 0 --canvas-height 0 --anchor-canvas c --anchor-text c \ - "$effect" -done +screensaver() { + while true; do + effect=$(tte 2>&1 | grep -oP '{\K[^}]+' | tr ',' ' ' | tr ' ' '\n' | sed -n '/^beams$/,$p' | sort -u | shuf -n1) + tte -i ~/.local/share/omarchy/logo.txt \ + --frame-rate 240 --canvas-width 0 --canvas-height 0 --anchor-canvas c --anchor-text c \ + "$effect" + done +} + +if command -v tte &>/dev/null; then + screensaver +else + if command -v pip &>/dev/null; then + pip install terminaltexteffects + screensaver + else + gum spin --title "Can't find tte or pip. Install pip, then try: pip install terminaltexteffects" -- sleep 2 + fi +fi From 0efd63f0210f7af08538d0dfeebfe185594d8411 Mon Sep 17 00:00:00 2001 From: Rob Cameron Date: Fri, 1 Aug 2025 14:19:14 -0700 Subject: [PATCH 06/24] Adds BAT_THEME ENV var (#438) --- default/bash/envs | 1 + 1 file changed, 1 insertion(+) diff --git a/default/bash/envs b/default/bash/envs index 2494d708..603a8961 100644 --- a/default/bash/envs +++ b/default/bash/envs @@ -1,3 +1,4 @@ # Editor used by CLI export EDITOR="nvim" export SUDO_EDITOR="$EDITOR" +export BAT_THEME=ansi From 8aa8d99d8d7f2658e27226d835cdeb55edf71a35 Mon Sep 17 00:00:00 2001 From: Ryan Hughes Date: Sat, 2 Aug 2025 07:06:09 -0400 Subject: [PATCH 07/24] Prevent screensaver shifting up (#450) Co-authored-by: David Heinemeier Hansson --- bin/omarchy-cmd-screensaver | 4 ++-- bin/omarchy-launch-screensaver | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/bin/omarchy-cmd-screensaver b/bin/omarchy-cmd-screensaver index 8240023f..0689c6a4 100755 --- a/bin/omarchy-cmd-screensaver +++ b/bin/omarchy-cmd-screensaver @@ -6,7 +6,7 @@ screensaver() { while true; do effect=$(tte 2>&1 | grep -oP '{\K[^}]+' | tr ',' ' ' | tr ' ' '\n' | sed -n '/^beams$/,$p' | sort -u | shuf -n1) tte -i ~/.local/share/omarchy/logo.txt \ - --frame-rate 240 --canvas-width 0 --canvas-height 0 --anchor-canvas c --anchor-text c \ + --frame-rate 240 --canvas-width 0 --canvas-height $(($(tput lines) - 2)) --anchor-canvas c --anchor-text c \ "$effect" done } @@ -20,4 +20,4 @@ else else gum spin --title "Can't find tte or pip. Install pip, then try: pip install terminaltexteffects" -- sleep 2 fi -fi +fi \ No newline at end of file diff --git a/bin/omarchy-launch-screensaver b/bin/omarchy-launch-screensaver index f81c44ed..a5736c3f 100755 --- a/bin/omarchy-launch-screensaver +++ b/bin/omarchy-launch-screensaver @@ -2,4 +2,4 @@ pkill -f "alacritty --class Screensaver" || alacritty --class Screensaver --title Screensaver -o 'colors.primary.background="#000000"' \ - -e ~/.local/share/omarchy/bin/omarchy-cmd-screensaver + -o 'colors.cursor.cursor="#000000"' -e ~/.local/share/omarchy/bin/omarchy-cmd-screensaver From 97dc9e8d508afe010af045029041438abcc2b452 Mon Sep 17 00:00:00 2001 From: Greg Helding <158190040+gthelding@users.noreply.github.com> Date: Sat, 2 Aug 2025 06:07:26 -0500 Subject: [PATCH 08/24] Update Ristretto neovim.lua for compatibility with plugins expecting MiniIcons Highlights (#449) * Update neovim.lua * Update neovim.lua --- themes/ristretto/neovim.lua | 49 ++++++++++++++++++++++--------------- 1 file changed, 29 insertions(+), 20 deletions(-) diff --git a/themes/ristretto/neovim.lua b/themes/ristretto/neovim.lua index 8fae3b8a..38959d47 100644 --- a/themes/ristretto/neovim.lua +++ b/themes/ristretto/neovim.lua @@ -1,22 +1,31 @@ return { - { - "gthelding/monokai-pro.nvim", - config = function() - require("monokai-pro").setup({ - filter = "ristretto", - override = function() - return { - NonText = { fg = "#948a8b" }, - } - end, - }) - vim.cmd([[colorscheme monokai-pro]]) - end, - }, - { - "LazyVim/LazyVim", - opts = { - colorscheme = "monokai-pro", - }, - }, + { + "gthelding/monokai-pro.nvim", + config = function() + require("monokai-pro").setup({ + filter = "ristretto", + override = function() + return { + NonText = { fg = "#948a8b" }, + MiniIconsGrey = { fg = "#948a8b" }, + MiniIconsRed = { fg = "#fd6883" }, + MiniIconsBlue = { fg = "#85dacc" }, + MiniIconsGreen = { fg = "#adda78" }, + MiniIconsYellow = { fg = "#f9cc6c" }, + MiniIconsOrange = { fg = "#f38d70" }, + MiniIconsPurple = { fg = "#a8a9eb" }, + MiniIconsAzure = { fg = "#a8a9eb" }, + MiniIconsCyan = { fg = "#85dacc" }, -- same value as MiniIconsBlue for consistency + } + end, + }) + vim.cmd([[colorscheme monokai-pro]]) + end, + }, + { + "LazyVim/LazyVim", + opts = { + colorscheme = "monokai-pro", + }, + }, } From 0a16d502f25a2ce5582921d6b997adbdf8c48122 Mon Sep 17 00:00:00 2001 From: Ryan Hughes Date: Sat, 2 Aug 2025 07:08:56 -0400 Subject: [PATCH 09/24] Fix Plymouth login positioning in multi-monitor setups + limit password from overflowing (#446) * Limit bullets to 21 to prevent overflow * Fix plymouth rendering off center in multi-monitor setups Co-authored-by: Raphael Kimmig * Add migration --------- Co-authored-by: Raphael Kimmig --- default/plymouth/omarchy.script | 19 ++++++++++++------- migrations/1754108993.sh | 2 ++ 2 files changed, 14 insertions(+), 7 deletions(-) create mode 100644 migrations/1754108993.sh diff --git a/default/plymouth/omarchy.script b/default/plymouth/omarchy.script index 663f4f5f..df0c2982 100644 --- a/default/plymouth/omarchy.script +++ b/default/plymouth/omarchy.script @@ -5,8 +5,8 @@ Window.SetBackgroundBottomColor(0.101, 0.105, 0.149); logo.image = Image("logo.png"); logo.sprite = Sprite(logo.image); -logo.sprite.SetX (Window.GetX() + Window.GetWidth() / 2 - logo.image.GetWidth() / 2); -logo.sprite.SetY (Window.GetY() + Window.GetHeight() / 2 - logo.image.GetHeight() / 2); +logo.sprite.SetX (Window.GetWidth() / 2 - logo.image.GetWidth() / 2); +logo.sprite.SetY (Window.GetHeight() / 2 - logo.image.GetHeight() / 2); logo.sprite.SetOpacity (1); # Use these to adjust the progress bar timing @@ -119,7 +119,7 @@ entry.image = Image("entry.png"); bullet.image = Image("bullet.png"); entry.sprite = Sprite(entry.image); -entry.x = Window.GetX() + Window.GetWidth()/2 - entry.image.GetWidth() / 2; +entry.x = Window.GetWidth()/2 - entry.image.GetWidth() / 2; entry.y = logo.sprite.GetY() + logo.image.GetHeight() + 40; entry.sprite.SetPosition(entry.x, entry.y, 10001); entry.sprite.SetOpacity(0); @@ -171,8 +171,13 @@ fun display_password_callback (prompt, bullets) for (index = 0; bullet.sprites[index]; index++) bullet.sprites[index].SetOpacity(0); - # Create and show bullets for current password - for (index = 0; index < bullets; index++) + # Create and show bullets for current password (max 21) + max_bullets = 21; + bullets_to_show = bullets; + if (bullets_to_show > max_bullets) + bullets_to_show = max_bullets; + + for (index = 0; index < bullets_to_show; index++) { if (!bullet.sprites[index]) { @@ -195,7 +200,7 @@ Plymouth.SetDisplayPasswordFunction(display_password_callback); progress_box.image = Image("progress_box.png"); progress_box.sprite = Sprite(progress_box.image); -progress_box.x = Window.GetX() + Window.GetWidth() / 2 - progress_box.image.GetWidth() / 2; +progress_box.x = Window.GetWidth() / 2 - progress_box.image.GetWidth() / 2; progress_box.y = entry.y + entry.image.GetHeight() / 2 - progress_box.image.GetHeight() / 2; progress_box.sprite.SetPosition(progress_box.x, progress_box.y, 0); progress_box.sprite.SetOpacity(0); @@ -204,7 +209,7 @@ progress_bar.original_image = Image("progress_bar.png"); progress_bar.sprite = Sprite(); progress_bar.image = progress_bar.original_image.Scale(1, progress_bar.original_image.GetHeight()); -progress_bar.x = Window.GetX() + Window.GetWidth() / 2 - progress_bar.original_image.GetWidth() / 2; +progress_bar.x = Window.GetWidth() / 2 - progress_bar.original_image.GetWidth() / 2; progress_bar.y = progress_box.y + (progress_box.image.GetHeight() - progress_bar.original_image.GetHeight()) / 2; progress_bar.sprite.SetPosition(progress_bar.x, progress_bar.y, 1); progress_bar.sprite.SetOpacity(0); diff --git a/migrations/1754108993.sh b/migrations/1754108993.sh new file mode 100644 index 00000000..59531e73 --- /dev/null +++ b/migrations/1754108993.sh @@ -0,0 +1,2 @@ +echo "Fix Plymouth login positioning in multi-monitor setups + limit password from overflowing" +omarchy-refresh-plymouth From d56a2bce2b82564c4a203457a11289dfe8389deb Mon Sep 17 00:00:00 2001 From: brink-lab Date: Sat, 2 Aug 2025 13:16:51 +0200 Subject: [PATCH 10/24] Opacity for indicators of empty waybar workspaces (#444) * Opacity for indicators of empty waybar workspaces Adds opacity to the workspace indicators on waybar, if the workspace is empty. Makes the indicator appear dimmer to make it easier to find empty workspaces. Purely cosmetic UI tweak. * Bump up opacity to be easier to read on light themes * Add migration * Apply grep to something! --------- Co-authored-by: David Heinemeier Hansson --- config/waybar/style.css | 4 ++++ migrations/1754133148.sh | 6 ++++++ 2 files changed, 10 insertions(+) create mode 100644 migrations/1754133148.sh diff --git a/config/waybar/style.css b/config/waybar/style.css index 2f1c3120..ae1a5840 100644 --- a/config/waybar/style.css +++ b/config/waybar/style.css @@ -26,6 +26,10 @@ min-width: 9px; } +#workspaces button.empty { + opacity: 0.5; +} + #tray, #cpu, #battery, diff --git a/migrations/1754133148.sh b/migrations/1754133148.sh new file mode 100644 index 00000000..32ae1a1e --- /dev/null +++ b/migrations/1754133148.sh @@ -0,0 +1,6 @@ +echo "Update Waybar CSS to dim unused workspaces" + +if ! grep -q "#workspaces button\.empty" ~/.config/waybar/style.css; then + omarchy-refresh-config waybar/style.css + pkill -SIGUSR2 waybar +fi From ceee99985360123b30567242a24f9fc2f7b176f0 Mon Sep 17 00:00:00 2001 From: Ryan Hughes Date: Sat, 2 Aug 2025 07:21:47 -0400 Subject: [PATCH 11/24] Prevent Waybar stacking on resume (#448) * Create omarchy-cmd-restart-waybar * Replace -SIGUSR2 waybar instances * Add migration * Add or statment in case waybar is dead * Just use omarchy-restart-waybar --------- Co-authored-by: David Heinemeier Hansson --- bin/omarchy-refresh-waybar | 2 +- bin/omarchy-restart-waybar | 4 ++++ bin/omarchy-theme-set | 2 +- config/hypr/hypridle.conf | 2 +- migrations/1751225707.sh | 2 +- migrations/1754113760.sh | 10 ++++++++++ 6 files changed, 18 insertions(+), 4 deletions(-) create mode 100755 bin/omarchy-restart-waybar create mode 100644 migrations/1754113760.sh diff --git a/bin/omarchy-refresh-waybar b/bin/omarchy-refresh-waybar index 43eec3d0..7dfae19e 100755 --- a/bin/omarchy-refresh-waybar +++ b/bin/omarchy-refresh-waybar @@ -4,4 +4,4 @@ omarchy-refresh-config waybar/config.jsonc omarchy-refresh-config waybar/style.css # Restart waybar -pkill -SIGUSR2 waybar +omarchy-restart-waybar diff --git a/bin/omarchy-restart-waybar b/bin/omarchy-restart-waybar new file mode 100755 index 00000000..8d113bd3 --- /dev/null +++ b/bin/omarchy-restart-waybar @@ -0,0 +1,4 @@ +#!/bin/bash + +killall waybar || true +setsid uwsm app -- waybar &>/dev/null & diff --git a/bin/omarchy-theme-set b/bin/omarchy-theme-set index 03baae45..791fc0d5 100755 --- a/bin/omarchy-theme-set +++ b/bin/omarchy-theme-set @@ -44,7 +44,7 @@ touch "$HOME/.config/alacritty/alacritty.toml" # Restart components to apply new theme pkill -SIGUSR2 btop -pkill -SIGUSR2 waybar +"$HOME/.local/share/omarchy/bin/omarchy-restart-waybar" pkill swayosd-server setsid uwsm app -- swayosd-server &>/dev/null & makoctl reload diff --git a/config/hypr/hypridle.conf b/config/hypr/hypridle.conf index e607bda2..a7eaaf1c 100644 --- a/config/hypr/hypridle.conf +++ b/config/hypr/hypridle.conf @@ -2,7 +2,7 @@ general { lock_cmd = pidof hyprlock || hyprlock # avoid starting multiple hyprlock instances. before_sleep_cmd = loginctl lock-session # lock before suspend. after_sleep_cmd = hyprctl dispatch dpms on # to avoid having to press a key twice to turn on the display. - on_unlock_cmd = pkill -SIGUSR2 waybar # prevent stacking of waybar when waking + on_unlock_cmd = omarchy-restart-waybar # prevent stacking of waybar when waking } listener { diff --git a/migrations/1751225707.sh b/migrations/1751225707.sh index 7c9896c2..16387778 100644 --- a/migrations/1751225707.sh +++ b/migrations/1751225707.sh @@ -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 - pkill -SIGUSR2 waybar + omarchy-restart-waybar fi diff --git a/migrations/1754113760.sh b/migrations/1754113760.sh new file mode 100644 index 00000000..f66c1a4d --- /dev/null +++ b/migrations/1754113760.sh @@ -0,0 +1,10 @@ +echo "Change reload Waybar on unlock command to prevent stacking" + +if ! grep -q 'on_unlock_cmd *= *omarchy-restart-waybar' ~/.config/hypr/hypridle.conf; then + sed -i \ + '/^ on_unlock_cmd = pkill -SIGUSR2 waybar[[:space:]]*# prevent stacking of waybar when waking$/c\ + on_unlock_cmd = omarchy-restart-waybar # prevent stacking of waybar when waking' \ + ~/.config/hypr/hypridle.conf + + omarchy-restart-waybar +fi From 343a948ffc4b02bd0c6b9bc18fb3ea74fbe84c04 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Sat, 2 Aug 2025 13:37:00 +0200 Subject: [PATCH 12/24] Simplify error checking --- bin/omarchy-cmd-screensaver | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/bin/omarchy-cmd-screensaver b/bin/omarchy-cmd-screensaver index 0689c6a4..30afe769 100755 --- a/bin/omarchy-cmd-screensaver +++ b/bin/omarchy-cmd-screensaver @@ -2,22 +2,14 @@ trap "exit" SIGINT -screensaver() { +if command -v tte &>/dev/null; then while true; do effect=$(tte 2>&1 | grep -oP '{\K[^}]+' | tr ',' ' ' | tr ' ' '\n' | sed -n '/^beams$/,$p' | sort -u | shuf -n1) tte -i ~/.local/share/omarchy/logo.txt \ --frame-rate 240 --canvas-width 0 --canvas-height $(($(tput lines) - 2)) --anchor-canvas c --anchor-text c \ "$effect" done -} - -if command -v tte &>/dev/null; then - screensaver else - if command -v pip &>/dev/null; then - pip install terminaltexteffects - screensaver - else - gum spin --title "Can't find tte or pip. Install pip, then try: pip install terminaltexteffects" -- sleep 2 - fi -fi \ No newline at end of file + gum spin --title "Can't find tte. Try: pip install terminaltexteffects" -- sleep 2 +fi + From b0b2bf30d81524adcd0765b3c785d823eb51f504 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Sat, 2 Aug 2025 13:41:34 +0200 Subject: [PATCH 13/24] Allow any key to stop the screensaver --- bin/omarchy-cmd-screensaver | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/bin/omarchy-cmd-screensaver b/bin/omarchy-cmd-screensaver index 30afe769..bbe7b337 100755 --- a/bin/omarchy-cmd-screensaver +++ b/bin/omarchy-cmd-screensaver @@ -1,13 +1,18 @@ #!/bin/bash -trap "exit" SIGINT - if command -v tte &>/dev/null; then while true; do effect=$(tte 2>&1 | grep -oP '{\K[^}]+' | tr ',' ' ' | tr ' ' '\n' | sed -n '/^beams$/,$p' | sort -u | shuf -n1) tte -i ~/.local/share/omarchy/logo.txt \ --frame-rate 240 --canvas-width 0 --canvas-height $(($(tput lines) - 2)) --anchor-canvas c --anchor-text c \ - "$effect" + "$effect" & + + while pgrep tte >/dev/null; do + if read -n 1 -t 0.01; then + pkill tte 2>/dev/null + exit 0 + fi + done done else gum spin --title "Can't find tte. Try: pip install terminaltexteffects" -- sleep 2 From 2823792ba2491ba8ccedadb493f76e4441e77ca6 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Sat, 2 Aug 2025 13:54:44 +0200 Subject: [PATCH 14/24] Show diff when making a backup and clarify the implementation --- bin/omarchy-refresh-config | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/bin/omarchy-refresh-config b/bin/omarchy-refresh-config index 82641d52..73996fa6 100755 --- a/bin/omarchy-refresh-config +++ b/bin/omarchy-refresh-config @@ -4,7 +4,7 @@ config_file=$1 if [[ -z "$config_file" ]]; then - cat << USAGE + cat </dev/null +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)" -# Deploy the source file -cp -f "${HOME}/.local/share/omarchy/config/${config_file}" "${HOME}/.config/${config_file}" 2>/dev/null +# 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 # Compare and delete/inform accordingly -if cmp -s "${HOME}/.config/${config_file}" "$backup_file"; then - rm $backup_file +if cmp -s "$user_config_file" "$backup_config_file"; then + rm "$backup_config_file" else - echo -e "\e[31mExisting "${HOME}/.config/${config_file}" replaced with new Omarchy default, but ${backup_file} file was made.\e[0m" + 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 From 4db468a450893c8a3964fa6f21297e98098c3655 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Sat, 2 Aug 2025 14:13:54 +0200 Subject: [PATCH 15/24] Must use the restarter to prevent stacking! --- migrations/1754133148.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/migrations/1754133148.sh b/migrations/1754133148.sh index 32ae1a1e..30294abb 100644 --- a/migrations/1754133148.sh +++ b/migrations/1754133148.sh @@ -2,5 +2,5 @@ echo "Update Waybar CSS to dim unused workspaces" if ! grep -q "#workspaces button\.empty" ~/.config/waybar/style.css; then omarchy-refresh-config waybar/style.css - pkill -SIGUSR2 waybar + omarchy-restart-waybar fi From 6ecc09abdbe58506b740c8b8df6dd00d1370cddb Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Sat, 2 Aug 2025 14:14:03 +0200 Subject: [PATCH 16/24] Start screensaver automatically (#453) * No need to kill any more since any key will quit * Command to refresh hypridle * Start screensaver automatically after a minute * Add migration --- bin/omarchy-launch-screensaver | 2 +- bin/omarchy-refresh-hypridle | 6 ++++++ config/hypr/hypridle.conf | 5 +++++ migrations/1754136581.sh | 5 +++++ 4 files changed, 17 insertions(+), 1 deletion(-) create mode 100755 bin/omarchy-refresh-hypridle create mode 100644 migrations/1754136581.sh diff --git a/bin/omarchy-launch-screensaver b/bin/omarchy-launch-screensaver index a5736c3f..46170441 100755 --- a/bin/omarchy-launch-screensaver +++ b/bin/omarchy-launch-screensaver @@ -1,5 +1,5 @@ #!/bin/bash -pkill -f "alacritty --class Screensaver" || +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 diff --git a/bin/omarchy-refresh-hypridle b/bin/omarchy-refresh-hypridle new file mode 100755 index 00000000..0e1600c9 --- /dev/null +++ b/bin/omarchy-refresh-hypridle @@ -0,0 +1,6 @@ +#!/bin/bash + +omarchy-refresh-config hypr/hypridle.conf +pkill -x hypridle +uwsm app -- hypridle >/dev/null 2>&1 & + diff --git a/config/hypr/hypridle.conf b/config/hypr/hypridle.conf index a7eaaf1c..5a1e0166 100644 --- a/config/hypr/hypridle.conf +++ b/config/hypr/hypridle.conf @@ -5,6 +5,11 @@ general { on_unlock_cmd = omarchy-restart-waybar # prevent stacking of waybar when waking } +listener { + timeout = 60 # 1min + on-timeout = omarchy-launch-screensaver # start screensaver +} + listener { timeout = 300 # 5min on-timeout = loginctl lock-session # lock screen when timeout has passed diff --git a/migrations/1754136581.sh b/migrations/1754136581.sh new file mode 100644 index 00000000..2f594253 --- /dev/null +++ b/migrations/1754136581.sh @@ -0,0 +1,5 @@ +echo "Start screensaver automatically after 1 minute" + +if ! grep -q "omarchy-launch-screensaver" ~/.config/hypr/hypridle.conf; then + omarchy-refresh-hypridle +fi From 34f24cb38ac588e7e67b743f4edf1e971480ac5e Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Sat, 2 Aug 2025 14:26:08 +0200 Subject: [PATCH 17/24] Offer to reboot after Linux kernel has been updated Closes #377 --- bin/omarchy-update | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/bin/omarchy-update b/bin/omarchy-update index 19b44b22..c5b68b37 100755 --- a/bin/omarchy-update +++ b/bin/omarchy-update @@ -31,6 +31,10 @@ done echo -e "\e[32m\nUpdate system packages\e[0m" yay -Syu --noconfirm +# Offer to reboot if the kernel has been changed +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 + # Back to where we came from cd - >/dev/null - From 63840c6e9a73da979b1f86bc3c77da6941eed933 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Sat, 2 Aug 2025 14:44:01 +0200 Subject: [PATCH 18/24] Add screensaver as an option in the power menu --- bin/omarchy-menu-power | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bin/omarchy-menu-power b/bin/omarchy-menu-power index 56e005e1..94e0fc03 100755 --- a/bin/omarchy-menu-power +++ b/bin/omarchy-menu-power @@ -3,6 +3,7 @@ show_power_menu() { # The first characters are invisible sort keys. local menu_options=" Lock +󱄄 Save 󰤄 Suspend  Relaunch 󰜉 Restart @@ -11,6 +12,7 @@ show_power_menu() { case "$selection" in *Lock*) hyprlock ;; + *Show*) ~/.local/share/omarchy/bin/omarchy-launch-screensaver ;; *Suspend*) systemctl suspend ;; *Relaunch*) uwsm stop ;; *Restart*) systemctl reboot ;; From f729004306b3a33a0f66f5a6c3ba9e06a17b403d Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Sat, 2 Aug 2025 21:48:06 +0200 Subject: [PATCH 19/24] Show indicator if update is available (#456) * Show indicator if update is available * Language --- bin/omarchy-update | 5 +++-- bin/omarchy-update-available | 13 +++++++++++++ config/waybar/config.jsonc | 9 ++++++++- default/hypr/windows.conf | 2 +- 4 files changed, 25 insertions(+), 4 deletions(-) create mode 100755 bin/omarchy-update-available diff --git a/bin/omarchy-update b/bin/omarchy-update index c5b68b37..61cbf4b8 100755 --- a/bin/omarchy-update +++ b/bin/omarchy-update @@ -3,11 +3,12 @@ # Exit immediately if a command exits with a non-zero status set -e -STATE_DIR="$HOME/.local/state/omarchy/migrations" - +clear +cat <~/.local/share/omarchy/logo.txt cd ~/.local/share/omarchy # Create the migrations state directory, we will store an empty file for each migration that has already been performed. +STATE_DIR="$HOME/.local/state/omarchy/migrations" mkdir -p "$STATE_DIR" # Get the latest while trying to preserve any modifications diff --git a/bin/omarchy-update-available b/bin/omarchy-update-available new file mode 100755 index 00000000..f3196174 --- /dev/null +++ b/bin/omarchy-update-available @@ -0,0 +1,13 @@ +#!/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)) + +if [[ "$current_tag" < "$latest_tag" ]]; then + echo "Omarchy update available ($latest_tag)" + exit 0 +else + echo "Omarchy is up to date ($current_tag)" + exit 1 +fi diff --git a/config/waybar/config.jsonc b/config/waybar/config.jsonc index dd92bf32..663a4a6e 100644 --- a/config/waybar/config.jsonc +++ b/config/waybar/config.jsonc @@ -8,7 +8,8 @@ "hyprland/workspaces" ], "modules-center": [ - "clock" + "clock", + "custom/update" ], "modules-right": [ "group/tray-expander", @@ -42,6 +43,12 @@ "5": [] } }, + "custom/update": { + "format": "", + "exec": "~/.local/share/omarchy/bin/omarchy-update-available", + "on-click": "alacritty --class Omarchy --title Omarchy -e omarchy-update", + "interval": 3600 + }, "cpu": { "interval": 5, "format": "󰍛", diff --git a/default/hypr/windows.conf b/default/hypr/windows.conf index 9ead813d..c9d69926 100644 --- a/default/hypr/windows.conf +++ b/default/hypr/windows.conf @@ -8,7 +8,7 @@ windowrule = tile, class:^(Chromium)$ 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 590 450, class:Omarchy +windowrule = size 600 470, class:Omarchy windowrule = size 700 470 class:About # Float and center file pickers From f6a459b26b389afcd175b72d5cae4391ea58b386 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Sat, 2 Aug 2025 21:52:36 +0200 Subject: [PATCH 20/24] Fix power menu for Screen save --- bin/omarchy-menu-power | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/omarchy-menu-power b/bin/omarchy-menu-power index 94e0fc03..f10f8998 100755 --- a/bin/omarchy-menu-power +++ b/bin/omarchy-menu-power @@ -12,7 +12,7 @@ show_power_menu() { case "$selection" in *Lock*) hyprlock ;; - *Show*) ~/.local/share/omarchy/bin/omarchy-launch-screensaver ;; + *Save*) ~/.local/share/omarchy/bin/omarchy-launch-screensaver ;; *Suspend*) systemctl suspend ;; *Relaunch*) uwsm stop ;; *Restart*) systemctl reboot ;; From 54d22e972082db037883298be7862f8efc7b7e86 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Sat, 2 Aug 2025 21:56:09 +0200 Subject: [PATCH 21/24] Stop screensaver when locking --- config/hypr/hypridle.conf | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/config/hypr/hypridle.conf b/config/hypr/hypridle.conf index 5a1e0166..6579248e 100644 --- a/config/hypr/hypridle.conf +++ b/config/hypr/hypridle.conf @@ -1,8 +1,9 @@ general { - lock_cmd = pidof hyprlock || hyprlock # avoid starting multiple hyprlock instances. - before_sleep_cmd = loginctl lock-session # lock before suspend. - after_sleep_cmd = hyprctl dispatch dpms on # to avoid having to press a key twice to turn on the display. - on_unlock_cmd = omarchy-restart-waybar # prevent stacking of waybar when waking + lock_cmd = pidof hyprlock || hyprlock # avoid starting multiple hyprlock instances. + before_sleep_cmd = loginctl lock-session # lock before suspend. + after_sleep_cmd = hyprctl dispatch dpms on # to avoid having to press a key twice to turn on the display. + on_lock_cmd = pkill -f "alacritty --class Screensaver" # avoid running screensaver when locked + on_unlock_cmd = omarchy-restart-waybar # prevent stacking of waybar when waking } listener { From d0c93e3b8ab5646a253910cd999c20e0ba4b4a06 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Sat, 2 Aug 2025 22:00:57 +0200 Subject: [PATCH 22/24] Also update hyprlock for stopping before updating --- migrations/1754136581.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/migrations/1754136581.sh b/migrations/1754136581.sh index 2f594253..d2c78b94 100644 --- a/migrations/1754136581.sh +++ b/migrations/1754136581.sh @@ -1,5 +1,6 @@ -echo "Start screensaver automatically after 1 minute" +echo "Start screensaver automatically after 1 minute and stop before locking" if ! grep -q "omarchy-launch-screensaver" ~/.config/hypr/hypridle.conf; then omarchy-refresh-hypridle + omarchy-refresh-hyprlock fi From e923be3f0b1b45286986f0a0a0e13f044d5e2296 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Sat, 2 Aug 2025 22:07:42 +0200 Subject: [PATCH 23/24] Split omarchy-migrate into its own command So it can be updated independently and apply quicker --- bin/omarchy-migrate | 26 ++++++++++++++++++++++++++ bin/omarchy-update | 28 ++++++---------------------- 2 files changed, 32 insertions(+), 22 deletions(-) create mode 100755 bin/omarchy-migrate diff --git a/bin/omarchy-migrate b/bin/omarchy-migrate new file mode 100755 index 00000000..f547570f --- /dev/null +++ b/bin/omarchy-migrate @@ -0,0 +1,26 @@ +#!/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. +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 + 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" +done + +# Back to where we came from +cd - >/dev/null diff --git a/bin/omarchy-update b/bin/omarchy-update index 61cbf4b8..b76e54c1 100755 --- a/bin/omarchy-update +++ b/bin/omarchy-update @@ -3,30 +3,17 @@ # Exit immediately if a command exits with a non-zero status set -e +# Show logo clear cat <~/.local/share/omarchy/logo.txt -cd ~/.local/share/omarchy - -# Create the migrations state directory, we will store an empty file for each migration that has already been performed. -STATE_DIR="$HOME/.local/state/omarchy/migrations" -mkdir -p "$STATE_DIR" # Get the latest while trying to preserve any modifications -git pull --autostash -git diff --check || git reset --merge +omarchy_path=~/.local/share/omarchy +git -C $omarchy_path pull --autostash +git -C $omarchy_path diff --check || git -C $omarchy_path reset --merge -# Run any pending migrations -for file in 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" -done +# Run migrations +"$HOME/.local/share/omarchy/bin/omarchy-migrate" # Update system packages echo -e "\e[32m\nUpdate system packages\e[0m" @@ -36,6 +23,3 @@ 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 - -# Back to where we came from -cd - >/dev/null From 631b62927af13799d5efb05ad090638799c0071e Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Sat, 2 Aug 2025 22:14:16 +0200 Subject: [PATCH 24/24] Better than doing string comparison Any tag difference means new release --- bin/omarchy-update-available | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/omarchy-update-available b/bin/omarchy-update-available index f3196174..8a5bfa0e 100755 --- a/bin/omarchy-update-available +++ b/bin/omarchy-update-available @@ -4,7 +4,7 @@ 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)) -if [[ "$current_tag" < "$latest_tag" ]]; then +if [[ "$current_tag" != "$latest_tag" ]]; then echo "Omarchy update available ($latest_tag)" exit 0 else