Speed up the theme switch's browser refresh (#13038)
* Speed up theme switch by backgrounding preload and parallelizing browser refresh `omarchy theme set` was blocking on `omarchy-theme-switcher --preload` (~1.1s) and serially refreshing every Chromium-family browser (~1.0-1.5s), making a picked theme feel slow even though the shell recolored instantly. - Background `omarchy-theme-switcher --preload` like the background cache - In `omarchy-theme-set-browser`, skip the privileged policy write and browser refreshes when every existing `color.json` already has the requested color - Refresh only running browsers, and run those refreshes in parallel Fixes #12627. Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com> * Harden the unchanged-color shortcut in omarchy-theme-set-browser Review feedback identified that the original shortcut could vacuously skip when no managed policy directories existed, and that it accepted a color.json whose ownership or contents the privileged writer would have rewritten. - Only skip when at least one managed directory exists and every existing color.json is a regular, root-owned 0644 file containing the canonical JSON - Add OMARCHY_BROWSER_POLICY_DIRS as a test-only override so the setter's unchanged-color check does not depend on the host's real /etc policy files - Update browser-policy-sudoers-test.sh to use that override, and make theme-set-browser-test.sh behavioral rather than grep-only Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com> * Find running browsers with one process scan during the policy write Each browser check ran its own pgrep, and every pgrep rescans /proc, ~40ms apiece. Read the process table once with ps while the policy writer runs, keeping its stdin so a terminal sudo prompt stays in the terminal, then refresh the running browsers in parallel. Chrome's fallback to plain google-chrome never ran: the refresh helper returned success for a missing browser, so the || branch was dead. Pick whichever Chrome binary exists up front instead. The unchanged-color shortcut keeps its root:root 0644 check without the fallback for hosts lacking stat -c, which Omarchy never runs on. Its tests stub stat, ps and command discovery, so they neither depend on nor touch the host's browsers. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com> Co-authored-by: David Heinemeier Hansson <david@hey.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
3 files changed
+211
-15
No files matched your search
@@ -133,6 +133,13 @@ fi
|
||||
setter_bin="$test_tmp/setter-bin"
|
||||
mkdir -p "$setter_bin"
|
||||
|
||||
# The setter now skips its privileged policy write when every managed
|
||||
# color.json already matches. Give it a fixed out-of-range fixture so every
|
||||
# theme below takes the writer path.
|
||||
policy_tmp="$test_tmp/policies"
|
||||
mkdir -p "$policy_tmp/a"
|
||||
printf '{"BrowserThemeColor": "#ff0000", "BrowserColorScheme": "device"}\n' > "$policy_tmp/a/color.json"
|
||||
|
||||
cat >"$setter_bin/omarchy-theme-set-browser-policy" <<'SH'
|
||||
#!/bin/bash
|
||||
printf '%s\n' "$*" >"$COLOR_LOG"
|
||||
@@ -158,6 +165,7 @@ color_for_theme() {
|
||||
fi
|
||||
|
||||
HOME="$setter_home" COLOR_LOG="$test_tmp/color" PATH="$setter_bin:$stub_bin:$PATH" \
|
||||
OMARCHY_BROWSER_POLICY_DIRS="$policy_tmp/a" \
|
||||
OMARCHY_PATH="$ROOT" bash "$setter" </dev/null >/dev/null 2>&1 || true
|
||||
cat "$test_tmp/color"
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user