improve: uniquely identify terminal apps for window rules and focus. Unify waybar behaviour to use launch-or-focus (#3389)

* improve: uniquely identify btop when launched from waybar.

* align btop app id

* add migration to uniquely identify btop

* also add unique app ids to lazydocker and terminal editor

* introduce new omarchy-launch-tui that sets class.

* align all the tuis and behaviour in waybar

* update migration accordingly

* fixes

* separate terminal from tui

* fix: double setsid uswm-app --

* Standardize namespace on org.omarchy and lowercase

---------

Co-authored-by: David Heinemeier Hansson <david@hey.com>
This commit is contained in:
Patrick Roza
2025-11-19 08:54:17 +01:00
committed by GitHub
parent 438fa96291
commit eec075bdf9
13 changed files with 30 additions and 19 deletions

View File

@@ -1,13 +1,13 @@
#!/bin/bash #!/bin/bash
screensaver_in_focus() { screensaver_in_focus() {
hyprctl activewindow -j | jq -e '.class == "com.omarchy.Screensaver"' >/dev/null 2>&1 hyprctl activewindow -j | jq -e '.class == "org.omarchy.screensaver"' >/dev/null 2>&1
} }
exit_screensaver() { exit_screensaver() {
hyprctl keyword cursor:invisible false hyprctl keyword cursor:invisible false
pkill -x tte 2>/dev/null pkill -x tte 2>/dev/null
pkill -f com.omarchy.Screensaver 2>/dev/null pkill -f org.omarchy.screensaver 2>/dev/null
exit 0 exit 0
} }

View File

@@ -1,3 +1,3 @@
#!/bin/bash #!/bin/bash
exec setsid uwsm-app -- xdg-terminal-exec --app-id=com.omarchy.Omarchy -e bash -c 'fastfetch; read -n 1 -s' exec setsid uwsm-app -- xdg-terminal-exec --app-id=org.omarchy.terminal -e bash -c 'fastfetch; read -n 1 -s'

View File

@@ -4,7 +4,7 @@ omarchy-cmd-present "$EDITOR" || EDITOR=nvim
case "$EDITOR" in case "$EDITOR" in
nvim | vim | nano | micro | hx | helix) nvim | vim | nano | micro | hx | helix)
exec setsid uwsm-app -- xdg-terminal-exec "$EDITOR" "$@" exec omarchy-launch-tui "$EDITOR" "$@"
;; ;;
*) *)
exec setsid uwsm-app -- "$EDITOR" "$@" exec setsid uwsm-app -- "$EDITOR" "$@"

View File

@@ -1,4 +1,4 @@
#!/bin/bash #!/bin/bash
cmd="$*" cmd="$*"
exec setsid uwsm-app -- xdg-terminal-exec --app-id=com.omarchy.Omarchy --title=Omarchy -e bash -c "omarchy-show-logo; $cmd; omarchy-show-done" exec setsid uwsm-app -- xdg-terminal-exec --app-id=org.omarchy.terminal --title=Omarchy -e bash -c "omarchy-show-logo; $cmd; omarchy-show-done"

View File

@@ -6,7 +6,7 @@ if ! command -v tte &>/dev/null; then
fi fi
# Exit early if screensave is already running # Exit early if screensave is already running
pgrep -f com.omarchy.Screensaver && exit 0 pgrep -f org.omarchy.screensaver && exit 0
# Allow screensaver to be turned off but also force started # Allow screensaver to be turned off but also force started
if [[ -f ~/.local/state/omarchy/toggles/screensaver-off ]] && [[ $1 != "force" ]]; then if [[ -f ~/.local/state/omarchy/toggles/screensaver-off ]] && [[ $1 != "force" ]]; then
@@ -22,19 +22,19 @@ for m in $(hyprctl monitors -j | jq -r '.[] | .name'); do
case $terminal in case $terminal in
*Alacritty*) *Alacritty*)
hyprctl dispatch exec -- \ hyprctl dispatch exec -- \
alacritty --class=com.omarchy.Screensaver \ alacritty --class=org.omarchy.screensaver \
--config-file ~/.local/share/omarchy/default/alacritty/screensaver.toml \ --config-file ~/.local/share/omarchy/default/alacritty/screensaver.toml \
-e omarchy-cmd-screensaver -e omarchy-cmd-screensaver
;; ;;
*ghostty*) *ghostty*)
hyprctl dispatch exec -- \ hyprctl dispatch exec -- \
ghostty --class=com.omarchy.Screensaver \ ghostty --class=org.omarchy.screensaver \
--font-size=18 \ --font-size=18 \
-e omarchy-cmd-screensaver -e omarchy-cmd-screensaver
;; ;;
*kitty*) *kitty*)
hyprctl dispatch exec -- \ hyprctl dispatch exec -- \
kitty --class=com.omarchy.Screensaver \ kitty --class=org.omarchy.screensaver \
--override font_size=18 \ --override font_size=18 \
-e omarchy-cmd-screensaver -e omarchy-cmd-screensaver
;; ;;

3
bin/omarchy-launch-tui Executable file
View File

@@ -0,0 +1,3 @@
#!/bin/bash
exec setsid uwsm-app -- xdg-terminal-exec --app-id=org.omarchy.$(basename $1) -e "$1" "${@:2}"

View File

@@ -1,3 +1,3 @@
#!/bin/bash #!/bin/bash
exec setsid omarchy-launch-or-focus com.omarchy.Impala "uwsm-app -- xdg-terminal-exec --app-id=com.omarchy.Impala -e impala" exec setsid omarchy-launch-or-focus org.omarchy.impala "omarchy-launch-tui impala"

View File

