From d7cd1950cec570f04d92a1ae3223889416e88706 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Tue, 28 Oct 2025 16:56:07 +0100 Subject: [PATCH 01/23] Bump for the next version --- version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version b/version index 0aec50e6..3ad0595a 100644 --- a/version +++ b/version @@ -1 +1 @@ -3.1.4 +3.1.5 From d3a54dc32e4715935e6149d6cb68082c80002156 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Tue, 28 Oct 2025 18:19:17 +0100 Subject: [PATCH 02/23] Show keybindings notice right away and vary update based on internet or not --- bin/omarchy-cmd-first-run | 2 +- install/first-run/wifi.sh | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/bin/omarchy-cmd-first-run b/bin/omarchy-cmd-first-run index 1031185f..c8837e00 100755 --- a/bin/omarchy-cmd-first-run +++ b/bin/omarchy-cmd-first-run @@ -14,6 +14,6 @@ if [[ -f "$FIRST_RUN_MODE" ]]; then bash "$OMARCHY_PATH/install/first-run/gnome-theme.sh" sudo rm -f /etc/sudoers.d/first-run - bash "$OMARCHY_PATH/install/first-run/wifi.sh" bash "$OMARCHY_PATH/install/first-run/welcome.sh" + bash "$OMARCHY_PATH/install/first-run/wifi.sh" fi diff --git a/install/first-run/wifi.sh b/install/first-run/wifi.sh index d645a5c3..758a84c4 100644 --- a/install/first-run/wifi.sh +++ b/install/first-run/wifi.sh @@ -1,3 +1,6 @@ if ! ping -c3 -W1 1.1.1.1 >/dev/null 2>&1; then notify-send "󰖩 Click to Setup Wi-Fi" "Tab to navigate, Space to select, ? for help." -u critical -t 30000 + notify-send " Update System" "When you have internet, click to update the system." -u critical +else + notify-send " Update System" "Click to update the system." -u critical fi From 9490e714c3726cdf2096db8159535a1990c5bc5d Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Tue, 28 Oct 2025 18:19:28 +0100 Subject: [PATCH 03/23] Moved --- install/first-run/welcome.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/install/first-run/welcome.sh b/install/first-run/welcome.sh index 2da4be2e..9c5d06af 100644 --- a/install/first-run/welcome.sh +++ b/install/first-run/welcome.sh @@ -1,2 +1 @@ -notify-send " Update System" "When you have internet, click to update the system." -u critical notify-send " Learn Keybindings" "Super + K for cheatsheet.\nSuper + Space for application launcher.\nSuper + Alt + Space for Omarchy Menu." -u critical From 7770f49c1a8eaec103e7fcec5ba0a148f087fc36 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Tue, 28 Oct 2025 18:20:39 +0100 Subject: [PATCH 04/23] Looks better without margin --- bin/omarchy-update | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/omarchy-update b/bin/omarchy-update index 32f825b1..5e42f635 100755 --- a/bin/omarchy-update +++ b/bin/omarchy-update @@ -4,7 +4,7 @@ set -e trap 'echo ""; echo -e "\033[0;31mSomething went wrong during the update!\n\nPlease review the output above carefully, correct the error, and retry the update.\n\nIf you need assistance, get help from the community at https://omarchy.org/discord\033[0m"' ERR -gum style --border normal --border-foreground 6 --padding "1 2" --margin "1 0" \ +gum style --border normal --border-foreground 6 --padding "1 2" \ "Ready to update Omarchy?" \ "" \ "• You cannot stop the update once you start!" \ From ac8073fc8156b0e71ea155c3f97757357584067a Mon Sep 17 00:00:00 2001 From: Joshua Fouch <162926985+joshuafouch@users.noreply.github.com> Date: Wed, 29 Oct 2025 05:58:06 -0400 Subject: [PATCH 05/23] Fix: Low Battery notification returning empty value on reboot (#2949) * Fix: Low Battery notification returning empty value on reboot * Simplify the check * Double paste --------- Co-authored-by: David Heinemeier Hansson --- bin/omarchy-battery-monitor | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/bin/omarchy-battery-monitor b/bin/omarchy-battery-monitor index 20d6a1e1..84c42974 100755 --- a/bin/omarchy-battery-monitor +++ b/bin/omarchy-battery-monitor @@ -11,11 +11,13 @@ send_notification() { notify-send -u critical "󱐋 Time to recharge!" "Battery is down to ${1}%" -i battery-caution -t 30000 } -if [[ $BATTERY_STATE == "discharging" && $BATTERY_LEVEL -le $BATTERY_THRESHOLD ]]; then - if [[ ! -f $NOTIFICATION_FLAG ]]; then - send_notification $BATTERY_LEVEL - touch $NOTIFICATION_FLAG +if [[ -n "$BATTERY_LEVEL" && "$BATTERY_LEVEL" =~ ^[0-9]+$ ]]; then + if [[ $BATTERY_STATE == "discharging" && $BATTERY_LEVEL -le $BATTERY_THRESHOLD ]]; then + if [[ ! -f $NOTIFICATION_FLAG ]]; then + send_notification $BATTERY_LEVEL + touch $NOTIFICATION_FLAG + fi + else + rm -f $NOTIFICATION_FLAG fi -else - rm -f $NOTIFICATION_FLAG fi From 407d283cb7e78567b1bf4aceb768c157e56b4db6 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Wed, 29 Oct 2025 10:58:22 +0100 Subject: [PATCH 06/23] Rephrase --- bin/omarchy-update | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/omarchy-update b/bin/omarchy-update index 5e42f635..deb08e7e 100755 --- a/bin/omarchy-update +++ b/bin/omarchy-update @@ -8,7 +8,7 @@ gum style --border normal --border-foreground 6 --padding "1 2" \ "Ready to update Omarchy?" \ "" \ "• You cannot stop the update once you start!" \ - "• Make sure you're not on battery power or have sufficient charge" + "• Make sure you're connected to power or have a full battery" if ! gum confirm --default=false "Continue with update?"; then echo "Update cancelled" From 3344f33104796f3743daaa4a75cbf95e4a5c9eff Mon Sep 17 00:00:00 2001 From: Ryan Hughes Date: Wed, 29 Oct 2025 13:25:45 -0400 Subject: [PATCH 07/23] Use xdg-mime to set nvim as default As @abenz1267 pointed out, the previous solution wasn't the greatest. This is the proper solution. --- install/config/mimetypes.sh | 19 +++++++++++++++++++ migrations/1761583837.sh | 7 ------- migrations/1761758552.sh | 21 +++++++++++++++++++++ 3 files changed, 40 insertions(+), 7 deletions(-) delete mode 100644 migrations/1761583837.sh create mode 100644 migrations/1761758552.sh diff --git a/install/config/mimetypes.sh b/install/config/mimetypes.sh index ee662f55..ea8e1aff 100644 --- a/install/config/mimetypes.sh +++ b/install/config/mimetypes.sh @@ -36,3 +36,22 @@ xdg-mime default mpv.desktop application/ogg # Use Hey for mailto: links xdg-mime default HEY.desktop x-scheme-handler/mailto + +# Open text files with nvim +xdg-mime default nvim.desktop text/plain +xdg-mime default nvim.desktop text/english +xdg-mime default nvim.desktop text/x-makefile +xdg-mime default nvim.desktop text/x-c++hdr +xdg-mime default nvim.desktop text/x-c++src +xdg-mime default nvim.desktop text/x-chdr +xdg-mime default nvim.desktop text/x-csrc +xdg-mime default nvim.desktop text/x-java +xdg-mime default nvim.desktop text/x-moc +xdg-mime default nvim.desktop text/x-pascal +xdg-mime default nvim.desktop text/x-tcl +xdg-mime default nvim.desktop text/x-tex +xdg-mime default nvim.desktop application/x-shellscript +xdg-mime default nvim.desktop text/x-c +xdg-mime default nvim.desktop text/x-c++ +xdg-mime default nvim.desktop application/xml +xdg-mime default nvim.desktop text/xml diff --git a/migrations/1761583837.sh b/migrations/1761583837.sh deleted file mode 100644 index 0e32981d..00000000 --- a/migrations/1761583837.sh +++ /dev/null @@ -1,7 +0,0 @@ -echo "Ensure nvim started from app launcher always starts nvim not $EDITOR" - -if [ -f /usr/share/applications/nvim.desktop ]; then - rm ~/.local/share/applications/nvim.desktop - ln -s /usr/share/applications/nvim.desktop ~/.local/share/applications/nvim.desktop - update-desktop-database ~/.local/share/applications -fi diff --git a/migrations/1761758552.sh b/migrations/1761758552.sh new file mode 100644 index 00000000..49680d09 --- /dev/null +++ b/migrations/1761758552.sh @@ -0,0 +1,21 @@ +echo "Set nvim as default via xdg-mime" + +rm ~/.local/share/applications/nvim.desktop || true + +xdg-mime default nvim.desktop text/plain +xdg-mime default nvim.desktop text/english +xdg-mime default nvim.desktop text/x-makefile +xdg-mime default nvim.desktop text/x-c++hdr +xdg-mime default nvim.desktop text/x-c++src +xdg-mime default nvim.desktop text/x-chdr +xdg-mime default nvim.desktop text/x-csrc +xdg-mime default nvim.desktop text/x-java +xdg-mime default nvim.desktop text/x-moc +xdg-mime default nvim.desktop text/x-pascal +xdg-mime default nvim.desktop text/x-tcl +xdg-mime default nvim.desktop text/x-tex +xdg-mime default nvim.desktop application/x-shellscript +xdg-mime default nvim.desktop text/x-c +xdg-mime default nvim.desktop text/x-c++ +xdg-mime default nvim.desktop application/xml +xdg-mime default nvim.desktop text/xml From fb3271f3afc07a3ecb92218fd422f4f75a97c200 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Fri, 31 Oct 2025 14:09:51 +0100 Subject: [PATCH 08/23] Fix phantom recording indicator Closes #2656 Co-authored-by: @davidszp --- default/waybar/indicators/screen-recording.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/default/waybar/indicators/screen-recording.sh b/default/waybar/indicators/screen-recording.sh index bb6cf93c..80038e0e 100755 --- a/default/waybar/indicators/screen-recording.sh +++ b/default/waybar/indicators/screen-recording.sh @@ -1,6 +1,6 @@ #!/bin/bash -if pgrep -f "gpu-screen-recorder" >/dev/null; then +if pgrep -f "^gpu-screen-recorder" >/dev/null; then echo '{"text": "󰻂", "tooltip": "Stop recording", "class": "active"}' else echo '{"text": ""}' From fc0983624e6e63f05ee9dd36595f731824d3c8c6 Mon Sep 17 00:00:00 2001 From: Brian Blakely Date: Fri, 31 Oct 2025 09:22:30 -0400 Subject: [PATCH 09/23] VS Code: Apply Omarchy theme during install (#2983) * Apply Omarchy theme; Install Neovim extension (automatically scoops up LazyVim config). * Just set the Omarchy theme Removed installation of Neovim extension from script. --------- Co-authored-by: David Heinemeier Hansson --- bin/omarchy-install-vscode | 3 +++ 1 file changed, 3 insertions(+) diff --git a/bin/omarchy-install-vscode b/bin/omarchy-install-vscode index 9ac4cd5a..4c5b036a 100755 --- a/bin/omarchy-install-vscode +++ b/bin/omarchy-install-vscode @@ -21,4 +21,7 @@ EOF # Ensure VSC's own auto-update feature is turned off printf '{\n "update.mode": "none"\n}\n' > ~/.config/Code/User/settings.json +# Apply Omarchy theme to VSCode +omarchy-theme-set-vscode + setsid gtk-launch code From dd3b64ef7f7e3d851ef1f46dcb06687b454135df Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Fri, 31 Oct 2025 14:33:53 +0100 Subject: [PATCH 10/23] Extract the confirmation into its own file --- bin/omarchy-update | 12 +----------- bin/omarchy-update-confirm | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 11 deletions(-) create mode 100755 bin/omarchy-update-confirm diff --git a/bin/omarchy-update b/bin/omarchy-update index deb08e7e..a3a7ac47 100755 --- a/bin/omarchy-update +++ b/bin/omarchy-update @@ -4,17 +4,7 @@ set -e trap 'echo ""; echo -e "\033[0;31mSomething went wrong during the update!\n\nPlease review the output above carefully, correct the error, and retry the update.\n\nIf you need assistance, get help from the community at https://omarchy.org/discord\033[0m"' ERR -gum style --border normal --border-foreground 6 --padding "1 2" \ - "Ready to update Omarchy?" \ - "" \ - "• You cannot stop the update once you start!" \ - "• Make sure you're connected to power or have a full battery" - -if ! gum confirm --default=false "Continue with update?"; then - echo "Update cancelled" - exit 0 -fi - +omarchy-update-confirm omarchy-snapshot create || [ $? -eq 127 ] omarchy-update-git omarchy-update-perform diff --git a/bin/omarchy-update-confirm b/bin/omarchy-update-confirm new file mode 100755 index 00000000..d4ff436d --- /dev/null +++ b/bin/omarchy-update-confirm @@ -0,0 +1,14 @@ +#!/bin/bash + +set -e + +gum style --border normal --border-foreground 6 --padding "1 2" \ + "Ready to update Omarchy?" \ + "" \ + "• You cannot stop the update once you start!" \ + "• Make sure you're connected to power or have a full battery" + +if ! gum confirm --default=false "Continue with update?"; then + echo "Update cancelled" + exit 0 +fi From 58ecda3b80d39be8648ae66a6248f1e89dfc112a Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Fri, 31 Oct 2025 14:34:08 +0100 Subject: [PATCH 11/23] Make Yes the default --- bin/omarchy-update-confirm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/omarchy-update-confirm b/bin/omarchy-update-confirm index d4ff436d..bc0c9f54 100755 --- a/bin/omarchy-update-confirm +++ b/bin/omarchy-update-confirm @@ -8,7 +8,7 @@ gum style --border normal --border-foreground 6 --padding "1 2" \ "• You cannot stop the update once you start!" \ "• Make sure you're connected to power or have a full battery" -if ! gum confirm --default=false "Continue with update?"; then +if ! gum confirm "Continue with update?"; then echo "Update cancelled" exit 0 fi From 3c89acadc1c536ce4d9b82ca5281b436e16c3ab2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wojciech=20Wn=C4=99trzak?= Date: Sun, 2 Nov 2025 20:04:53 +0100 Subject: [PATCH 12/23] Further instructions for auto nightlight (#3082) Follow up to https://github.com/basecamp/omarchy/pull/2446l I noticed that it did not work because the process was not running by default, vide https://github.com/basecamp/omarchy/commit/d9efaac906cc291f27a242d66e940a6357658b3c --- config/hypr/hyprsunset.conf | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/config/hypr/hyprsunset.conf b/config/hypr/hyprsunset.conf index f51ff746..c4d0f8d3 100644 --- a/config/hypr/hyprsunset.conf +++ b/config/hypr/hyprsunset.conf @@ -5,7 +5,9 @@ profile { identity = true } -# Enable auto switch to nightlight: +# To enable auto switch to nightlight, set in your .config/hypr/autostart: +# exec-once = uwsm app -- hyprsunset +# and use the following: # profile { # time = 20:00 # temperature = 4000 From bfeb3a1e65d8ee9fc5272f1a509f965ebdbd177c Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Sun, 2 Nov 2025 20:12:08 +0100 Subject: [PATCH 13/23] Gemini is now on extra/gemini-cli Closes #3040 Co-authored-by: @maromalo --- bin/omarchy-menu | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/omarchy-menu b/bin/omarchy-menu index 10337685..8b78c3fd 100755 --- a/bin/omarchy-menu +++ b/bin/omarchy-menu @@ -287,11 +287,11 @@ show_install_ai_menu() { echo ollama ) - case $(menu "Install" "󱚤 Claude Code\n󱚤 Cursor CLI [AUR]\n󱚤 Gemini [AUR]\n󱚤 OpenAI Codex\n󱚤 LM Studio\n󱚤 Ollama\n󱚤 Crush\n󱚤 opencode") in + case $(menu "Install" "󱚤 Claude Code\n󱚤 Cursor CLI [AUR]\n󱚤 Gemini\n󱚤 OpenAI Codex\n󱚤 LM Studio\n󱚤 Ollama\n󱚤 Crush\n󱚤 opencode") in *Claude*) install "Claude Code" "claude-code" ;; *Cursor*) aur_install "Cursor CLI" "cursor-cli" ;; *OpenAI*) install "OpenAI Codex" "openai-codex-bin" ;; - *Gemini*) aur_install "Gemini" "gemini-cli" ;; + *Gemini*) install "Gemini" "gemini-cli" ;; *Studio*) install "LM Studio" "lmstudio" ;; *Ollama*) install "Ollama" $ollama_pkg ;; *Crush*) install "Crush" "crush-bin" ;; From f76ba69f7062676a41bb7fb8214b56dd60b42f72 Mon Sep 17 00:00:00 2001 From: killeik <69602482+killeik@users.noreply.github.com> Date: Sun, 2 Nov 2025 22:28:41 +0300 Subject: [PATCH 14/23] Make omarchy-launch-editor check that setted $EDITOR exists (#3072) --- bin/omarchy-launch-editor | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/bin/omarchy-launch-editor b/bin/omarchy-launch-editor index dbe84cfd..81879626 100755 --- a/bin/omarchy-launch-editor +++ b/bin/omarchy-launch-editor @@ -1,6 +1,8 @@ #!/bin/bash -case "${EDITOR:-nvim}" in +omarchy-cmd-present "$EDITOR" || EDITOR=nvim + +case "$EDITOR" in nvim | vim | nano | micro | hx | helix) exec setsid uwsm-app -- "$TERMINAL" -e "$EDITOR" "$@" ;; From b738c77acfe66b88bc6e995c20c1a3c0b30e9c47 Mon Sep 17 00:00:00 2001 From: Ryan Robitaille Date: Sun, 2 Nov 2025 14:36:28 -0500 Subject: [PATCH 15/23] =?UTF-8?q?Feature=20(hypr):=20add=20=E2=80=9CPop=20?= =?UTF-8?q?window=E2=80=9D=20(float+pin)=20on=20SUPER+O=20(#2954)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Feature (hypr): add “Pop window” (float+pin) on SUPER+L * fix: changed default keybinding to SUPER+O --- bin/omarchy-cmd-pop | 22 ++++++++++++++++++++++ default/hypr/apps/system.conf | 3 +++ default/hypr/bindings/tiling-v2.conf | 1 + 3 files changed, 26 insertions(+) create mode 100755 bin/omarchy-cmd-pop diff --git a/bin/omarchy-cmd-pop b/bin/omarchy-cmd-pop new file mode 100755 index 00000000..ac700bf5 --- /dev/null +++ b/bin/omarchy-cmd-pop @@ -0,0 +1,22 @@ +#!/bin/bash + +# Toggle to pop-out a tile to stay fixed on a display basis. + +active=$(hyprctl activewindow -j) +pinned=$(echo "$active" | jq .pinned) +addr=$(echo "$active" | jq -r ".address") +[ -z "$addr" ] && { echo "No active window"; exit 0; } + +if [ "$pinned" = "true" ]; then + hyprctl -q --batch \ + "dispatch pin address:$addr;" \ + "dispatch togglefloating address:$addr;" \ + "dispatch tagwindow -pop address:$addr;" +else + hyprctl -q --batch \ + "dispatch togglefloating address:$addr;" \ + "dispatch centerwindow address:$addr;" \ + "dispatch pin address:$addr;" \ + "dispatch alterzorder top address:$addr;" \ + "dispatch tagwindow +pop address:$addr;" +fi diff --git a/default/hypr/apps/system.conf b/default/hypr/apps/system.conf index bca80dda..754ed0ca 100644 --- a/default/hypr/apps/system.conf +++ b/default/hypr/apps/system.conf @@ -12,3 +12,6 @@ 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)$ + +# Popped window rounding +windowrule = rounding 16, tag:pop diff --git a/default/hypr/bindings/tiling-v2.conf b/default/hypr/bindings/tiling-v2.conf index 805b4b46..bbe4d96b 100644 --- a/default/hypr/bindings/tiling-v2.conf +++ b/default/hypr/bindings/tiling-v2.conf @@ -9,6 +9,7 @@ bindd = SUPER, T, Toggle window floating/tiling, togglefloating, bindd = SUPER, F, Full screen, fullscreen, 0 bindd = SUPER CTRL, F, Tiled full screen, fullscreenstate, 0 2 bindd = SUPER ALT, F, Full width, fullscreen, 1 +bindd = SUPER, O, Pop window out (float & pin), exec, omarchy-cmd-pop # Move focus with SUPER + arrow keys bindd = SUPER, LEFT, Move window focus left, movefocus, l From 0f64a11f4e6584fdf894799b24aec4efa06e4f2e Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Sun, 2 Nov 2025 20:36:05 +0100 Subject: [PATCH 16/23] Follow naming convention from other hyprland scripts --- bin/{omarchy-cmd-pop => omarchy-hyprland-window-pop} | 0 default/hypr/bindings/tiling-v2.conf | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename bin/{omarchy-cmd-pop => omarchy-hyprland-window-pop} (100%) diff --git a/bin/omarchy-cmd-pop b/bin/omarchy-hyprland-window-pop similarity index 100% rename from bin/omarchy-cmd-pop rename to bin/omarchy-hyprland-window-pop diff --git a/default/hypr/bindings/tiling-v2.conf b/default/hypr/bindings/tiling-v2.conf index bbe4d96b..2589dd98 100644 --- a/default/hypr/bindings/tiling-v2.conf +++ b/default/hypr/bindings/tiling-v2.conf @@ -9,7 +9,7 @@ bindd = SUPER, T, Toggle window floating/tiling, togglefloating, bindd = SUPER, F, Full screen, fullscreen, 0 bindd = SUPER CTRL, F, Tiled full screen, fullscreenstate, 0 2 bindd = SUPER ALT, F, Full width, fullscreen, 1 -bindd = SUPER, O, Pop window out (float & pin), exec, omarchy-cmd-pop +bindd = SUPER, O, Pop window out (float & pin), exec, omarchy-hyprland-window-pop # Move focus with SUPER + arrow keys bindd = SUPER, LEFT, Move window focus left, movefocus, l From ae10133b5edb0521d7551707ac10c3a34461c5cc Mon Sep 17 00:00:00 2001 From: Ryan Hughes Date: Sun, 2 Nov 2025 17:57:25 -0500 Subject: [PATCH 17/23] Fix neovim launching from files Because of [hardcoded terminals in glib](https://gitlab.gnome.org/GNOME/glib/-/blob/main/gio/gdesktopappinfo.c#L2755) the previous fix still doesn't work well with Alacritty and Kitty. Using our `omarchy-launch-terminal` aliased to `xdg-terminal-exec` does the trick and doesn't introduce any new dependencies or rely on a lib that isn't stable. --- install/config/xdg-terminal-exec.sh | 3 +++ migrations/1762121827.sh | 4 ++++ 2 files changed, 7 insertions(+) create mode 100644 install/config/xdg-terminal-exec.sh create mode 100644 migrations/1762121827.sh diff --git a/install/config/xdg-terminal-exec.sh b/install/config/xdg-terminal-exec.sh new file mode 100644 index 00000000..edc751be --- /dev/null +++ b/install/config/xdg-terminal-exec.sh @@ -0,0 +1,3 @@ +# Solve for hardcoded glib terminals +# https://github.com/basecamp/omarchy/issues/1852 +sudo ln -s $OMARCHY_PATH/bin/omarchy-launch-terminal /usr/local/bin/xdg-terminal-exec diff --git a/migrations/1762121827.sh b/migrations/1762121827.sh new file mode 100644 index 00000000..69fa748b --- /dev/null +++ b/migrations/1762121827.sh @@ -0,0 +1,4 @@ +echo "Setting up xdg-terminal-exec for gtk-launch terminal support" +# Solve for hardcoded glib terminals +# https://github.com/basecamp/omarchy/issues/1852 +sudo ln -s $OMARCHY_PATH/bin/omarchy-launch-terminal /usr/local/bin/xdg-terminal-exec From 9e971e3e5630c3f6d9e8afc2d9a704a82b28e4fe Mon Sep 17 00:00:00 2001 From: Ryan Hughes Date: Sun, 2 Nov 2025 18:58:05 -0500 Subject: [PATCH 18/23] Fix not working with alacritty --- bin/omarchy-launch-terminal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/omarchy-launch-terminal b/bin/omarchy-launch-terminal index 67bb2919..9cf4addf 100755 --- a/bin/omarchy-launch-terminal +++ b/bin/omarchy-launch-terminal @@ -1,3 +1,3 @@ #!/bin/bash -exec setsid uwsm-app -- "${TERMINAL:-alacritty}" "$@" +exec setsid uwsm-app -- "${TERMINAL:-alacritty}" -e "$@" From 66b5f7eab848f1caca4f4644fd90e8cac10598a8 Mon Sep 17 00:00:00 2001 From: Ryan Hughes Date: Sun, 2 Nov 2025 22:50:25 -0500 Subject: [PATCH 19/23] Move a few more to OPR --- bin/omarchy-menu | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/bin/omarchy-menu b/bin/omarchy-menu index 8b78c3fd..1327a8f6 100755 --- a/bin/omarchy-menu +++ b/bin/omarchy-menu @@ -264,7 +264,7 @@ show_install_editor_menu() { *VSCode*) present_terminal omarchy-install-vscode ;; *Cursor*) install_and_launch "Cursor" "cursor-bin" "cursor" ;; *Zed*) install_and_launch "Zed" "zed" "dev.zed.Zed" ;; - *Sublime*) aur_install_and_launch "Sublime Text" "sublime-text-4" "sublime_text" ;; + *Sublime*) install_and_launch "Sublime Text" "sublime-text-4" "sublime_text" ;; *Helix*) install "Helix" "helix" ;; *Emacs*) install "Emacs" "emacs-wayland" && systemctl --user enable --now emacs.service ;; *) show_install_menu ;; @@ -287,9 +287,9 @@ show_install_ai_menu() { echo ollama ) - case $(menu "Install" "󱚤 Claude Code\n󱚤 Cursor CLI [AUR]\n󱚤 Gemini\n󱚤 OpenAI Codex\n󱚤 LM Studio\n󱚤 Ollama\n󱚤 Crush\n󱚤 opencode") in + case $(menu "Install" "󱚤 Claude Code\n󱚤 Cursor CLI\n󱚤 Gemini\n󱚤 OpenAI Codex\n󱚤 LM Studio\n󱚤 Ollama\n󱚤 Crush\n󱚤 opencode") in *Claude*) install "Claude Code" "claude-code" ;; - *Cursor*) aur_install "Cursor CLI" "cursor-cli" ;; + *Cursor*) install "Cursor CLI" "cursor-cli" ;; *OpenAI*) install "OpenAI Codex" "openai-codex-bin" ;; *Gemini*) install "Gemini" "gemini-cli" ;; *Studio*) install "LM Studio" "lmstudio" ;; @@ -304,7 +304,7 @@ show_install_gaming_menu() { case $(menu "Install" " Steam\n RetroArch [AUR]\n󰍳 Minecraft") in *Steam*) present_terminal omarchy-install-steam ;; *RetroArch*) aur_install_and_launch "RetroArch" "retroarch retroarch-assets libretro libretro-fbneo" "com.libretro.RetroArch.desktop" ;; - *Minecraft*) aur_install_and_launch "Minecraft [AUR]" "minecraft-launcher" "minecraft-launcher" ;; + *Minecraft*) install_and_launch "Minecraft" "minecraft-launcher" "minecraft-launcher" ;; *) show_install_menu ;; esac } From 4c97a31c9811a4c96dac127048dd5e07d78af24d Mon Sep 17 00:00:00 2001 From: Ryan Hughes Date: Mon, 3 Nov 2025 01:09:26 -0500 Subject: [PATCH 20/23] Switch to xdg-terminal-exec Solves the issue from ae10133b5edb0521d7551707ac10c3a34461c5cc the right way using the actual xdg-terminal-exec package and provides resillient fallbacks no matter what the user might do. This also removes the need to restart after changing terminals at all. fixes #2198 fixes #2329 fixes #2673 fixes #1754 --- applications/Alacritty.desktop | 21 ++++++ bin/omarchy-install-terminal | 32 +++++++++- bin/omarchy-launch-about | 2 +- bin/omarchy-launch-editor | 2 +- ...launch-floating-terminal-with-presentation | 2 +- bin/omarchy-launch-terminal | 3 - bin/omarchy-launch-wifi | 2 +- bin/omarchy-menu | 4 +- config/hypr/bindings.conf | 2 +- config/uwsm/default | 2 +- config/waybar/config.jsonc | 6 +- default/hypr/apps/system.conf | 4 +- install/config/xdg-terminal-exec.sh | 3 - install/omarchy-base.packages | 1 + migrations/1762121827.sh | 4 -- migrations/1762121828.sh | 64 +++++++++++++++++++ 16 files changed, 128 insertions(+), 26 deletions(-) create mode 100644 applications/Alacritty.desktop delete mode 100755 bin/omarchy-launch-terminal delete mode 100644 install/config/xdg-terminal-exec.sh delete mode 100644 migrations/1762121827.sh create mode 100644 migrations/1762121828.sh diff --git a/applications/Alacritty.desktop b/applications/Alacritty.desktop new file mode 100644 index 00000000..f53c813e --- /dev/null +++ b/applications/Alacritty.desktop @@ -0,0 +1,21 @@ +[Desktop Entry] +Type=Application +TryExec=alacritty +Exec=alacritty +Icon=Alacritty +Terminal=false +Categories=System;TerminalEmulator; +Name=Alacritty +GenericName=Terminal +Comment=A fast, cross-platform, OpenGL terminal emulator +StartupNotify=true +StartupWMClass=Alacritty +Actions=New; +X-TerminalArgExec=-e +X-TerminalArgAppId=--class= +X-TerminalArgTitle=--title= +X-TerminalArgDir=--working-directory= + +[Desktop Action New] +Name=New Terminal +Exec=alacritty diff --git a/bin/omarchy-install-terminal b/bin/omarchy-install-terminal index 804ccb7a..0cea1a4c 100755 --- a/bin/omarchy-install-terminal +++ b/bin/omarchy-install-terminal @@ -7,15 +7,41 @@ fi package="$1" +# Map package name to desktop entry ID +case "$package" in + alacritty) + desktop_id="Alacritty.desktop" + ;; + ghostty) + desktop_id="com.mitchellh.ghostty.desktop" + ;; + kitty) + desktop_id="kitty.desktop" + ;; + *) + echo "Unknown terminal: $package" + exit 1 + ;; +esac + # Install package if omarchy-pkg-add $package; then # Set as default terminal echo "Setting $package as new default terminal..." sed -i "/export TERMINAL=/ c\export TERMINAL=$package" ~/.config/uwsm/default - # Restart is needed for new default to take effect - echo - gum confirm "Restart to use new terminal?" && systemctl reboot --no-wall + # Copy custom desktop entry for alacritty with X-TerminalArg* keys + if [ "$package" = "alacritty" ]; then + mkdir -p ~/.local/share/applications + cp "$OMARCHY_PATH/applications/Alacritty.desktop" ~/.local/share/applications/ + fi + + # Update xdg-terminals.list to prioritize the proper terminal + cat > ~/.config/xdg-terminals.list << EOF +# Terminal emulator preference order for xdg-terminal-exec +# The first found and valid terminal will be used +$desktop_id +EOF else echo "Failed to install $package" fi diff --git a/bin/omarchy-launch-about b/bin/omarchy-launch-about index 797e340f..8505ff0e 100755 --- a/bin/omarchy-launch-about +++ b/bin/omarchy-launch-about @@ -1,3 +1,3 @@ #!/bin/bash -exec setsid uwsm-app -- alacritty --class=Omarchy -o font.size=9 -e bash -c 'fastfetch; read -n 1 -s' +exec setsid uwsm-app -- xdg-terminal-exec --app-id=com.omarchy.Omarchy -e bash -c 'fastfetch; read -n 1 -s' diff --git a/bin/omarchy-launch-editor b/bin/omarchy-launch-editor index 81879626..f120001e 100755 --- a/bin/omarchy-launch-editor +++ b/bin/omarchy-launch-editor @@ -4,7 +4,7 @@ omarchy-cmd-present "$EDITOR" || EDITOR=nvim case "$EDITOR" in nvim | vim | nano | micro | hx | helix) - exec setsid uwsm-app -- "$TERMINAL" -e "$EDITOR" "$@" + exec setsid uwsm-app -- xdg-terminal-exec "$EDITOR" "$@" ;; *) exec setsid uwsm-app -- "$EDITOR" "$@" diff --git a/bin/omarchy-launch-floating-terminal-with-presentation b/bin/omarchy-launch-floating-terminal-with-presentation index b6121705..c074cbf6 100755 --- a/bin/omarchy-launch-floating-terminal-with-presentation +++ b/bin/omarchy-launch-floating-terminal-with-presentation @@ -1,4 +1,4 @@ #!/bin/bash cmd="$*" -exec setsid uwsm-app -- alacritty -o font.size=9 --class=Omarchy --title=Omarchy -e bash -c "omarchy-show-logo; $cmd; omarchy-show-done" \ No newline at end of file +exec setsid uwsm-app -- xdg-terminal-exec --app-id=com.omarchy.Omarchy --title=Omarchy -e bash -c "omarchy-show-logo; $cmd; omarchy-show-done" diff --git a/bin/omarchy-launch-terminal b/bin/omarchy-launch-terminal deleted file mode 100755 index 9cf4addf..00000000 --- a/bin/omarchy-launch-terminal +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -exec setsid uwsm-app -- "${TERMINAL:-alacritty}" -e "$@" diff --git a/bin/omarchy-launch-wifi b/bin/omarchy-launch-wifi index c9a9b18b..b73cbadc 100755 --- a/bin/omarchy-launch-wifi +++ b/bin/omarchy-launch-wifi @@ -1,3 +1,3 @@ #!/bin/bash -exec setsid uwsm-app -- "$TERMINAL" --class=Impala -e impala "$@" +exec setsid uwsm-app -- xdg-terminal-exec --app-id=com.omarchy.Impala -e impala "$@" diff --git a/bin/omarchy-menu b/bin/omarchy-menu index 1327a8f6..b9f8501c 100755 --- a/bin/omarchy-menu +++ b/bin/omarchy-menu @@ -37,7 +37,7 @@ menu() { } terminal() { - alacritty --class=Omarchy -e "$@" + xdg-terminal-exec --app-id=com.omarchy.Omarchy "$@" } present_terminal() { @@ -178,7 +178,7 @@ show_setup_menu() { options="$options\n Defaults\n󰱔 DNS\n Security\n Config" case $(menu "Setup" "$options") in - *Audio*) $TERMINAL --class=Wiremix -e wiremix ;; + *Audio*) xdg-terminal-exec --app-id=com.omarchy.Wiremix -e wiremix ;; *Wifi*) rfkill unblock wifi omarchy-launch-wifi diff --git a/config/hypr/bindings.conf b/config/hypr/bindings.conf index 1f60098a..09c2b376 100644 --- a/config/hypr/bindings.conf +++ b/config/hypr/bindings.conf @@ -1,5 +1,5 @@ # Application bindings -$terminal = uwsm-app -- $TERMINAL +$terminal = uwsm-app -- xdg-terminal-exec $browser = omarchy-launch-browser bindd = SUPER, RETURN, Terminal, exec, $terminal --working-directory="$(omarchy-cmd-terminal-cwd)" diff --git a/config/uwsm/default b/config/uwsm/default index 72868eb7..946fbe5f 100644 --- a/config/uwsm/default +++ b/config/uwsm/default @@ -1,7 +1,7 @@ # Changes require a restart to take effect. # Install other terminals via Install > Terminal -export TERMINAL=alacritty +export TERMINAL=xdg-terminal-exec # Use code for VSCode export EDITOR=nvim diff --git a/config/waybar/config.jsonc b/config/waybar/config.jsonc index ed064953..6bd34ee4 100644 --- a/config/waybar/config.jsonc +++ b/config/waybar/config.jsonc @@ -41,7 +41,7 @@ "custom/omarchy": { "format": "\ue900", "on-click": "omarchy-menu", - "on-click-right": "omarchy-launch-terminal", + "on-click-right": "xdg-terminal-exec", "tooltip-format": "Omarchy Menu\n\nSuper + Alt + Space" }, "custom/update": { @@ -56,7 +56,7 @@ "cpu": { "interval": 5, "format": "󰍛", - "on-click": "$TERMINAL -e btop" + "on-click": "xdg-terminal-exec btop" }, "clock": { "format": "{:L%A %H:%M}", @@ -105,7 +105,7 @@ }, "pulseaudio": { "format": "{icon}", - "on-click": "$TERMINAL --class=Wiremix -e wiremix", + "on-click": "xdg-terminal-exec --app-id=com.omarchy.Wiremix -e wiremix", "on-click-right": "pamixer -t", "tooltip-format": "Playing at {volume}%", "scroll-step": 5, diff --git a/default/hypr/apps/system.conf b/default/hypr/apps/system.conf index 754ed0ca..da2bacfa 100644 --- a/default/hypr/apps/system.conf +++ b/default/hypr/apps/system.conf @@ -1,9 +1,9 @@ # Floating windows windowrule = float, tag:floating-window windowrule = center, tag:floating-window -windowrule = size 800 600, tag:floating-window +windowrule = size 875 600, tag:floating-window -windowrule = tag +floating-window, class:(blueberry.py|Impala|Wiremix|org.gnome.NautilusPreviewer|com.gabm.satty|Omarchy|About|TUI.float) +windowrule = tag +floating-window, class:(blueberry.py|com.omarchy.Impala|com.omarchy.Wiremix|com.omarchy.Omarchy|org.gnome.NautilusPreviewer|com.gabm.satty|Omarchy|About|TUI.float) windowrule = tag +floating-window, class:(xdg-desktop-portal-gtk|sublime_text|DesktopEditors|org.gnome.Nautilus), title:^(Open.*Files?|Open [F|f]older.*|Save.*Files?|Save.*As|Save|All Files|.*wants to [open|save].*|[C|c]hoose.*) windowrule = float, class:org.gnome.Calculator diff --git a/install/config/xdg-terminal-exec.sh b/install/config/xdg-terminal-exec.sh deleted file mode 100644 index edc751be..00000000 --- a/install/config/xdg-terminal-exec.sh +++ /dev/null @@ -1,3 +0,0 @@ -# Solve for hardcoded glib terminals -# https://github.com/basecamp/omarchy/issues/1852 -sudo ln -s $OMARCHY_PATH/bin/omarchy-launch-terminal /usr/local/bin/xdg-terminal-exec diff --git a/install/omarchy-base.packages b/install/omarchy-base.packages index f9d53bc8..b1765095 100644 --- a/install/omarchy-base.packages +++ b/install/omarchy-base.packages @@ -143,6 +143,7 @@ wl-clipboard woff2-font-awesome xdg-desktop-portal-gtk xdg-desktop-portal-hyprland +xdg-terminal-exec xmlstarlet xournalpp yaru-icon-theme diff --git a/migrations/1762121827.sh b/migrations/1762121827.sh deleted file mode 100644 index 69fa748b..00000000 --- a/migrations/1762121827.sh +++ /dev/null @@ -1,4 +0,0 @@ -echo "Setting up xdg-terminal-exec for gtk-launch terminal support" -# Solve for hardcoded glib terminals -# https://github.com/basecamp/omarchy/issues/1852 -sudo ln -s $OMARCHY_PATH/bin/omarchy-launch-terminal /usr/local/bin/xdg-terminal-exec diff --git a/migrations/1762121828.sh b/migrations/1762121828.sh new file mode 100644 index 00000000..308dad36 --- /dev/null +++ b/migrations/1762121828.sh @@ -0,0 +1,64 @@ +echo "Setting up xdg-terminal-exec for gtk-launch terminal support" +# Solve for hardcoded glib terminals +# https://github.com/basecamp/omarchy/issues/1852 + +# Remove old symlink if it exists -- if someone ran the previous migration early +if [ -L /usr/local/bin/xdg-terminal-exec ]; then + sudo rm /usr/local/bin/xdg-terminal-exec +fi + +omarchy-pkg-add xdg-terminal-exec + +# Set up xdg-terminals.list based on current $TERMINAL +if [ -n "$TERMINAL" ]; then + case "$TERMINAL" in + alacritty) + desktop_id="Alacritty.desktop" + ;; + ghostty) + desktop_id="com.mitchellh.ghostty.desktop" + ;; + kitty) + desktop_id="kitty.desktop" + ;; + esac + + if [ -n "$desktop_id" ]; then + mkdir -p ~/.config + cat > ~/.config/xdg-terminals.list << EOF +# Terminal emulator preference order for xdg-terminal-exec +# The first found and valid terminal will be used +$desktop_id +EOF + fi +fi + +# Copy custom desktop entries with proper X-TerminalArg* keys +if command -v alacritty > /dev/null 2>&1; then + cp "$OMARCHY_PATH/applications/Alacritty.desktop" ~/.local/share/applications/ +fi + +# Update hyprland bindings to use xdg-terminal-exec +sed -i 's/\$terminal = uwsm-app -- \$TERMINAL/$terminal = uwsm-app -- xdg-terminal-exec/' ~/.config/hypr/bindings.conf +# Update --working-directory to --dir for xdg-terminal-exec +sed -i 's/--working-directory=/--dir=/g' ~/.config/hypr/bindings.conf + +# Update TERMINAL variable in uwsm config +sed -i 's/export TERMINAL=.*/export TERMINAL=xdg-terminal-exec/' ~/.config/uwsm/default + +# Update waybar config to use xdg-terminal-exec +waybar_config=~/.config/waybar/config.jsonc +if [ -f "$waybar_config" ]; then + sed -i 's|"on-click-right": "omarchy-launch-terminal"|"on-click-right": "xdg-terminal-exec"|' "$waybar_config" + sed -i 's|"on-click": "\$TERMINAL -e btop"|"on-click": "xdg-terminal-exec btop"|' "$waybar_config" + sed -i 's|"on-click": "\$TERMINAL --class=Wiremix -e wiremix"|"on-click": "xdg-terminal-exec --app-id=com.omarchy.Wiremix -e wiremix"|' "$waybar_config" + omarchy-state set restart-waybar-required +fi + +# Update hyprland window rules to use DNS-format class names +system_conf=~/.config/hypr/apps/system.conf +if [ -f "$system_conf" ]; then + if grep -q 'class:(.*|Impala|' "$system_conf" || grep -q 'class:(.*|Wiremix|' "$system_conf" || grep -q '|Omarchy|' "$system_conf"; then + sed -i 's/\bImpala\b/com.omarchy.Impala/g; s/\bWiremix\b/com.omarchy.Wiremix/g; s/|Omarchy|/|com.omarchy.Omarchy|/g' "$system_conf" + fi +fi From d528393df62d118e207dea9a72b866aac5acb829 Mon Sep 17 00:00:00 2001 From: Miha Rekar Date: Mon, 3 Nov 2025 10:19:54 +0100 Subject: [PATCH 21/23] Do not create eza theme symlink (#3092) --- install/config/theme.sh | 3 --- 1 file changed, 3 deletions(-) diff --git a/install/config/theme.sh b/install/config/theme.sh index e88cc748..a4ed8b3e 100644 --- a/install/config/theme.sh +++ b/install/config/theme.sh @@ -20,9 +20,6 @@ ln -snf ~/.config/omarchy/current/theme/btop.theme ~/.config/btop/themes/current mkdir -p ~/.config/mako ln -snf ~/.config/omarchy/current/theme/mako.ini ~/.config/mako/config -mkdir -p ~/.config/eza -ln -snf ~/.config/omarchy/current/theme/eza.yml ~/.config/eza/theme.yml - # Add managed policy directories for Chromium and Brave for theme changes sudo mkdir -p /etc/chromium/policies/managed sudo chmod a+rw /etc/chromium/policies/managed From 661abc89a69c3be5513cfc5f3792b84648818801 Mon Sep 17 00:00:00 2001 From: Ryan Hughes Date: Mon, 3 Nov 2025 11:37:19 -0500 Subject: [PATCH 22/23] Add omarchy-walker meta package --- install/omarchy-base.packages | 15 +-------------- migrations/1762150269.sh | 2 ++ 2 files changed, 3 insertions(+), 14 deletions(-) create mode 100644 migrations/1762150269.sh diff --git a/install/omarchy-base.packages b/install/omarchy-base.packages index b1765095..e2abf607 100644 --- a/install/omarchy-base.packages +++ b/install/omarchy-base.packages @@ -22,19 +22,6 @@ docker docker-buildx docker-compose dust -elephant -elephant-bluetooth -elephant-calc -elephant-clipboard -elephant-desktopapplications -elephant-files -elephant-menus -elephant-providerlist -elephant-runner -elephant-symbols -elephant-todo -elephant-unicode -elephant-websearch evince expac eza @@ -98,6 +85,7 @@ obs-studio obsidian omarchy-chromium omarchy-nvim +omarchy-walker pamixer pinta playerctl @@ -132,7 +120,6 @@ ufw ufw-docker unzip uwsm -walker waybar wayfreeze whois diff --git a/migrations/1762150269.sh b/migrations/1762150269.sh new file mode 100644 index 00000000..3314021e --- /dev/null +++ b/migrations/1762150269.sh @@ -0,0 +1,2 @@ +echo "Install omarchy-walker meta package" +omarchy-pkg-add omarchy-walker From e369d68fe1cdce7fb9cc0cd9d89e99f5f8809b6e Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Mon, 3 Nov 2025 17:46:29 +0100 Subject: [PATCH 23/23] Take the rounding back a notch --- default/hypr/apps/system.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/default/hypr/apps/system.conf b/default/hypr/apps/system.conf index da2bacfa..82300521 100644 --- a/default/hypr/apps/system.conf +++ b/default/hypr/apps/system.conf @@ -14,4 +14,4 @@ windowrule = fullscreen, class:Screensaver windowrule = opacity 1 1, class:^(zoom|vlc|mpv|org.kde.kdenlive|com.obsproject.Studio|com.github.PintaProject.Pinta|imv|org.gnome.NautilusPreviewer)$ # Popped window rounding -windowrule = rounding 16, tag:pop +windowrule = rounding 8, tag:pop