From 0b24b844df9f903a91910d03b05fad5cd2290bf8 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Fri, 7 Aug 2026 23:58:51 +0200 Subject: [PATCH] Scope BROWSER to interactive shells so xdg-settings can change the default browser (#6616) Exporting BROWSER=omarchy-launch-browser into the whole uwsm session made xdg-settings refuse "set default-web-browser", which broke every browser's own "Set as default" button. The export only exists for terminal programs (like gh) to open URLs detached from the terminal process tree, so move it to default/bash/envs where interactive shells still pick it up. Fixes #6590 Co-authored-by: Claude Fable 5 --- default/bash/envs | 5 +++++ default/uwsm/default | 5 +++-- default/uwsm/env.d/10-omarchy | 1 - test/shell.d/browser-env-test.sh | 26 ++++++++++++++++++++++++++ 4 files changed, 34 insertions(+), 3 deletions(-) create mode 100755 test/shell.d/browser-env-test.sh diff --git a/default/bash/envs b/default/bash/envs index d526a692..e4763d6c 100644 --- a/default/bash/envs +++ b/default/bash/envs @@ -1,6 +1,11 @@ # Editor used by CLI export EDITOR="${EDITOR:-omarchy-launch-editor --inline}" export SUDO_EDITOR="$EDITOR" + +# Used by terminal programs (like gh) to open URLs detached from the terminal +# process tree. Shell-scoped on purpose: exporting BROWSER session-wide makes +# xdg-settings refuse to change the default browser. +export BROWSER="${BROWSER:-omarchy-launch-browser}" export BAT_THEME=ansi # Color man pages with bat diff --git a/default/uwsm/default b/default/uwsm/default index 107bf9f2..d2ad7cc3 100644 --- a/default/uwsm/default +++ b/default/uwsm/default @@ -3,8 +3,9 @@ # Install other terminals via Install > Terminal export TERMINAL=xdg-terminal-exec -# Used by terminal programs (like gh) to open URLs detached from the terminal process tree -export BROWSER=omarchy-launch-browser +# BROWSER is intentionally not exported here: session-wide, it makes xdg-settings +# refuse to change the default browser, which breaks the browsers' own "Set as +# default" buttons. Interactive shells get BROWSER from default/bash/envs instead. # Used by terminal programs to open files with the selected Omarchy default editor export EDITOR="omarchy-launch-editor --inline" diff --git a/default/uwsm/env.d/10-omarchy b/default/uwsm/env.d/10-omarchy index 05485643..d5395dd5 100644 --- a/default/uwsm/env.d/10-omarchy +++ b/default/uwsm/env.d/10-omarchy @@ -9,7 +9,6 @@ if [ -f "${OMARCHY_PATH%/}/default/uwsm/default" ]; then . "${OMARCHY_PATH%/}/default/uwsm/default" else export TERMINAL=xdg-terminal-exec - export BROWSER=omarchy-launch-browser export EDITOR="omarchy-launch-editor --inline" fi diff --git a/test/shell.d/browser-env-test.sh b/test/shell.d/browser-env-test.sh new file mode 100755 index 00000000..1c0ab2b8 --- /dev/null +++ b/test/shell.d/browser-env-test.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +set -euo pipefail + +source "$(dirname "$0")/base-test.sh" + +envs="$ROOT/default/bash/envs" +uwsm_default="$ROOT/default/uwsm/default" +uwsm_env="$ROOT/default/uwsm/env.d/10-omarchy" + +browser=$(env -u BROWSER bash -c 'source "$1"; printf "%s" "$BROWSER"' bash "$envs") +[[ $browser == "omarchy-launch-browser" ]] || fail "bash env provides a default browser" "actual: $browser" +pass "bash env provides a default browser" + +browser=$(BROWSER=firefox bash -c 'source "$1"; printf "%s" "$BROWSER"' bash "$envs") +[[ $browser == "firefox" ]] || fail "bash env preserves the inherited browser" "actual: $browser" +pass "bash env preserves the inherited browser" + +# A session-wide BROWSER makes xdg-settings refuse "set default-web-browser", +# breaking the browsers' own "Set as default" buttons. +browser=$(env -u BROWSER bash -c 'source "$1"; printf "%s" "${BROWSER:-}"' bash "$uwsm_default") +[[ -z $browser ]] || fail "uwsm session env leaves BROWSER unset" "actual: $browser" +pass "uwsm session env leaves BROWSER unset" + +! grep -q "export BROWSER" "$uwsm_env" || fail "uwsm env.d fallback leaves BROWSER unset" +pass "uwsm env.d fallback leaves BROWSER unset"