diff --git a/config/category.go b/config/category.go index 308079a..188919b 100644 --- a/config/category.go +++ b/config/category.go @@ -99,7 +99,7 @@ func DefaultCategories() map[ModelCategory]CategoryConfig { } // GetCategoryRegistry returns the global category registry. -// It loads overrides from ~/.hawk/categories.json if present. +// It loads overrides from Hawk user config if present. func GetCategoryRegistry() *CategoryRegistry { registryOnce.Do(func() { globalRegistry = &CategoryRegistry{ @@ -117,11 +117,15 @@ func ResetCategoryRegistry() { } func (r *CategoryRegistry) loadOverrides() { - home, err := os.UserHomeDir() - if err != nil { - return + configDir := os.Getenv("HAWK_CONFIG_DIR") + if configDir == "" { + dir, err := os.UserConfigDir() + if err != nil || dir == "" { + return + } + configDir = filepath.Join(dir, "hawk") } - path := filepath.Join(home, ".hawk", "categories.json") + path := filepath.Join(configDir, "categories.json") data, err := os.ReadFile(path) if err != nil { return // file not found is fine diff --git a/config/provider_env.go b/config/provider_env.go index afdd6bc..0ec48dd 100644 --- a/config/provider_env.go +++ b/config/provider_env.go @@ -11,7 +11,7 @@ import ( "github.com/GrayCodeAI/eyrie/catalog" ) -// ProviderConfig mirrors ~/.hawk/provider.json. +// ProviderConfig mirrors the Hawk provider.json file. type ProviderConfig struct { ConfigVersion int `json:"config_version,omitempty"` Version string `json:"_version,omitempty"` @@ -314,8 +314,10 @@ func GetProviderConfigDir() string { if d := os.Getenv("HAWK_CONFIG_DIR"); d != "" { return d } - home, _ := os.UserHomeDir() - return filepath.Join(home, ".hawk") + if d, err := os.UserConfigDir(); err == nil && d != "" { + return filepath.Join(d, "hawk") + } + panic("hawk provider config: user config directory unavailable") } // GetProviderConfigPath returns the full path to provider.json. diff --git a/config/provider_env_test.go b/config/provider_env_test.go index b34422d..9aa1b64 100644 --- a/config/provider_env_test.go +++ b/config/provider_env_test.go @@ -119,11 +119,11 @@ func TestGetProviderConfigDir(t *testing.T) { t.Errorf("expected %q, got %q", dir, got) } - // Test without env var (falls back to ~/.hawk) + // Test without env var (uses OS config dir when available) os.Unsetenv("HAWK_CONFIG_DIR") got = GetProviderConfigDir() - if !strings.HasSuffix(got, ".hawk") { - t.Errorf("expected path ending in .hawk, got %q", got) + if !strings.HasSuffix(got, filepath.Join("hawk")) { + t.Errorf("expected path ending in hawk, got %q", got) } }