From 928dc3d1b18b86160f6bef9a919d0f302aba50d9 Mon Sep 17 00:00:00 2001 From: Michael Neale Date: Fri, 31 Jan 2025 11:38:28 +1100 Subject: [PATCH] fix: load shell automatically from env for GUI (#948) --- ui/desktop/src/main.ts | 4 ++-- ui/desktop/src/utils/loadEnv.ts | 16 +++++----------- 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/ui/desktop/src/main.ts b/ui/desktop/src/main.ts index 5c8a909f..9fc43811 100644 --- a/ui/desktop/src/main.ts +++ b/ui/desktop/src/main.ts @@ -16,7 +16,7 @@ import started from 'electron-squirrel-startup'; import path from 'node:path'; import { startGoosed } from './goosed'; import { getBinaryPath } from './utils/binaryPath'; -import { loadZshEnv } from './utils/loadEnv'; +import { loadShellEnv } from './utils/loadEnv'; import log from './utils/logger'; import { addRecentDir, loadRecentDirs } from './utils/recentDirs'; import { @@ -69,7 +69,7 @@ const parseArgs = () => { }; const getGooseProvider = () => { - loadZshEnv(app.isPackaged); + loadShellEnv(app.isPackaged); //{env-macro-start}// //needed when goose is bundled for a specific provider //{env-macro-end}// diff --git a/ui/desktop/src/utils/loadEnv.ts b/ui/desktop/src/utils/loadEnv.ts index 7aafc50b..514bc4b7 100644 --- a/ui/desktop/src/utils/loadEnv.ts +++ b/ui/desktop/src/utils/loadEnv.ts @@ -1,9 +1,7 @@ import { execSync } from 'child_process'; -import path from 'path'; import log from './logger'; -import fs from 'node:fs'; -export function loadZshEnv(isProduction: boolean = false): void { +export function loadShellEnv(isProduction: boolean = false): void { // Only proceed if running on macOS and in production mode if (process.platform !== 'darwin' || !isProduction) { log.info( @@ -15,16 +13,11 @@ export function loadZshEnv(isProduction: boolean = false): void { } try { - // Execute zsh and source the zshrc file, then export all environment variables - const zshrcPath = path.join(process.env.HOME || '', '.zshrc'); + log.info('LOADING ENV'); - // if no file then return - if (!fs.existsSync(zshrcPath)) { - console.log('No zshrc file found'); - return; - } + const shell = process.env.SHELL || '/bin/bash'; // Detect user's shell - const envStr = execSync(`/bin/zsh -c 'source ${zshrcPath} && env'`, { + const envStr = execSync(`${shell} -l -i -c 'env'`, { encoding: 'utf-8', }); @@ -33,6 +26,7 @@ export function loadZshEnv(isProduction: boolean = false): void { const matches = line.match(/^([^=]+)=(.*)$/); if (matches) { const [, key, value] = matches; + log.info(`Setting ${key}`); process.env[key] = value; } });