69 lines
1.4 KiB
Go
69 lines
1.4 KiB
Go
package config
|
|
|
|
import (
|
|
"encoding/json"
|
|
"os"
|
|
"path/filepath"
|
|
)
|
|
|
|
// Config holds application configuration
|
|
type Config struct {
|
|
Model string `json:"model"`
|
|
SystemPrompt string `json:"system_prompt"`
|
|
History []string `json:"history"`
|
|
}
|
|
|
|
// LoadConfig loads the configuration from disk
|
|
func LoadConfig() (*Config, error) {
|
|
homeDir, err := os.UserHomeDir()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
configDir := filepath.Join(homeDir, ".config", "lazykimi")
|
|
if err := os.MkdirAll(configDir, 0755); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
configFile := filepath.Join(configDir, "config.json")
|
|
if _, err := os.Stat(configFile); os.IsNotExist(err) {
|
|
// Create default config
|
|
config := &Config{
|
|
Model: "kimi-k1.5-preview-chat",
|
|
SystemPrompt: "You are a helpful assistant.",
|
|
History: []string{},
|
|
}
|
|
return config, config.Save()
|
|
}
|
|
|
|
data, err := os.ReadFile(configFile)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
var config Config
|
|
if err := json.Unmarshal(data, &config); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &config, nil
|
|
}
|
|
|
|
// Save persists configuration to disk
|
|
func (c *Config) Save() error {
|
|
homeDir, err := os.UserHomeDir()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
configDir := filepath.Join(homeDir, ".config", "lazykimi")
|
|
configFile := filepath.Join(configDir, "config.json")
|
|
|
|
data, err := json.MarshalIndent(c, "", " ")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return os.WriteFile(configFile, data, 0644)
|
|
}
|