@@ -9,4 +9,4 @@ if pgrep -x "1password" >/dev/null; then
fi fi
# Avoid running screensaver when locked # Avoid running screensaver when locked
pkill -f com.omarchy.Screensaver pkill -f org.omarchy.screensaver

View File

@@ -37,7 +37,7 @@ menu() {
} }
terminal() { terminal() {
xdg-terminal-exec --app-id=com.omarchy.Omarchy "$@" xdg-terminal-exec --app-id=org.omarchy.terminal "$@"
} }
present_terminal() { present_terminal() {
@@ -173,7 +173,7 @@ show_setup_menu() {
options="$options\n Defaults\n󰱔 DNS\n Security\n Config" options="$options\n Defaults\n󰱔 DNS\n Security\n Config"
case $(menu "Setup" "$options") in case $(menu "Setup" "$options") in
*Audio*) xdg-terminal-exec --app-id=com.omarchy.Wiremix -e wiremix ;; *Audio*) omarchy-launch-or-focus org.omarchy.wiremix "omarchy-launch-tui wiremix" ;;
*Wifi*) *Wifi*)
rfkill unblock wifi rfkill unblock wifi
omarchy-launch-wifi omarchy-launch-wifi

View File

@@ -8,8 +8,8 @@ bindd = SUPER SHIFT, B, Browser, exec, $browser
bindd = SUPER SHIFT ALT, B, Browser (private), exec, $browser --private bindd = SUPER SHIFT ALT, B, Browser (private), exec, $browser --private
bindd = SUPER SHIFT, M, Music, exec, omarchy-launch-or-focus spotify bindd = SUPER SHIFT, M, Music, exec, omarchy-launch-or-focus spotify
bindd = SUPER SHIFT, N, Editor, exec, omarchy-launch-editor bindd = SUPER SHIFT, N, Editor, exec, omarchy-launch-editor
bindd = SUPER SHIFT, T, Activity, exec, $terminal -e btop bindd = SUPER SHIFT, T, Activity, exec, omarchy-launch-tui btop
bindd = SUPER SHIFT, D, Docker, exec, $terminal -e lazydocker bindd = SUPER SHIFT, D, Docker, exec, omarchy-launch-tui lazydocker
bindd = SUPER SHIFT, G, Signal, exec, omarchy-launch-or-focus signal "uwsm-app -- signal-desktop" bindd = SUPER SHIFT, G, Signal, exec, omarchy-launch-or-focus signal "uwsm-app -- signal-desktop"
bindd = SUPER SHIFT, O, Obsidian, exec, omarchy-launch-or-focus obsidian "uwsm-app -- obsidian -disable-gpu --enable-wayland-ime" bindd = SUPER SHIFT, O, Obsidian, exec, omarchy-launch-or-focus obsidian "uwsm-app -- obsidian -disable-gpu --enable-wayland-ime"
bindd = SUPER SHIFT, W, Typora, exec, uwsm-app -- typora --enable-wayland-ime bindd = SUPER SHIFT, W, Typora, exec, uwsm-app -- typora --enable-wayland-ime

View File

@@ -57,7 +57,7 @@
"cpu": { "cpu": {
"interval": 5, "interval": 5,
"format": "󰍛", "format": "󰍛",
"on-click": "xdg-terminal-exec btop" "on-click": "omarchy-launch-or-focus org.omarchy.btop \"omarchy-launch-tui btop\""
}, },
"clock": { "clock": {
"format": "{:L%A %H:%M}", "format": "{:L%A %H:%M}",
@@ -106,7 +106,7 @@
}, },
"pulseaudio": { "pulseaudio": {
"format": "{icon}", "format": "{icon}",
"on-click": "xdg-terminal-exec --app-id=com.omarchy.Wiremix -e wiremix", "on-click": "omarchy-launch-or-focus org.omarchy.wiremix \"omarchy-launch-tui wiremix\"",
"on-click-right": "pamixer -t", "on-click-right": "pamixer -t",
"tooltip-format": "Playing at {volume}%", "tooltip-format": "Playing at {volume}%",
"scroll-step": 5, "scroll-step": 5,

View File

@@ -3,12 +3,12 @@ windowrule = float, tag:floating-window
windowrule = center, tag:floating-window windowrule = center, tag:floating-window
windowrule = size 875 600, tag:floating-window windowrule = size 875 600, tag:floating-window
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:(blueberry.py|org.omarchy.impala|org.omarchy.wiremix|org.omarchy.terminal|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 = 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 windowrule = float, class:org.gnome.Calculator
# Fullscreen screensaver # Fullscreen screensaver
windowrule = fullscreen, class:com.omarchy.Screensaver windowrule = fullscreen, class:org.omarchy.screensaver
# No transparency on media windows # 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)$ windowrule = opacity 1 1, class:^(zoom|vlc|mpv|org.kde.kdenlive|com.obsproject.Studio|com.github.PintaProject.Pinta|imv|org.gnome.NautilusPreviewer)$

8
migrations/1763386443.sh Normal file
View File

@@ -0,0 +1,8 @@
echo "Uniquely identify terminal apps with custom app-ids using omarchy-launch-tui"
# Replace terminal -e calls with omarchy-launch-tui in bindings
sed -i 's/\$terminal -e \([^ ]*\)/omarchy-launch-tui \1/g' ~/.config/hypr/bindings.conf
# Update waybar to use omarchy-launch-or-focus with omarchy-launch-tui for TUI apps
sed -i 's/xdg-terminal-exec btop/omarchy-launch-or-focus org.omarchy.btop "omarchy-launch-tui btop"/' ~/.config/waybar/config.jsonc
sed -i 's/xdg-terminal-exec --app-id=com\.omarchy\.Wiremix -e wiremix/omarchy-launch-or-focus org.omarchy.wiremix "omarchy-launch-tui wiremix"/' ~/.config/waybar/config.jsonc