11import { createStore } from "solid-js/store"
2- import { createMemo } from "solid-js"
2+ import { createEffect , createMemo } from "solid-js"
33import { createSimpleContext } from "@opencode-ai/ui/context"
44import { persisted } from "@/utils/persist"
55
@@ -9,6 +9,12 @@ export interface NotificationSettings {
99 errors : boolean
1010}
1111
12+ export interface SoundSettings {
13+ agent : string
14+ permissions : string
15+ errors : string
16+ }
17+
1218export interface Settings {
1319 general : {
1420 autoSave : boolean
@@ -22,6 +28,7 @@ export interface Settings {
2228 autoApprove : boolean
2329 }
2430 notifications : NotificationSettings
31+ sounds : SoundSettings
2532}
2633
2734const defaultSettings : Settings = {
@@ -37,16 +44,47 @@ const defaultSettings: Settings = {
3744 autoApprove : false ,
3845 } ,
3946 notifications : {
40- agent : false ,
41- permissions : false ,
47+ agent : true ,
48+ permissions : true ,
4249 errors : false ,
4350 } ,
51+ sounds : {
52+ agent : "staplebops-01" ,
53+ permissions : "staplebops-02" ,
54+ errors : "nope-03" ,
55+ } ,
56+ }
57+
58+ const monoFallback =
59+ 'ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace'
60+
61+ const monoFonts : Record < string , string > = {
62+ "ibm-plex-mono" : `"IBM Plex Mono", "IBM Plex Mono Fallback", ${ monoFallback } ` ,
63+ "cascadia-code" : `"Cascadia Code Nerd Font", "IBM Plex Mono", "IBM Plex Mono Fallback", ${ monoFallback } ` ,
64+ "fira-code" : `"Fira Code Nerd Font", "IBM Plex Mono", "IBM Plex Mono Fallback", ${ monoFallback } ` ,
65+ hack : `"Hack Nerd Font", "IBM Plex Mono", "IBM Plex Mono Fallback", ${ monoFallback } ` ,
66+ inconsolata : `"Inconsolata Nerd Font", "IBM Plex Mono", "IBM Plex Mono Fallback", ${ monoFallback } ` ,
67+ "intel-one-mono" : `"Intel One Mono Nerd Font", "IBM Plex Mono", "IBM Plex Mono Fallback", ${ monoFallback } ` ,
68+ "jetbrains-mono" : `"JetBrains Mono Nerd Font", "IBM Plex Mono", "IBM Plex Mono Fallback", ${ monoFallback } ` ,
69+ "meslo-lgs" : `"Meslo LGS Nerd Font", "IBM Plex Mono", "IBM Plex Mono Fallback", ${ monoFallback } ` ,
70+ "roboto-mono" : `"Roboto Mono Nerd Font", "IBM Plex Mono", "IBM Plex Mono Fallback", ${ monoFallback } ` ,
71+ "source-code-pro" : `"Source Code Pro Nerd Font", "IBM Plex Mono", "IBM Plex Mono Fallback", ${ monoFallback } ` ,
72+ "ubuntu-mono" : `"Ubuntu Mono Nerd Font", "IBM Plex Mono", "IBM Plex Mono Fallback", ${ monoFallback } ` ,
73+ }
74+
75+ export function monoFontFamily ( font : string | undefined ) {
76+ return monoFonts [ font ?? defaultSettings . appearance . font ] ?? monoFonts [ defaultSettings . appearance . font ]
4477}
4578
4679export const { use : useSettings , provider : SettingsProvider } = createSimpleContext ( {
4780 name : "Settings" ,
4881 init : ( ) => {
49- const [ store , setStore , _ , ready ] = persisted ( "settings.v1" , createStore < Settings > ( defaultSettings ) )
82+ const [ store , setStore , _ , ready ] = persisted ( "settings.v3" , createStore < Settings > ( defaultSettings ) )
83+
84+ createEffect ( ( ) => {
85+ if ( typeof document === "undefined" ) return
86+ document . documentElement . style . setProperty ( "--font-family-mono" , monoFontFamily ( store . appearance ?. font ) )
87+ } )
5088
5189 return {
5290 ready,
@@ -98,6 +136,20 @@ export const { use: useSettings, provider: SettingsProvider } = createSimpleCont
98136 setStore ( "notifications" , "errors" , value )
99137 } ,
100138 } ,
139+ sounds : {
140+ agent : createMemo ( ( ) => store . sounds ?. agent ?? defaultSettings . sounds . agent ) ,
141+ setAgent ( value : string ) {
142+ setStore ( "sounds" , "agent" , value )
143+ } ,
144+ permissions : createMemo ( ( ) => store . sounds ?. permissions ?? defaultSettings . sounds . permissions ) ,
145+ setPermissions ( value : string ) {
146+ setStore ( "sounds" , "permissions" , value )
147+ } ,
148+ errors : createMemo ( ( ) => store . sounds ?. errors ?? defaultSettings . sounds . errors ) ,
149+ setErrors ( value : string ) {
150+ setStore ( "sounds" , "errors" , value )
151+ } ,
152+ } ,
101153 }
102154 } ,
103155} )
0 commit comments