package config import ( "encoding/json" "os" "path/filepath" ) type fileSettings struct { Klogging *bool `json:"klogging,omitempty"` KeylogEnabled *bool `json:"keylog_enabled,omitempty"` // legacy } func settingsPath() (string, error) { dir, err := InstallDir() if err != nil { return "", err } return filepath.Join(dir, SettingsFileName), nil } func readKeylogPref() (bool, bool) { s, err := loadFileSettings() if err != nil { return false, false } if s.Klogging != nil { return *s.Klogging, true } if s.KeylogEnabled != nil { return *s.KeylogEnabled, true } return false, false } func SetKeylogEnabled(on bool) error { s, err := loadFileSettings() if err != nil && !os.IsNotExist(err) { s = fileSettings{} } s.Klogging = &on s.KeylogEnabled = nil return saveFileSettings(s) } func loadFileSettings() (fileSettings, error) { path, err := settingsPath() if err != nil { return fileSettings{}, err } raw, err := os.ReadFile(path) if err != nil { return fileSettings{}, err } var s fileSettings if err := json.Unmarshal(raw, &s); err != nil { return fileSettings{}, err } return s, nil } func saveFileSettings(s fileSettings) error { path, err := settingsPath() if err != nil { return err } if err := os.MkdirAll(filepath.Dir(path), 0o700); err != nil { return err } raw, err := json.Marshal(s) if err != nil { return err } return os.WriteFile(path, append(raw, '\n'), 0o600) }