snatching amp's walkthrough for my own purposes mwhahaha traverse.dunkirk.sh/diagram/6121f05c-a5ef-4ecf-8ffc-02534c5e767c
at main 37 lines 1.2 kB view raw
1import { join } from "node:path"; 2import { homedir } from "node:os"; 3import type { TraverseConfig } from "./types.ts"; 4 5const DEFAULTS: TraverseConfig = { 6 shareServerUrl: "https://traverse.dunkirk.sh", 7 port: 4173, 8 mode: "local", 9}; 10 11function getConfigDir(): string { 12 const platform = process.platform; 13 if (platform === "darwin") { 14 return join(homedir(), "Library", "Application Support", "traverse"); 15 } 16 const xdg = process.env.XDG_CONFIG_HOME || join(homedir(), ".config"); 17 return join(xdg, "traverse"); 18} 19 20export function loadConfig(): TraverseConfig { 21 let fileConfig: Partial<TraverseConfig> = {}; 22 23 const configPath = join(getConfigDir(), "config.json"); 24 try { 25 const text = require("node:fs").readFileSync(configPath, "utf-8"); 26 fileConfig = JSON.parse(text); 27 } catch { 28 // no config file, use defaults 29 } 30 31 // Env vars override config file, config file overrides defaults 32 return { 33 shareServerUrl: process.env.TRAVERSE_SHARE_URL || fileConfig.shareServerUrl || DEFAULTS.shareServerUrl, 34 port: parseInt(process.env.TRAVERSE_PORT || String(fileConfig.port || DEFAULTS.port), 10), 35 mode: (process.env.TRAVERSE_MODE || fileConfig.mode || DEFAULTS.mode) as "local" | "server", 36 }; 37}