(Feat): Initial Commit, Termdoku
This commit is contained in:
68
internal/config/config.go
Normal file
68
internal/config/config.go
Normal file
@@ -0,0 +1,68 @@
|
||||
package config
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"io/fs"
|
||||
"os"
|
||||
"path/filepath"
|
||||
|
||||
"gopkg.in/yaml.v3"
|
||||
)
|
||||
|
||||
type Config struct {
|
||||
Theme string `yaml:"theme"`
|
||||
AutoCheck bool `yaml:"autoCheck"`
|
||||
TimerEnabled bool `yaml:"timerEnabled"`
|
||||
Bindings map[string][]string `yaml:"bindings"`
|
||||
}
|
||||
|
||||
func Default() Config {
|
||||
return Config{
|
||||
Theme: "dark",
|
||||
AutoCheck: true,
|
||||
TimerEnabled: true,
|
||||
Bindings: map[string][]string{},
|
||||
}
|
||||
}
|
||||
|
||||
func path() (string, error) {
|
||||
h, err := os.UserHomeDir()
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return filepath.Join(h, ".termdoku", "config.yaml"), nil
|
||||
}
|
||||
|
||||
func Load() (Config, error) {
|
||||
cfg := Default()
|
||||
p, err := path()
|
||||
if err != nil {
|
||||
return cfg, err
|
||||
}
|
||||
b, err := os.ReadFile(p)
|
||||
if err != nil {
|
||||
if errors.Is(err, fs.ErrNotExist) {
|
||||
return cfg, nil
|
||||
}
|
||||
return cfg, err
|
||||
}
|
||||
if err := yaml.Unmarshal(b, &cfg); err != nil {
|
||||
return cfg, err
|
||||
}
|
||||
return cfg, nil
|
||||
}
|
||||
|
||||
func Save(cfg Config) error {
|
||||
p, err := path()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if err := os.MkdirAll(filepath.Dir(p), 0o755); err != nil {
|
||||
return err
|
||||
}
|
||||
data, err := yaml.Marshal(cfg)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return os.WriteFile(p, data, 0o644)
|
||||
}
|
||||
Reference in New Issue
Block a user