Install the extension from the update server during setup

Both installers ended by telling you to load the folder unpacked, which is the
one install that can never update itself. They now offer the policy install as
a last step instead, and only fall back to those instructions when it is
declined or fails.

Windows writes to the user's own policy hive rather than HKLM, so the step
needs no elevation and no separate admin shell; -Scope Machine is still there
for every-account installs. Linux gets the counterpart script — a managed
policy file under /etc, which is root-only because Chrome reads policy from
nowhere else on that platform.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Brandon Li
2026-08-31 13:06:29 -05:00
co-authored by Claude Opus 5
parent 035f93d220
commit b9da419ebc
6 changed files with 587 additions and 414 deletions
+16 -4
View File
@@ -81,15 +81,27 @@ version than the one it is running.
## Installing it on a machine
From an elevated PowerShell on the Windows box:
`setup-windows.bat` and `setup-linux.sh` both offer this as their last step, so
a fresh instance needs nothing extra. To do it by hand, or on a machine that was
set up before this existed:
```powershell
powershell -NoProfile -ExecutionPolicy Bypass -File scripts\install-extension-policy.ps1
```
Then remove the unpacked copy from `chrome://extensions` — it now has the same
id, and Chrome will not load both — and restart Chrome. `-Remove` undoes it;
`-Browser Edge` or `-Browser Brave` writes the same entry for those instead.
```bash
sudo scripts/install-extension-policy.sh
```
The Windows script writes to the current user's policy hive and needs no
elevation; `-Scope Machine` covers every account on the box and does need an
elevated shell. Linux has no per-user equivalent — Chrome only reads managed
policy from `/etc` — so that one is root-only and machine-wide. Both take
`-Remove` / `--remove`, and the Windows one takes `-Browser Edge` or
`-Browser Brave`.
Afterwards, remove the unpacked copy from `chrome://extensions` — it now has the
same id, and Chrome will not load both — and restart the browser.
Development still works the old way: load `extension/` unpacked on a machine
with no policy entry. It keeps the same id (that is what `key` in the manifest