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