diff --git a/packages/app/src/components/settings-general.tsx b/packages/app/src/components/settings-general.tsx index b31cfb6cc7..007c414702 100644 --- a/packages/app/src/components/settings-general.tsx +++ b/packages/app/src/components/settings-general.tsx @@ -1,4 +1,4 @@ -import { Component, createMemo, type JSX } from "solid-js" +import { Component, createEffect, createMemo, type JSX, Show } from "solid-js" import { createStore } from "solid-js/store" import { Button } from "@opencode-ai/ui/button" import { Select } from "@opencode-ai/ui/select" @@ -36,8 +36,12 @@ export const SettingsGeneral: Component = () => { const platform = usePlatform() const settings = useSettings() + type BackendMode = "native" | "wsl" + const [store, setStore] = createStore({ checking: false, + backend: "native" as BackendMode, + backendReady: false, }) const check = () => { @@ -111,6 +115,34 @@ export const SettingsGeneral: Component = () => { })), ) + const backendOptions = createMemo(() => [ + { value: "native" as const, label: language.t("settings.desktop.backend.option.native") }, + { value: "wsl" as const, label: language.t("settings.desktop.backend.option.wsl") }, + ]) + + const showBackend = () => + platform.platform === "desktop" && + platform.os === "windows" && + !!platform.getBackendConfig && + !!platform.setBackendConfig + + createEffect(() => { + if (!showBackend()) return + if (store.backendReady) return + const get = platform.getBackendConfig + if (!get) { + setStore("backendReady", true) + return + } + + void Promise.resolve(get()) + .then((config) => { + const mode = config?.mode === "wsl" ? "wsl" : "native" + setStore({ backend: mode, backendReady: true }) + }) + .catch(() => setStore("backendReady", true)) + }) + const fontOptions = [ { value: "ibm-plex-mono", label: "font.option.ibmPlexMono" }, { value: "cascadia-code", label: "font.option.cascadiaCode" }, @@ -363,6 +395,38 @@ export const SettingsGeneral: Component = () => { + +
+

{language.t("settings.desktop.section.backend")}

+ +
+ +