feat(electrobun): wire persistence — SQLite, 17 themes, font system
Persistence: - bun:sqlite at ~/.config/agor/settings.db (WAL mode, 500ms busy_timeout) - 4 tables: schema_version, settings, projects, custom_themes - 5 RPC handlers: settings.get/set/getAll, projects get/set Theme system (LIVE switching): - All 17 themes ported from Tauri (4 Catppuccin + 7 Editor + 6 Deep Dark) - applyCssVars() sets 26 --ctp-* vars on document.documentElement - Parallel xterm ITheme mapping per theme - theme-store.svelte.ts: Svelte 5 rune store, persists to SQLite Font system: - font-store.svelte.ts: UI/terminal font family + size - Live CSS var application (--ui-font-family/size, --term-font-family/size) - onTermFontChange() callback registry for terminal instances - Persists all 4 font settings to SQLite AppearanceSettings wired: 17-theme grouped dropdown, font steppers Init on startup: restores saved theme + fonts from SQLite
This commit is contained in:
parent
0b9e8b305a
commit
6002a379e4
13 changed files with 1043 additions and 53 deletions
|
|
@ -1,6 +1,7 @@
|
|||
import path from "path";
|
||||
import { BrowserWindow, BrowserView, Updater } from "electrobun/bun";
|
||||
import { PtyClient } from "./pty-client.ts";
|
||||
import { settingsDb } from "./settings-db.ts";
|
||||
import type { PtyRPCSchema } from "../shared/pty-rpc-schema.ts";
|
||||
|
||||
const DEV_SERVER_PORT = 9760; // Project convention: 9700+ range
|
||||
|
|
@ -96,6 +97,60 @@ const rpc = BrowserView.defineRPC<PtyRPCSchema>({
|
|||
} catch { /* ignore */ }
|
||||
return { ok: true };
|
||||
},
|
||||
|
||||
// ── Settings handlers ─────────────────────────────────────────────────
|
||||
|
||||
"settings.get": ({ key }) => {
|
||||
try {
|
||||
return { value: settingsDb.getSetting(key) };
|
||||
} catch (err) {
|
||||
console.error("[settings.get]", err);
|
||||
return { value: null };
|
||||
}
|
||||
},
|
||||
|
||||
"settings.set": ({ key, value }) => {
|
||||
try {
|
||||
settingsDb.setSetting(key, value);
|
||||
return { ok: true };
|
||||
} catch (err) {
|
||||
console.error("[settings.set]", err);
|
||||
return { ok: false };
|
||||
}
|
||||
},
|
||||
|
||||
"settings.getAll": () => {
|
||||
try {
|
||||
return { settings: settingsDb.getAll() };
|
||||
} catch (err) {
|
||||
console.error("[settings.getAll]", err);
|
||||
return { settings: {} };
|
||||
}
|
||||
},
|
||||
|
||||
"settings.getProjects": () => {
|
||||
try {
|
||||
const projects = settingsDb.listProjects().map((p) => ({
|
||||
id: p.id,
|
||||
config: JSON.stringify(p),
|
||||
}));
|
||||
return { projects };
|
||||
} catch (err) {
|
||||
console.error("[settings.getProjects]", err);
|
||||
return { projects: [] };
|
||||
}
|
||||
},
|
||||
|
||||
"settings.setProject": ({ id, config }) => {
|
||||
try {
|
||||
const parsed = JSON.parse(config);
|
||||
settingsDb.setProject(id, { id, ...parsed });
|
||||
return { ok: true };
|
||||
} catch (err) {
|
||||
console.error("[settings.setProject]", err);
|
||||
return { ok: false };
|
||||
}
|
||||
},
|
||||
},
|
||||
|
||||
messages: {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue