From db043c375866dcf9246e8bdb36677439168de482 Mon Sep 17 00:00:00 2001 From: Andrey Nering Date: Tue, 24 Mar 2026 15:09:05 -0300 Subject: [PATCH] fix: on windows, also load skills from `$HOME/.config/crush/skills` --- internal/config/load.go | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/internal/config/load.go b/internal/config/load.go index 0c63950e84434d7bebd20e39c25734541027a4d9..e29e0cc82dbdf73b8038b54bcffc7c112fa150ff 100644 --- a/internal/config/load.go +++ b/internal/config/load.go @@ -796,23 +796,31 @@ func GlobalSkillsDirs() []string { return []string{crushSkills} } - // Determine the base config directory. - var configBase string - if xdgConfigHome := os.Getenv("XDG_CONFIG_HOME"); xdgConfigHome != "" { - configBase = xdgConfigHome - } else if runtime.GOOS == "windows" { - configBase = cmp.Or( + configHome := cmp.Or( + os.Getenv("XDG_CONFIG_HOME"), + filepath.Join(home.Dir(), ".config"), + ) + + paths := []string{ + filepath.Join(configHome, appName, "skills"), + filepath.Join(configHome, "agents", "skills"), + } + + // On Windows, also load from app data on top of `$HOME/.config/crush`. + // This is here mostly for backwards compatibility. + if runtime.GOOS == "windows" { + appData := cmp.Or( os.Getenv("LOCALAPPDATA"), filepath.Join(os.Getenv("USERPROFILE"), "AppData", "Local"), ) - } else { - configBase = filepath.Join(home.Dir(), ".config") + paths = append( + paths, + filepath.Join(appData, appName, "skills"), + filepath.Join(appData, "agents", "skills"), + ) } - return []string{ - filepath.Join(configBase, appName, "skills"), - filepath.Join(configBase, "agents", "skills"), - } + return paths } func isAppleTerminal() bool { return os.Getenv("TERM_PROGRAM") == "Apple_Terminal" }