@@ -2,6 +2,7 @@ import { createStore, reconcile } from "solid-js/store"
22import { createEffect , createMemo } from "solid-js"
33import { createSimpleContext } from "@opencode-ai/ui/context"
44import { persisted } from "@/utils/persist"
5+ import { usePlatform } from "./platform"
56
67export interface NotificationSettings {
78 agent : boolean
@@ -148,19 +149,42 @@ function withFallback<T>(read: () => T | undefined, fallback: T) {
148149 return createMemo ( ( ) => read ( ) ?? fallback )
149150}
150151
152+ function desktopFallback < T > ( read : ( ) => T | undefined , config : ( ) => T | undefined , fallback : T ) {
153+ return createMemo ( ( ) => config ( ) ?? read ( ) ?? fallback )
154+ }
155+
151156export const { use : useSettings , provider : SettingsProvider } = createSimpleContext ( {
152157 name : "Settings" ,
153158 gate : false ,
154159 init : ( ) => {
160+ const platform = usePlatform ( )
161+ const desktopConfig = ( ) => ( platform . platform === "desktop" ? platform . desktopConfig ?.( ) : undefined )
155162 const [ store , setStore , _ , ready ] = persisted ( "settings.v3" , createStore < Settings > ( defaultSettings ) )
156- const showFileTree = withFallback ( ( ) => store . general ?. showFileTree , defaultSettings . general . showFileTree )
157- const showSearch = withFallback ( ( ) => store . general ?. showSearch , defaultSettings . general . showSearch )
158- const showStatus = withFallback ( ( ) => store . general ?. showStatus , defaultSettings . general . showStatus )
159- const showCustomAgents = withFallback (
163+ const showFileTree = desktopFallback (
164+ ( ) => store . general ?. showFileTree ,
165+ ( ) => desktopConfig ( ) ?. general ?. showFileTree ,
166+ defaultSettings . general . showFileTree ,
167+ )
168+ const showSearch = desktopFallback (
169+ ( ) => store . general ?. showSearch ,
170+ ( ) => desktopConfig ( ) ?. general ?. showSearch ,
171+ defaultSettings . general . showSearch ,
172+ )
173+ const showStatus = desktopFallback (
174+ ( ) => store . general ?. showStatus ,
175+ ( ) => desktopConfig ( ) ?. general ?. showStatus ,
176+ defaultSettings . general . showStatus ,
177+ )
178+ const showCustomAgents = desktopFallback (
160179 ( ) => store . general ?. showCustomAgents ,
180+ ( ) => desktopConfig ( ) ?. general ?. showCustomAgents ,
161181 defaultSettings . general . showCustomAgents ,
162182 )
163- const newLayoutDesigns = withFallback ( ( ) => store . general ?. newLayoutDesigns , newLayoutDesignsDefault )
183+ const newLayoutDesigns = desktopFallback (
184+ ( ) => store . general ?. newLayoutDesigns ,
185+ ( ) => desktopConfig ( ) ?. general ?. newLayoutDesigns ,
186+ newLayoutDesignsDefault ,
187+ )
164188 const visible = ( preference : ( ) => boolean ) => createMemo ( ( ) => ! newLayoutDesigns ( ) || preference ( ) )
165189
166190 createEffect ( ( ) => {
@@ -181,16 +205,26 @@ export const { use: useSettings, provider: SettingsProvider } = createSimpleCont
181205 return store
182206 } ,
183207 general : {
184- autoSave : withFallback ( ( ) => store . general ?. autoSave , defaultSettings . general . autoSave ) ,
208+ autoSave : desktopFallback (
209+ ( ) => store . general ?. autoSave ,
210+ ( ) => desktopConfig ( ) ?. general ?. autoSave ,
211+ defaultSettings . general . autoSave ,
212+ ) ,
185213 setAutoSave ( value : boolean ) {
186214 setStore ( "general" , "autoSave" , value )
187215 } ,
188- releaseNotes : withFallback ( ( ) => store . general ?. releaseNotes , defaultSettings . general . releaseNotes ) ,
216+ releaseNotes : desktopFallback (
217+ ( ) => store . general ?. releaseNotes ,
218+ ( ) => desktopConfig ( ) ?. general ?. releaseNotes ,
219+ defaultSettings . general . releaseNotes ,
220+ ) ,
189221 setReleaseNotes ( value : boolean ) {
190222 setStore ( "general" , "releaseNotes" , value )
191223 } ,
192- followup : withFallback (
224+ followup : desktopFallback (
193225 ( ) => ( store . general ?. followup === "queue" ? "steer" : store . general ?. followup ) ,
226+ ( ) =>
227+ desktopConfig ( ) ?. general ?. followup === "queue" ? "steer" : desktopConfig ( ) ?. general ?. followup ,
194228 defaultSettings . general . followup ,
195229 ) ,
196230 setFollowup ( value : "queue" | "steer" ) {
@@ -200,7 +234,11 @@ export const { use: useSettings, provider: SettingsProvider } = createSimpleCont
200234 setShowFileTree ( value : boolean ) {
201235 setStore ( "general" , "showFileTree" , value )
202236 } ,
203- showNavigation : withFallback ( ( ) => store . general ?. showNavigation , defaultSettings . general . showNavigation ) ,
237+ showNavigation : desktopFallback (
238+ ( ) => store . general ?. showNavigation ,
239+ ( ) => desktopConfig ( ) ?. general ?. showNavigation ,
240+ defaultSettings . general . showNavigation ,
241+ ) ,
204242 setShowNavigation ( value : boolean ) {
205243 setStore ( "general" , "showNavigation" , value )
206244 } ,
@@ -212,33 +250,41 @@ export const { use: useSettings, provider: SettingsProvider } = createSimpleCont
212250 setShowStatus ( value : boolean ) {
213251 setStore ( "general" , "showStatus" , value )
214252 } ,
215- showTerminal : withFallback ( ( ) => store . general ?. showTerminal , defaultSettings . general . showTerminal ) ,
253+ showTerminal : desktopFallback (
254+ ( ) => store . general ?. showTerminal ,
255+ ( ) => desktopConfig ( ) ?. general ?. showTerminal ,
256+ defaultSettings . general . showTerminal ,
257+ ) ,
216258 setShowTerminal ( value : boolean ) {
217259 setStore ( "general" , "showTerminal" , value )
218260 } ,
219- showReasoningSummaries : withFallback (
261+ showReasoningSummaries : desktopFallback (
220262 ( ) => store . general ?. showReasoningSummaries ,
263+ ( ) => desktopConfig ( ) ?. general ?. showReasoningSummaries ,
221264 defaultSettings . general . showReasoningSummaries ,
222265 ) ,
223266 setShowReasoningSummaries ( value : boolean ) {
224267 setStore ( "general" , "showReasoningSummaries" , value )
225268 } ,
226- shellToolPartsExpanded : withFallback (
269+ shellToolPartsExpanded : desktopFallback (
227270 ( ) => store . general ?. shellToolPartsExpanded ,
271+ ( ) => desktopConfig ( ) ?. general ?. shellToolPartsExpanded ,
228272 defaultSettings . general . shellToolPartsExpanded ,
229273 ) ,
230274 setShellToolPartsExpanded ( value : boolean ) {
231275 setStore ( "general" , "shellToolPartsExpanded" , value )
232276 } ,
233- editToolPartsExpanded : withFallback (
277+ editToolPartsExpanded : desktopFallback (
234278 ( ) => store . general ?. editToolPartsExpanded ,
279+ ( ) => desktopConfig ( ) ?. general ?. editToolPartsExpanded ,
235280 defaultSettings . general . editToolPartsExpanded ,
236281 ) ,
237282 setEditToolPartsExpanded ( value : boolean ) {
238283 setStore ( "general" , "editToolPartsExpanded" , value )
239284 } ,
240- showSessionProgressBar : withFallback (
285+ showSessionProgressBar : desktopFallback (
241286 ( ) => store . general ?. showSessionProgressBar ,
287+ ( ) => desktopConfig ( ) ?. general ?. showSessionProgressBar ,
242288 defaultSettings . general . showSessionProgressBar ,
243289 ) ,
244290 setShowSessionProgressBar ( value : boolean ) {
@@ -295,7 +341,11 @@ export const { use: useSettings, provider: SettingsProvider } = createSimpleCont
295341 } ,
296342 } ,
297343 permissions : {
298- autoApprove : withFallback ( ( ) => store . permissions ?. autoApprove , defaultSettings . permissions . autoApprove ) ,
344+ autoApprove : desktopFallback (
345+ ( ) => store . permissions ?. autoApprove ,
346+ ( ) => desktopConfig ( ) ?. permissions ?. autoApprove ,
347+ defaultSettings . permissions . autoApprove ,
348+ ) ,
299349 setAutoApprove ( value : boolean ) {
300350 setStore ( "permissions" , "autoApprove" , value )
301351 } ,
@@ -315,30 +365,51 @@ export const { use: useSettings, provider: SettingsProvider } = createSimpleCont
315365 } ,
316366 } ,
317367 sounds : {
318- agentEnabled : withFallback ( ( ) => store . sounds ?. agentEnabled , defaultSettings . sounds . agentEnabled ) ,
368+ agentEnabled : desktopFallback (
369+ ( ) => store . sounds ?. agentEnabled ,
370+ ( ) => desktopConfig ( ) ?. sounds ?. agentEnabled ,
371+ defaultSettings . sounds . agentEnabled ,
372+ ) ,
319373 setAgentEnabled ( value : boolean ) {
320374 setStore ( "sounds" , "agentEnabled" , value )
321375 } ,
322- agent : withFallback ( ( ) => store . sounds ?. agent , defaultSettings . sounds . agent ) ,
376+ agent : desktopFallback (
377+ ( ) => store . sounds ?. agent ,
378+ ( ) => desktopConfig ( ) ?. sounds ?. agent ,
379+ defaultSettings . sounds . agent ,
380+ ) ,
323381 setAgent ( value : string ) {
324382 setStore ( "sounds" , "agent" , value )
325383 } ,
326- permissionsEnabled : withFallback (
384+ permissionsEnabled : desktopFallback (
327385 ( ) => store . sounds ?. permissionsEnabled ,
386+ ( ) => desktopConfig ( ) ?. sounds ?. permissionsEnabled ,
328387 defaultSettings . sounds . permissionsEnabled ,
329388 ) ,
330389 setPermissionsEnabled ( value : boolean ) {
331390 setStore ( "sounds" , "permissionsEnabled" , value )
332391 } ,
333- permissions : withFallback ( ( ) => store . sounds ?. permissions , defaultSettings . sounds . permissions ) ,
392+ permissions : desktopFallback (
393+ ( ) => store . sounds ?. permissions ,
394+ ( ) => desktopConfig ( ) ?. sounds ?. permissions ,
395+ defaultSettings . sounds . permissions ,
396+ ) ,
334397 setPermissions ( value : string ) {
335398 setStore ( "sounds" , "permissions" , value )
336399 } ,
337- errorsEnabled : withFallback ( ( ) => store . sounds ?. errorsEnabled , defaultSettings . sounds . errorsEnabled ) ,
400+ errorsEnabled : desktopFallback (
401+ ( ) => store . sounds ?. errorsEnabled ,
402+ ( ) => desktopConfig ( ) ?. sounds ?. errorsEnabled ,
403+ defaultSettings . sounds . errorsEnabled ,
404+ ) ,
338405 setErrorsEnabled ( value : boolean ) {
339406 setStore ( "sounds" , "errorsEnabled" , value )
340407 } ,
341- errors : withFallback ( ( ) => store . sounds ?. errors , defaultSettings . sounds . errors ) ,
408+ errors : desktopFallback (
409+ ( ) => store . sounds ?. errors ,
410+ ( ) => desktopConfig ( ) ?. sounds ?. errors ,
411+ defaultSettings . sounds . errors ,
412+ ) ,
342413 setErrors ( value : string ) {
343414 setStore ( "sounds" , "errors" , value )
344415 } ,
0 commit comments