| 
									
										
										
										
											2025-09-02 19:56:27 +03:00
										 |  |  | import { execSync } from "child_process"; | 
					
						
							| 
									
										
										
										
											2025-09-04 12:12:23 +03:00
										 |  |  | import { existsSync, readFileSync } from "fs"; | 
					
						
							| 
									
										
										
										
											2025-09-02 10:45:42 +03:00
										 |  |  | 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; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2025-09-02 10:45:42 +03:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-02 19:56:27 +03:00
										 |  |  | function resetPath() { | 
					
						
							| 
									
										
										
										
											2025-09-02 10:45:42 +03:00
										 |  |  |     // 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(":"); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2025-09-02 19:56:27 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | export function getElectronPath() { | 
					
						
							|  |  |  |     if (isNixOS()) { | 
					
						
							|  |  |  |         resetPath();             | 
					
						
							| 
									
										
										
										
											2025-09-04 09:26:16 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  |         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("Using default since no Electron is available in path."); | 
					
						
							| 
									
										
										
										
											2025-09-02 19:56:27 +03:00
										 |  |  |         return execSync("nix eval --raw nixpkgs#electron_37").toString("utf-8") + "/bin/electron"; | 
					
						
							|  |  |  |     } else { | 
					
						
							|  |  |  |         return "electron"; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } |