From dfeab92d8e7350ad713b3a53e0324e886bc2e3dc Mon Sep 17 00:00:00 2001 From: jliu666 <66937940+jliu666@users.noreply.github.com> Date: Mon, 21 Sep 2026 02:25:54 +0000 Subject: [PATCH] gpui_util: Respect custom Scoop installation paths (#62473) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit # Objective - Fix PowerShell discovery when Scoop is installed outside the default `%USERPROFILE%\scoop` directory. - Zed currently ignores Scoop's `SCOOP` environment variable, so it can miss `pwsh.exe` and fall back to another shell. ## Solution - Use the `SCOOP` environment variable as the Scoop root when it is set. - Fall back to `%USERPROFILE%\scoop` when `SCOOP` is unset. - Preserve the PowerShell discovery order and file validation from the current `main` branch. The original change also covered Git Bash. That is no longer needed after #63339 changed Git Bash discovery to follow the active Git installation. ## Testing - `cargo fmt --all --check` - `cargo test -p gpui_util` — 2 passed, 0 failed. - `cargo check -p gpui_util --tests --target x86_64-pc-windows-msvc` — passed. - Did not runtime-test the Windows-specific path on this macOS host because Windows test binaries cannot run natively here. - To test manually on Windows, set `SCOOP` to a custom Scoop root containing `shims\pwsh.exe`, launch Zed, and verify that PowerShell is selected. ## Self-Review Checklist: - [x] I've reviewed my own diff for quality, security, and reliability - [x] Unsafe blocks (if any) have justifying comments - [x] The content adheres to Zed's UI standards ([UX/UI](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) and [icon](https://github.com/zed-industries/zed/blob/main/crates/icons/README.md) guidelines) - [ ] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable Release Notes: - Fixed PowerShell installed by Scoop not being detected when Scoop uses a custom installation directory. - [GPUI] Fixed PowerShell discovery for custom Scoop installations on Windows. Signed-off-by: jliu666 --- crates/gpui_util/src/lib.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/crates/gpui_util/src/lib.rs b/crates/gpui_util/src/lib.rs index a946ea10c2..37279de56e 100644 --- a/crates/gpui_util/src/lib.rs +++ b/crates/gpui_util/src/lib.rs @@ -95,8 +95,12 @@ pub fn get_powershell() -> Option { } fn find_pwsh_in_scoop() -> Option { - let pwsh_exe = - PathBuf::from(std::env::var_os("USERPROFILE")?).join("scoop\\shims\\pwsh.exe"); + // Scoop can be installed to a custom location; $SCOOP points at the + // scoop root in that case and defaults to %USERPROFILE%\scoop otherwise. + let scoop_dir = std::env::var_os("SCOOP").map(PathBuf::from).or_else(|| { + std::env::var_os("USERPROFILE").map(|home| PathBuf::from(home).join("scoop")) + })?; + let pwsh_exe = scoop_dir.join("shims").join("pwsh.exe"); pwsh_exe.is_file().then_some(pwsh_exe) }