Files
Trilium/scripts/utils.mts

53 lines
1.6 KiB
TypeScript
Raw Normal View History

import { execSync } from "child_process";
2025-09-04 12:12:23 +03:00
import { existsSync, readFileSync } from "fs";
import { platform } from "os";
export function isNixOS() {
if (platform() !== "linux") return false;
2025-09-04 12:12:23 +03:00
const osReleasePath = "/etc/os-release";
if (existsSync(osReleasePath)) {
const osReleaseFile = readFileSync(osReleasePath, "utf-8");
return osReleaseFile.includes("ID=nixos");
} else {
return !!process.env.NIX_STORE;
}
}
function resetPath() {
// On Unix-like systems, PATH is usually inherited from login shell
// but npm prepends node_modules/.bin. Let's remove it:
const origPath = process.env.PATH || "";
// npm usually adds something like ".../node_modules/.bin"
process.env.PATH = origPath
.split(":")
.filter(p => !p.includes("node_modules/.bin"))
.join(":");
}
export function getElectronPath() {
if (isNixOS()) {
resetPath();
try {
const path = execSync("which electron").toString("utf-8").trimEnd();
return path;
} catch (e) {
// Nothing to do, since we have a fallback below.
}
console.log("No Electron in PATH, using 'nix develop' to get it...");
try {
const path = execSync("nix develop -c which electron", { stdio: ["pipe", "pipe", "pipe"] }).toString("utf-8").trimEnd();
return path;
} catch (e) {
console.error("\nFailed to get Electron from 'nix develop'.");
console.error("Please ensure you have a valid flake.nix with electron in devShells.default.");
process.exit(1);
}
} else {
return "electron";
}
}