diff options
Diffstat (limited to 'packages/desktop-electron/src/main/cli.ts')
| -rw-r--r-- | packages/desktop-electron/src/main/cli.ts | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/packages/desktop-electron/src/main/cli.ts b/packages/desktop-electron/src/main/cli.ts index f2d918bd2..ebaf89fda 100644 --- a/packages/desktop-electron/src/main/cli.ts +++ b/packages/desktop-electron/src/main/cli.ts @@ -9,6 +9,7 @@ import { app } from "electron" import treeKill from "tree-kill" import { WSL_ENABLED_KEY } from "./constants" +import { getUserShell, loadShellEnv, mergeShellEnv } from "./shell-env" import { store } from "./store" const CLI_INSTALL_DIR = ".opencode/bin" @@ -135,7 +136,7 @@ export function spawnCommand(args: string, extraEnv: Record<string, string>) { const base = Object.fromEntries( Object.entries(process.env).filter((entry): entry is [string, string] => typeof entry[1] === "string"), ) - const envs = { + const env = { ...base, OPENCODE_EXPERIMENTAL_ICON_DISCOVERY: "true", OPENCODE_EXPERIMENTAL_FILEWATCHER: "true", @@ -143,8 +144,10 @@ export function spawnCommand(args: string, extraEnv: Record<string, string>) { XDG_STATE_HOME: app.getPath("userData"), ...extraEnv, } + const shell = process.platform === "win32" ? null : getUserShell() + const envs = shell ? mergeShellEnv(loadShellEnv(shell), env) : env - const { cmd, cmdArgs } = buildCommand(args, envs) + const { cmd, cmdArgs } = buildCommand(args, envs, shell) console.log(`[cli] Executing: ${cmd} ${cmdArgs.join(" ")}`) const child = spawn(cmd, cmdArgs, { env: envs, @@ -210,7 +213,7 @@ function handleSqliteProgress(events: EventEmitter, line: string) { return false } -function buildCommand(args: string, env: Record<string, string>) { +function buildCommand(args: string, env: Record<string, string>, shell: string | null) { if (process.platform === "win32" && isWslEnabled()) { console.log(`[cli] Using WSL mode`) const version = app.getVersion() @@ -233,10 +236,10 @@ function buildCommand(args: string, env: Record<string, string>) { } const sidecar = getSidecarPath() - const shell = process.env.SHELL || "/bin/sh" - const line = shell.endsWith("/nu") ? `^\"${sidecar}\" ${args}` : `\"${sidecar}\" ${args}` - console.log(`[cli] Unix mode, shell: ${shell}, command: ${line}`) - return { cmd: shell, cmdArgs: ["-l", "-c", line] } + const user = shell || getUserShell() + const line = user.endsWith("/nu") ? `^\"${sidecar}\" ${args}` : `\"${sidecar}\" ${args}` + console.log(`[cli] Unix mode, shell: ${user}, command: ${line}`) + return { cmd: user, cmdArgs: ["-l", "-c", line] } } function envPrefix(env: Record<string, string>) { |
