From b78121b7a59489b38ca49305d57b8dd0b2d4f557 Mon Sep 17 00:00:00 2001 From: Evan Simkowitz Date: Wed, 8 Jan 2025 12:15:38 -0800 Subject: [PATCH 01/13] Fix XDG config vars for Snap --- emain/platform.ts | 37 ++++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/emain/platform.ts b/emain/platform.ts index 58ce99a2e2..b14d402706 100644 --- a/emain/platform.ts +++ b/emain/platform.ts @@ -4,7 +4,7 @@ import { fireAndForget } from "@/util/util"; import { app, dialog, ipcMain, shell } from "electron"; import envPaths from "env-paths"; -import { existsSync, mkdirSync } from "fs"; +import { existsSync, mkdirSync, readFileSync } from "fs"; import os from "os"; import path from "path"; import { WaveDevVarName, WaveDevViteVarName } from "../frontend/util/isdev"; @@ -148,6 +148,40 @@ function getWaveDataDir(): string { return ensurePathExists(retVal); } +function readXdgConfigDirs(): Record { + const xdgConfigPath = path.join(app.getPath("home"), ".config", "user-dirs.dirs"); + if (existsSync(xdgConfigPath)) { + const xdgConfig = readFileSync(xdgConfigPath, "utf8"); + const lines = xdgConfig.split("\n"); + const dirs: Record = {}; + for (const line of lines) { + const match = line.match(/^XDG_([[:upper:]]+)_DIR="(.*)"$/); + if (match) { + dirs[match[1]] = match[2]; + } + } + return dirs; + } + return {}; +} + +function correctSnapXdgVars() { + if (process.env.SNAP) { + if (!process.env[WaveConfigHomeVarName]) { + process.env[WaveConfigHomeVarName] = process.env.XDG_CONFIG_HOME; + process.env.XDG_CONFIG_HOME = ""; + } + if (!process.env[WaveDataHomeVarName]) { + process.env[WaveDataHomeVarName] = process.env.XDG_DATA_HOME; + process.env.XDG_DATA_HOME = ""; + } + const xdgDirs = readXdgConfigDirs(); + for (const dir in xdgDirs) { + process.env[dir] = xdgDirs[dir]; + } + } +} + function getElectronAppBasePath(): string { return path.dirname(import.meta.dirname); } @@ -195,6 +229,7 @@ ipcMain.on("get-config-dir", (event) => { }); export { + correctSnapXdgVars, getElectronAppBasePath, getElectronAppUnpackedBasePath, getWaveConfigDir, From fb1b059bbe7d5d3d27ef1a3c7abdbba4299a8879 Mon Sep 17 00:00:00 2001 From: Evan Simkowitz Date: Wed, 8 Jan 2025 12:18:55 -0800 Subject: [PATCH 02/13] fix paths --- emain/platform.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/emain/platform.ts b/emain/platform.ts index b14d402706..82e7e93b1f 100644 --- a/emain/platform.ts +++ b/emain/platform.ts @@ -168,11 +168,11 @@ function readXdgConfigDirs(): Record { function correctSnapXdgVars() { if (process.env.SNAP) { if (!process.env[WaveConfigHomeVarName]) { - process.env[WaveConfigHomeVarName] = process.env.XDG_CONFIG_HOME; + process.env[WaveConfigHomeVarName] = path.join(process.env.XDG_CONFIG_HOME, waveDirName); process.env.XDG_CONFIG_HOME = ""; } if (!process.env[WaveDataHomeVarName]) { - process.env[WaveDataHomeVarName] = process.env.XDG_DATA_HOME; + process.env[WaveDataHomeVarName] = path.join(process.env.XDG_DATA_HOME, waveDirName); process.env.XDG_DATA_HOME = ""; } const xdgDirs = readXdgConfigDirs(); From 0d97fa300b36fa497d81a8cc026adf4209791aa9 Mon Sep 17 00:00:00 2001 From: Evan Simkowitz Date: Wed, 8 Jan 2025 12:20:56 -0800 Subject: [PATCH 03/13] call in platform --- emain/platform.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/emain/platform.ts b/emain/platform.ts index 82e7e93b1f..f05a040501 100644 --- a/emain/platform.ts +++ b/emain/platform.ts @@ -228,8 +228,9 @@ ipcMain.on("get-config-dir", (event) => { event.returnValue = getWaveConfigDir(); }); +correctSnapXdgVars(); + export { - correctSnapXdgVars, getElectronAppBasePath, getElectronAppUnpackedBasePath, getWaveConfigDir, From cd5b61878aa833fbe2c95c357446c48e6ef56ae2 Mon Sep 17 00:00:00 2001 From: Evan Simkowitz Date: Wed, 8 Jan 2025 12:22:56 -0800 Subject: [PATCH 04/13] update --- emain/platform.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/emain/platform.ts b/emain/platform.ts index f05a040501..e1146d6f25 100644 --- a/emain/platform.ts +++ b/emain/platform.ts @@ -166,6 +166,7 @@ function readXdgConfigDirs(): Record { } function correctSnapXdgVars() { + console.log("Correcting XDG_* variables for Snap", process.env.SNAP); if (process.env.SNAP) { if (!process.env[WaveConfigHomeVarName]) { process.env[WaveConfigHomeVarName] = path.join(process.env.XDG_CONFIG_HOME, waveDirName); From 3dd100b5a5cebe066998b08dce1a3733ac213173 Mon Sep 17 00:00:00 2001 From: Evan Simkowitz Date: Wed, 8 Jan 2025 12:24:17 -0800 Subject: [PATCH 05/13] fix --- emain/platform.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/emain/platform.ts b/emain/platform.ts index e1146d6f25..a64ce72198 100644 --- a/emain/platform.ts +++ b/emain/platform.ts @@ -168,11 +168,11 @@ function readXdgConfigDirs(): Record { function correctSnapXdgVars() { console.log("Correcting XDG_* variables for Snap", process.env.SNAP); if (process.env.SNAP) { - if (!process.env[WaveConfigHomeVarName]) { + if (!process.env[WaveConfigHomeVarName] && process.env.XDG_CONFIG_HOME) { process.env[WaveConfigHomeVarName] = path.join(process.env.XDG_CONFIG_HOME, waveDirName); process.env.XDG_CONFIG_HOME = ""; } - if (!process.env[WaveDataHomeVarName]) { + if (!process.env[WaveDataHomeVarName] && process.env.XDG_DATA_HOME) { process.env[WaveDataHomeVarName] = path.join(process.env.XDG_DATA_HOME, waveDirName); process.env.XDG_DATA_HOME = ""; } From af6d29e849da8d9496a0fb844e701914b4ac690c Mon Sep 17 00:00:00 2001 From: Evan Simkowitz Date: Wed, 8 Jan 2025 12:25:33 -0800 Subject: [PATCH 06/13] move log --- emain/platform.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/emain/platform.ts b/emain/platform.ts index a64ce72198..83dcd85796 100644 --- a/emain/platform.ts +++ b/emain/platform.ts @@ -166,8 +166,8 @@ function readXdgConfigDirs(): Record { } function correctSnapXdgVars() { - console.log("Correcting XDG_* variables for Snap", process.env.SNAP); if (process.env.SNAP) { + console.log("Correcting XDG_* variables for Snap", process.env.SNAP); if (!process.env[WaveConfigHomeVarName] && process.env.XDG_CONFIG_HOME) { process.env[WaveConfigHomeVarName] = path.join(process.env.XDG_CONFIG_HOME, waveDirName); process.env.XDG_CONFIG_HOME = ""; From fd3453ef425e240ebf1e139229a7baba11f0bc75 Mon Sep 17 00:00:00 2001 From: Evan Simkowitz Date: Wed, 8 Jan 2025 12:30:08 -0800 Subject: [PATCH 07/13] add log --- emain/platform.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/emain/platform.ts b/emain/platform.ts index 83dcd85796..b2a7a0e2c9 100644 --- a/emain/platform.ts +++ b/emain/platform.ts @@ -177,6 +177,7 @@ function correctSnapXdgVars() { process.env.XDG_DATA_HOME = ""; } const xdgDirs = readXdgConfigDirs(); + console.log("Corrected XDG_* variables", xdgDirs); for (const dir in xdgDirs) { process.env[dir] = xdgDirs[dir]; } From abdb3db07144168e04a938b133acb129fc871aae Mon Sep 17 00:00:00 2001 From: Evan Simkowitz Date: Wed, 8 Jan 2025 12:33:48 -0800 Subject: [PATCH 08/13] test regex fix --- emain/platform.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/emain/platform.ts b/emain/platform.ts index b2a7a0e2c9..0e70cd3851 100644 --- a/emain/platform.ts +++ b/emain/platform.ts @@ -155,7 +155,7 @@ function readXdgConfigDirs(): Record { const lines = xdgConfig.split("\n"); const dirs: Record = {}; for (const line of lines) { - const match = line.match(/^XDG_([[:upper:]]+)_DIR="(.*)"$/); + const match = line.match(/^XDG_([[:upper:]]+)_DIR="(.*)"/); if (match) { dirs[match[1]] = match[2]; } From 17d9354eb65e71627ed1409c849ce19a6a3ba8af Mon Sep 17 00:00:00 2001 From: Evan Simkowitz Date: Wed, 8 Jan 2025 12:34:41 -0800 Subject: [PATCH 09/13] more logs --- emain/platform.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/emain/platform.ts b/emain/platform.ts index 0e70cd3851..b63176c758 100644 --- a/emain/platform.ts +++ b/emain/platform.ts @@ -151,10 +151,12 @@ function getWaveDataDir(): string { function readXdgConfigDirs(): Record { const xdgConfigPath = path.join(app.getPath("home"), ".config", "user-dirs.dirs"); if (existsSync(xdgConfigPath)) { + console.log("Reading XDG_* variables from", xdgConfigPath); const xdgConfig = readFileSync(xdgConfigPath, "utf8"); const lines = xdgConfig.split("\n"); const dirs: Record = {}; for (const line of lines) { + console.log("Reading XDG_* line", line); const match = line.match(/^XDG_([[:upper:]]+)_DIR="(.*)"/); if (match) { dirs[match[1]] = match[2]; From e5f725aed1e3b7d7583d0d1de2598f61302655d8 Mon Sep 17 00:00:00 2001 From: Evan Simkowitz Date: Wed, 8 Jan 2025 12:36:34 -0800 Subject: [PATCH 10/13] test fix --- emain/platform.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/emain/platform.ts b/emain/platform.ts index b63176c758..ccf6f4e902 100644 --- a/emain/platform.ts +++ b/emain/platform.ts @@ -157,7 +157,7 @@ function readXdgConfigDirs(): Record { const dirs: Record = {}; for (const line of lines) { console.log("Reading XDG_* line", line); - const match = line.match(/^XDG_([[:upper:]]+)_DIR="(.*)"/); + const match = line.match(/^(XDG_[[:upper:]]+_DIR)="(.*)"/); if (match) { dirs[match[1]] = match[2]; } From 09dd9f4997789a0f9c5b873a83d7807dc152cebf Mon Sep 17 00:00:00 2001 From: Evan Simkowitz Date: Wed, 8 Jan 2025 12:38:45 -0800 Subject: [PATCH 11/13] try simpler regex --- emain/platform.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/emain/platform.ts b/emain/platform.ts index ccf6f4e902..b256723986 100644 --- a/emain/platform.ts +++ b/emain/platform.ts @@ -157,7 +157,7 @@ function readXdgConfigDirs(): Record { const dirs: Record = {}; for (const line of lines) { console.log("Reading XDG_* line", line); - const match = line.match(/^(XDG_[[:upper:]]+_DIR)="(.*)"/); + const match = line.match(/^(XDG_\w+_DIR)="(.*)"/); if (match) { dirs[match[1]] = match[2]; } From 17f1c3c44208c5e6d9b9f0c3c84ff7f0201437d2 Mon Sep 17 00:00:00 2001 From: Evan Simkowitz Date: Wed, 8 Jan 2025 12:49:07 -0800 Subject: [PATCH 12/13] try setting env vars, see if that fixes it --- electron-builder.config.cjs | 4 ++++ emain/platform.ts | 2 -- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/electron-builder.config.cjs b/electron-builder.config.cjs index 35cc31946a..4baba1d5ca 100644 --- a/electron-builder.config.cjs +++ b/electron-builder.config.cjs @@ -104,6 +104,10 @@ const config = { confinement: "classic", allowNativeWayland: true, artifactName: "${name}_${version}_${arch}.${ext}", + environment: { + XDG_CONFIG_HOME: "$XDG_CONFIG_HOME", + XDG_DATA_HOME: "$XDG_DATA_HOME", + }, }, publish: { provider: "generic", diff --git a/emain/platform.ts b/emain/platform.ts index b256723986..474ff1ed45 100644 --- a/emain/platform.ts +++ b/emain/platform.ts @@ -232,8 +232,6 @@ ipcMain.on("get-config-dir", (event) => { event.returnValue = getWaveConfigDir(); }); -correctSnapXdgVars(); - export { getElectronAppBasePath, getElectronAppUnpackedBasePath, From e889c17537db83766d65316cb7642340b035d4fc Mon Sep 17 00:00:00 2001 From: Evan Simkowitz Date: Wed, 8 Jan 2025 15:47:21 -0800 Subject: [PATCH 13/13] push --- emain/emain-wavesrv.ts | 5 +++++ emain/platform.ts | 40 +--------------------------------------- 2 files changed, 6 insertions(+), 39 deletions(-) diff --git a/emain/emain-wavesrv.ts b/emain/emain-wavesrv.ts index b77e909293..a647609441 100644 --- a/emain/emain-wavesrv.ts +++ b/emain/emain-wavesrv.ts @@ -104,6 +104,11 @@ export function runWaveSrv(handleWSEvent: (evtMsg: WSEventType) => void): Promis } process.env[WSServerEndpointVarName] = startParams[1]; process.env[WebServerEndpointVarName] = startParams[2]; + delete process.env.XDG_DATA_HOME; + delete process.env.XDG_CONFIG_HOME; + delete process.env.XDG_RUNTIME_DIR; + delete process.env.XDG_CACHE_HOME; + delete process.env.XDG_STATE_HOME; WaveVersion = startParams[3]; WaveBuildTime = parseInt(startParams[4]); waveSrvReadyResolve(true); diff --git a/emain/platform.ts b/emain/platform.ts index 474ff1ed45..58ce99a2e2 100644 --- a/emain/platform.ts +++ b/emain/platform.ts @@ -4,7 +4,7 @@ import { fireAndForget } from "@/util/util"; import { app, dialog, ipcMain, shell } from "electron"; import envPaths from "env-paths"; -import { existsSync, mkdirSync, readFileSync } from "fs"; +import { existsSync, mkdirSync } from "fs"; import os from "os"; import path from "path"; import { WaveDevVarName, WaveDevViteVarName } from "../frontend/util/isdev"; @@ -148,44 +148,6 @@ function getWaveDataDir(): string { return ensurePathExists(retVal); } -function readXdgConfigDirs(): Record { - const xdgConfigPath = path.join(app.getPath("home"), ".config", "user-dirs.dirs"); - if (existsSync(xdgConfigPath)) { - console.log("Reading XDG_* variables from", xdgConfigPath); - const xdgConfig = readFileSync(xdgConfigPath, "utf8"); - const lines = xdgConfig.split("\n"); - const dirs: Record = {}; - for (const line of lines) { - console.log("Reading XDG_* line", line); - const match = line.match(/^(XDG_\w+_DIR)="(.*)"/); - if (match) { - dirs[match[1]] = match[2]; - } - } - return dirs; - } - return {}; -} - -function correctSnapXdgVars() { - if (process.env.SNAP) { - console.log("Correcting XDG_* variables for Snap", process.env.SNAP); - if (!process.env[WaveConfigHomeVarName] && process.env.XDG_CONFIG_HOME) { - process.env[WaveConfigHomeVarName] = path.join(process.env.XDG_CONFIG_HOME, waveDirName); - process.env.XDG_CONFIG_HOME = ""; - } - if (!process.env[WaveDataHomeVarName] && process.env.XDG_DATA_HOME) { - process.env[WaveDataHomeVarName] = path.join(process.env.XDG_DATA_HOME, waveDirName); - process.env.XDG_DATA_HOME = ""; - } - const xdgDirs = readXdgConfigDirs(); - console.log("Corrected XDG_* variables", xdgDirs); - for (const dir in xdgDirs) { - process.env[dir] = xdgDirs[dir]; - } - } -} - function getElectronAppBasePath(): string { return path.dirname(import.meta.dirname); }