From 79b33d095616aa6a80210f68e6c39f575e959554 Mon Sep 17 00:00:00 2001 From: atinylittleshell <3233006+atinylittleshell@users.noreply.github.com> Date: Sat, 20 Jan 2024 23:53:15 -0800 Subject: [PATCH] default to .config/TerminalOne/config.js as the config path (#50) * default to .config/TerminalOne/config.js as the config path * bump version --- .../src/nativeBridge/modules/common/index.ts | 1 + .../src/nativeBridge/modules/configModule.ts | 37 +++++++++++++++---- package.json | 2 +- 3 files changed, 31 insertions(+), 9 deletions(-) diff --git a/apps/app/src/nativeBridge/modules/common/index.ts b/apps/app/src/nativeBridge/modules/common/index.ts index 02e9b7d..cb0f4c2 100644 --- a/apps/app/src/nativeBridge/modules/common/index.ts +++ b/apps/app/src/nativeBridge/modules/common/index.ts @@ -3,5 +3,6 @@ import { app } from 'electron'; export const getAppDirs = () => { return { userData: app.getPath('userData'), + home: app.getPath('home'), }; }; diff --git a/apps/app/src/nativeBridge/modules/configModule.ts b/apps/app/src/nativeBridge/modules/configModule.ts index 09479fc..ed8711c 100644 --- a/apps/app/src/nativeBridge/modules/configModule.ts +++ b/apps/app/src/nativeBridge/modules/configModule.ts @@ -3,7 +3,7 @@ import { resolveConfig, ResolvedConfig, } from '@terminalone/types'; -import { BrowserWindow } from 'electron'; +import { app, BrowserWindow } from 'electron'; import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs-extra'; import os from 'os'; import path from 'path'; @@ -19,6 +19,7 @@ import { Logger } from './common/logger'; @nativeBridgeModule('config') export class ConfigModule extends NativeBridgeModule { + private configPath: string = ''; private config: ResolvedConfig = DEFAULT_CONFIG; @moduleFunction() @@ -28,22 +29,40 @@ export class ConfigModule extends NativeBridgeModule { @moduleFunction() public async getConfigPath(_mainWindow: BrowserWindow): Promise { - return path.join(getAppDirs().userData, 'config.js'); + return this.configPath; } public onRegistered(mainWindow: BrowserWindow): void { - const configDir = getAppDirs().userData; - const configPath = path.join(configDir, 'config.js'); - if (!existsSync(configPath)) { + const configPathCandidates: string[] = [ + path.join( + getAppDirs().home, + '.config', + app.getName().replace(/\s/g, ''), + 'config.js', + ), + path.join(getAppDirs().userData, 'config.js'), + ]; + + // look for the first existing config file. if not found, use the first candidate + this.configPath = configPathCandidates[0]; + for (const configPathCandidate of configPathCandidates) { + if (existsSync(configPathCandidate)) { + this.configPath = configPathCandidate; + break; + } + } + + if (!existsSync(this.configPath)) { + const configDir = path.dirname(this.configPath); mkdirSync(configDir, { recursive: true }); writeFileSync( - configPath, + this.configPath, '// see https://github.com/atinylittleshell/TerminalOne/blob/main/packages/types/defaultConfig.ts for supported configuration values\n' + 'module.exports = {};', ); } - const configContent = readFileSync(configPath, 'utf8'); + const configContent = readFileSync(this.configPath, 'utf8'); try { const script = new vm.Script(configContent, { @@ -66,7 +85,9 @@ export class ConfigModule extends NativeBridgeModule { Logger.getInstance().log( 'info', - `Loaded config from ${configPath}}: ${JSON.stringify(mod.exports)}`, + `Loaded config from ${this.configPath}}: ${JSON.stringify( + mod.exports, + )}`, ); const resolved = resolveConfig(mod.exports, os.platform(), os.release()); diff --git a/package.json b/package.json index 219afb4..6fe0cc1 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@terminalone/monorepo", "productName": "Terminal One", - "version": "1.5.1", + "version": "1.6.0", "description": "A fast, elegant and intelligent cross-platform terminal.", "author": "atinylittleshell ", "license": "MIT",