From 4072fc6b1fa737cfc7b490ccc5818092f4ec8cff Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Wed, 6 May 2026 16:26:21 +0200 Subject: [PATCH] Install a new default browser (#5627) --- bin/omarchy-install-browser | 106 ++++++++++++++++++++++++++++ bin/omarchy-menu | 32 ++++++++- bin/omarchy-remove-browser | 73 +++++++++++++++++++ bin/omarchy-theme-set-browser | 61 +++++++++------- config/brave-flags.conf | 1 - config/brave-origin-beta-flags.conf | 1 - default/firefox/policies.json | 26 +++++++ install/config/theme.sh | 6 +- 8 files changed, 272 insertions(+), 34 deletions(-) create mode 100755 bin/omarchy-install-browser create mode 100755 bin/omarchy-remove-browser delete mode 100644 config/brave-flags.conf delete mode 120000 config/brave-origin-beta-flags.conf create mode 100644 default/firefox/policies.json diff --git a/bin/omarchy-install-browser b/bin/omarchy-install-browser new file mode 100755 index 00000000..eba726e3 --- /dev/null +++ b/bin/omarchy-install-browser @@ -0,0 +1,106 @@ +#!/bin/bash + +# omarchy:summary=Install a supported browser and make it the default +# omarchy:args= +# omarchy:examples=omarchy install browser firefox | omarchy install browser brave + +make_default() { + xdg-settings set default-web-browser "$1" + xdg-mime default "$1" x-scheme-handler/http + xdg-mime default "$1" x-scheme-handler/https + xdg-mime default "$1" text/html +} + +setup_policy_directory() { + sudo mkdir -p "$1" + sudo chmod a+rw "$1" +} + +announce_default_browser() { + echo "" + echo "$1 is now the default browser. Start it with Super + Shift + Return." +} + +copy_chromium_flags() { + mkdir -p ~/.config + cp -f "${OMARCHY_PATH:-$HOME/.local/share/omarchy}/config/chromium-flags.conf" "$1" +} + +setup_firefox_preferences() { + local distribution_dir="$1" + + setup_policy_directory "$distribution_dir" + sudo cp -f "$OMARCHY_PATH/default/firefox/policies.json" "$distribution_dir/policies.json" +} + +setup_firefox_wayland() { + mkdir -p ~/.config/environment.d + echo "MOZ_ENABLE_WAYLAND=1" > ~/.config/environment.d/omarchy-firefox-wayland.conf +} + +case $1 in +chrome) + echo "Installing Chrome..." + omarchy-pkg-aur-add google-chrome || exit 1 + + setup_policy_directory /etc/opt/chrome/policies/managed + copy_chromium_flags ~/.config/chrome-flags.conf + make_default google-chrome.desktop + omarchy-theme-set-browser + announce_default_browser "Chrome" + ;; +edge) + echo "Installing Edge..." + omarchy-pkg-aur-add microsoft-edge-stable-bin || exit 1 + + setup_policy_directory /etc/opt/edge/policies/managed + copy_chromium_flags ~/.config/microsoft-edge-stable-flags.conf + make_default microsoft-edge.desktop + omarchy-theme-set-browser + announce_default_browser "Edge" + ;; +brave) + echo "Installing Brave..." + omarchy-pkg-aur-add brave-bin || exit 1 + + setup_policy_directory /etc/brave/policies/managed + copy_chromium_flags ~/.config/brave-flags.conf + make_default brave-browser.desktop + omarchy-theme-set-browser + announce_default_browser "Brave" + ;; +brave-origin) + echo "Installing Brave Origin..." + omarchy-pkg-aur-add brave-origin-beta-bin || exit 1 + + setup_policy_directory /etc/brave/policies/managed + mkdir -p ~/.config + # FIXME: Use normal chromium flags when Brave Origin wrapper has been fixed + echo "--load-extension=~/.local/share/omarchy/default/chromium/extensions/copy-url" > ~/.config/brave-origin-beta-flags.conf + make_default brave-origin-beta.desktop + omarchy-theme-set-browser + announce_default_browser "Brave Origin" + ;; +firefox) + echo "Installing Firefox..." + omarchy-pkg-add firefox || exit 1 + + setup_firefox_preferences /usr/lib/firefox/distribution + setup_firefox_wayland + make_default firefox.desktop + announce_default_browser "Firefox" + ;; +zen) + echo "Installing Zen..." + omarchy-pkg-aur-add zen-browser-bin || exit 1 + + setup_firefox_preferences /opt/zen-browser/distribution + setup_firefox_wayland + make_default zen.desktop + announce_default_browser "Zen" + ;; +*) + echo "Usage: omarchy-install-browser " + exit 1 + ;; +esac diff --git a/bin/omarchy-menu b/bin/omarchy-menu index 2dae932e..b7068741 100755 --- a/bin/omarchy-menu +++ b/bin/omarchy-menu @@ -352,7 +352,7 @@ show_setup_system_menu() { } show_install_menu() { - case $(menu "Install" "󰣇 Package\n󰣇 AUR\n Web App\n TUI\n Service\n Style\n󰵮 Development\n Editor\n Terminal\n󱚤 AI\n󰍲 Windows\n Gaming") in + case $(menu "Install" "󰣇 Package\n󰣇 AUR\n Web App\n TUI\n Service\n Style\n󰵮 Development\n Editor\n Terminal\n Browser\n󱚤 AI\n Gaming\n󰍲 Windows") in *Package*) terminal omarchy-pkg-install ;; *AUR*) terminal omarchy-pkg-aur-install ;; *Web*) present_terminal omarchy-webapp-install ;; @@ -362,13 +362,26 @@ show_install_menu() { *Development*) show_install_development_menu ;; *Editor*) show_install_editor_menu ;; *Terminal*) show_install_terminal_menu ;; + *Browser*) show_install_browser_menu ;; + *Gaming*) show_install_gaming_menu ;; *AI*) show_install_ai_menu ;; *Windows*) present_terminal "omarchy-windows-vm install" ;; - *Gaming*) show_install_gaming_menu ;; *) show_main_menu ;; esac } +show_install_browser_menu() { + case $(menu "Install" " Chrome\n Edge\n Brave\n Brave Origin\n Firefox\n Zen") in + *Chrome*) present_terminal "omarchy-install-browser chrome" ;; + *Edge*) present_terminal "omarchy-install-browser edge" ;; + *"Brave Origin"*) present_terminal "omarchy-install-browser brave-origin" ;; + *Brave*) present_terminal "omarchy-install-browser brave" ;; + *Firefox*) present_terminal "omarchy-install-browser firefox" ;; + *Zen*) present_terminal "omarchy-install-browser zen" ;; + *) show_install_menu ;; + esac +} + show_install_service_menu() { case $(menu "Install" " Dropbox\n Tailscale\n󱇱 NordVPN [AUR]\n󰏖 ONCE\n󰟵 Bitwarden\n Chromium Account") in *Dropbox*) present_terminal omarchy-install-dropbox ;; @@ -502,8 +515,9 @@ show_install_elixir_menu() { } show_remove_menu() { - case $(menu "Remove" "󰣇 Package\n Web App\n TUI\n󰵮 Development\n Gaming\n󰏓 Preinstalls\n Dictation\n󰸌 Theme\n󰍲 Windows\n󰈷 Fingerprint\n Fido2") in + case $(menu "Remove" "󰣇 Package\n Browser\n Web App\n TUI\n󰵮 Development\n Gaming\n󰏓 Preinstalls\n Dictation\n󰸌 Theme\n󰍲 Windows\n󰈷 Fingerprint\n Fido2") in *Package*) terminal omarchy-pkg-remove ;; + *Browser*) show_remove_browser_menu ;; *Web*) present_terminal omarchy-webapp-remove ;; *TUI*) present_terminal omarchy-tui-remove ;; *Development*) show_remove_development_menu ;; @@ -518,6 +532,18 @@ show_remove_menu() { esac } +show_remove_browser_menu() { + case $(menu "Remove" " Chrome\n Edge\n Brave\n Brave Origin\n Firefox\n Zen") in + *Chrome*) present_terminal "omarchy-remove-browser chrome" ;; + *Edge*) present_terminal "omarchy-remove-browser edge" ;; + *"Brave Origin"*) present_terminal "omarchy-remove-browser brave-origin" ;; + *Brave*) present_terminal "omarchy-remove-browser brave" ;; + *Firefox*) present_terminal "omarchy-remove-browser firefox" ;; + *Zen*) present_terminal "omarchy-remove-browser zen" ;; + *) show_remove_menu ;; + esac +} + show_remove_gaming_menu() { case $(menu "Remove" " Steam\n RetroArch\n󰍳 Minecraft\n󰢹 NVIDIA GeForce NOW\n Xbox Cloud Gaming\n󰖺 Xbox Controller (󰂯)\n󰍹 Moonlight (GameStream)\n Lutris (Battle.net)\n󱓟 Heroic (Epic Games)") in *Steam*) present_terminal omarchy-remove-gaming-steam ;; diff --git a/bin/omarchy-remove-browser b/bin/omarchy-remove-browser new file mode 100755 index 00000000..6ae076df --- /dev/null +++ b/bin/omarchy-remove-browser @@ -0,0 +1,73 @@ +#!/bin/bash + +# omarchy:summary=Remove a supported browser and clean up Omarchy browser defaults +# omarchy:args= +# omarchy:examples=omarchy remove browser firefox | omarchy remove browser brave +# omarchy:requires-sudo=true + +set_fallback_default_browser() { + local current_browser + current_browser=$(xdg-settings get default-web-browser) + + if [[ $current_browser != "$1" ]]; then + return + fi + + if omarchy-cmd-present chromium; then + xdg-settings set default-web-browser chromium.desktop + xdg-mime default chromium.desktop x-scheme-handler/http + xdg-mime default chromium.desktop x-scheme-handler/https + xdg-mime default chromium.desktop text/html + fi +} + +case $1 in +chrome) + echo "Removing Chrome..." + set_fallback_default_browser google-chrome.desktop + omarchy-pkg-drop google-chrome + rm -f ~/.config/chrome-flags.conf + sudo rm -f /etc/opt/chrome/policies/managed/color.json + ;; +edge) + echo "Removing Edge..." + set_fallback_default_browser microsoft-edge.desktop + omarchy-pkg-drop microsoft-edge-stable-bin + rm -f ~/.config/microsoft-edge-stable-flags.conf + sudo rm -f /etc/opt/edge/policies/managed/color.json + ;; +brave) + echo "Removing Brave..." + set_fallback_default_browser brave-browser.desktop + omarchy-pkg-drop brave-bin + rm -f ~/.config/brave-flags.conf + + if omarchy-pkg-missing brave-origin-beta-bin; then + sudo rm -rf /etc/brave + fi + ;; +brave-origin) + echo "Removing Brave Origin..." + set_fallback_default_browser brave-origin-beta.desktop + omarchy-pkg-drop brave-origin-beta-bin + rm -f ~/.config/brave-origin-beta-flags.conf + + if omarchy-pkg-missing brave-bin; then + sudo rm -rf /etc/brave + fi + ;; +firefox) + echo "Removing Firefox..." + set_fallback_default_browser firefox.desktop + omarchy-pkg-drop firefox + ;; +zen) + echo "Removing Zen..." + set_fallback_default_browser zen.desktop + omarchy-pkg-drop zen-browser-bin + ;; +*) + echo "Usage: omarchy-remove-browser " + exit 1 + ;; +esac diff --git a/bin/omarchy-theme-set-browser b/bin/omarchy-theme-set-browser index 89194c74..ee189d17 100755 --- a/bin/omarchy-theme-set-browser +++ b/bin/omarchy-theme-set-browser @@ -1,31 +1,44 @@ #!/bin/bash -# omarchy:summary=Apply the current theme color to Chromium and Brave +# omarchy:summary=Apply the current theme color to Chromium, Chrome, Edge, and Brave # omarchy:hidden=true CHROMIUM_THEME=~/.config/omarchy/current/theme/chromium.theme -if omarchy-cmd-present chromium || omarchy-cmd-present brave || omarchy-cmd-present brave-origin-beta; then - if [[ -f $CHROMIUM_THEME ]]; then - THEME_RGB_COLOR=$(<$CHROMIUM_THEME) - THEME_HEX_COLOR=$(printf '#%02x%02x%02x' ${THEME_RGB_COLOR//,/ }) - else - # Use a default, neutral grey if theme doesn't have a color - THEME_RGB_COLOR="28,32,39" - THEME_HEX_COLOR="#1c2027" - fi - - if omarchy-cmd-present chromium; then - echo "{\"BrowserThemeColor\": \"$THEME_HEX_COLOR\", \"BrowserColorScheme\": \"device\"}" | tee "/etc/chromium/policies/managed/color.json" >/dev/null - pgrep -x chromium >/dev/null && chromium --refresh-platform-policy --no-startup-window &>/dev/null - fi - - # Brave and Brave Origin Beta share /etc/brave/policies, so a single write covers both - if omarchy-cmd-present brave || omarchy-cmd-present brave-origin-beta; then - echo "{\"BrowserThemeColor\": \"$THEME_HEX_COLOR\", \"BrowserColorScheme\": \"device\"}" | tee "/etc/brave/policies/managed/color.json" >/dev/null - if pgrep -x brave >/dev/null; then - omarchy-cmd-present brave && brave --refresh-platform-policy --no-startup-window &>/dev/null - omarchy-cmd-present brave-origin-beta && brave-origin-beta --refresh-platform-policy --no-startup-window &>/dev/null - fi - fi +if [[ -f $CHROMIUM_THEME ]]; then + THEME_RGB_COLOR=$(<$CHROMIUM_THEME) + THEME_HEX_COLOR=$(printf '#%02x%02x%02x' ${THEME_RGB_COLOR//,/ }) +else + # Use a default, neutral grey if theme doesn't have a color + THEME_HEX_COLOR="#1c2027" fi + +set_browser_policy() { + local policy_dir="$1" + + [[ -d $policy_dir ]] || return + echo "{\"BrowserThemeColor\": \"$THEME_HEX_COLOR\", \"BrowserColorScheme\": \"device\"}" | tee "$policy_dir/color.json" >/dev/null +} + +refresh_running_browser() { + local process="$1" + local command="$2" + local pgrep_args="${3:--x}" + + if omarchy-cmd-present "$command" && pgrep $pgrep_args "$process" >/dev/null; then + "$command" --refresh-platform-policy --no-startup-window &>/dev/null + fi +} + +set_browser_policy /etc/chromium/policies/managed +refresh_running_browser chromium chromium + +set_browser_policy /etc/opt/chrome/policies/managed +refresh_running_browser chrome google-chrome-stable || refresh_running_browser chrome google-chrome + +set_browser_policy /etc/opt/edge/policies/managed +refresh_running_browser msedge microsoft-edge-stable + +set_browser_policy /etc/brave/policies/managed +refresh_running_browser brave brave +refresh_running_browser brave-origin-beta brave-origin-beta -f diff --git a/config/brave-flags.conf b/config/brave-flags.conf deleted file mode 100644 index 57eba524..00000000 --- a/config/brave-flags.conf +++ /dev/null @@ -1 +0,0 @@ ---load-extension=~/.local/share/omarchy/default/chromium/extensions/copy-url diff --git a/config/brave-origin-beta-flags.conf b/config/brave-origin-beta-flags.conf deleted file mode 120000 index f3609ca7..00000000 --- a/config/brave-origin-beta-flags.conf +++ /dev/null @@ -1 +0,0 @@ -brave-flags.conf \ No newline at end of file diff --git a/default/firefox/policies.json b/default/firefox/policies.json new file mode 100644 index 00000000..d102c51c --- /dev/null +++ b/default/firefox/policies.json @@ -0,0 +1,26 @@ +{ + "policies": { + "Preferences": { + "apz.overscroll.enabled": { + "Value": true, + "Status": "default" + }, + "media.ffmpeg.vaapi.enabled": { + "Value": true, + "Status": "default" + }, + "media.hardware-video-decoding.force-enabled": { + "Value": true, + "Status": "default" + }, + "widget.disable-swipe-tracker": { + "Value": false, + "Status": "default" + }, + "widget.wayland.fractional-scale.enabled": { + "Value": true, + "Status": "default" + } + } + } +} diff --git a/install/config/theme.sh b/install/config/theme.sh index 83e2b8dd..fe7e9112 100644 --- a/install/config/theme.sh +++ b/install/config/theme.sh @@ -5,14 +5,10 @@ sudo ln -snf /usr/share/icons/Adwaita/symbolic/actions/go-next-symbolic.svg /usr # Setup user theme folder mkdir -p ~/.config/omarchy/themes -# Add managed policy directories for Chromium and Brave for theme changes. -# Must exist before the first omarchy-theme-set, which writes color.json into them. +# Chromium policy directory for theme sudo mkdir -p /etc/chromium/policies/managed sudo chmod a+rw /etc/chromium/policies/managed -sudo mkdir -p /etc/brave/policies/managed -sudo chmod a+rw /etc/brave/policies/managed - # Set initial theme omarchy-theme-set "Tokyo Night" rm -rf ~/.config/chromium/SingletonLock # otherwise archiso will own the chromium singleton