mirror of
https://github.com/browseros-ai/BrowserOS.git
synced 2026-05-13 23:53:25 +00:00
* fix: clean-up bdev * feat: add workspace-centric bdev cli * fix: address review comments for 0326-bdev_cli_redesign * fix: address review feedback for PR #585 * fix: address review feedback for PR #585
64 lines
1.3 KiB
Go
64 lines
1.3 KiB
Go
package workspace
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
|
|
"gopkg.in/yaml.v3"
|
|
)
|
|
|
|
type Config struct {
|
|
Version int `yaml:"version" json:"version"`
|
|
PatchesRepo string `yaml:"patches_repo,omitempty" json:"patches_repo,omitempty"`
|
|
}
|
|
|
|
func ConfigDir() string {
|
|
if xdg := os.Getenv("XDG_CONFIG_HOME"); xdg != "" {
|
|
return filepath.Join(xdg, "bdev")
|
|
}
|
|
home, _ := os.UserHomeDir()
|
|
return filepath.Join(home, ".config", "bdev")
|
|
}
|
|
|
|
func ConfigPath() string {
|
|
return filepath.Join(ConfigDir(), "config.yaml")
|
|
}
|
|
|
|
func RegistryPath() string {
|
|
return filepath.Join(ConfigDir(), "workspaces.yaml")
|
|
}
|
|
|
|
func LoadConfig() (*Config, error) {
|
|
data, err := os.ReadFile(ConfigPath())
|
|
if err != nil {
|
|
if os.IsNotExist(err) {
|
|
return &Config{Version: 1}, nil
|
|
}
|
|
return nil, err
|
|
}
|
|
var cfg Config
|
|
if err := yaml.Unmarshal(data, &cfg); err != nil {
|
|
return nil, fmt.Errorf("parse config: %w", err)
|
|
}
|
|
if cfg.Version == 0 {
|
|
cfg.Version = 1
|
|
}
|
|
return &cfg, nil
|
|
}
|
|
|
|
func SaveConfig(cfg *Config) error {
|
|
if cfg.Version == 0 {
|
|
cfg.Version = 1
|
|
}
|
|
if err := os.MkdirAll(ConfigDir(), 0o755); err != nil {
|
|
return err
|
|
}
|
|
body, err := yaml.Marshal(cfg)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
header := "# bdev configuration\n\n"
|
|
return os.WriteFile(ConfigPath(), append([]byte(header), body...), 0o644)
|
|
}
|