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"