@@ -5,7 +5,6 @@ import (
55 "context"
66 "encoding/json"
77 "fmt"
8− "io"
98 "log/slog"
109 "maps"
1110 "os"
@@ -25,25 +24,11 @@ import (
2524 "github.com/charmbracelet/crush/internal/home"
2625 "github.com/charmbracelet/crush/internal/log"
2726 powernapConfig "github.com/charmbracelet/x/powernap/pkg/config"
27+ "github.com/qjebbs/go-jsons"
2828)
2929
3030const defaultCatwalkURL = "https://catwalk.charm.sh"
3131
32−// LoadReader config via io.Reader.
33−func LoadReader(fd io.Reader) (*Config, error) {
34− data, err := io.ReadAll(fd)
35− if err != nil {
36− return nil, err
37− }
38−
39− var config Config
40− err = json.Unmarshal(data, &config)
41− if err != nil {
42− return nil, err
43− }
44− return &config, err
45−}
46−
4732// Load loads the configuration from the default paths.
4833func Load(workingDir, dataDir string, debug bool) (*Config, error) {
4934 configPaths := lookupConfigs(workingDir)
@@ -632,35 +617,39 @@ func lookupConfigs(cwd string) []string {
632617}
633618
634619func loadFromConfigPaths(configPaths []string) (*Config, error) {
635− var configs []io.Reader
620+ var configs [][]byte
636621
637622 for _, path := range configPaths {
638− fd, err := os.Open(path)
623+ data, err := os.ReadFile(path)
639624 if err != nil {
640625 if os.IsNotExist(err) {
641626 continue
642627 }
643628 return nil, fmt.Errorf("failed to open config file %s: %w", path, err)
644629 }
645− defer fd.Close()
646−
647− configs = append(configs, fd)
630+ if len(data) == 0 {
631+ continue
632+ }
633+ configs = append(configs, data)
648634 }
649635
650− return loadFromReaders(configs)
636+ return loadFromBytes(configs)
651637}
652638
653−func loadFromReaders(readers []io.Reader) (*Config, error) {
654− if len(readers) == 0 {
639+func loadFromBytes(configs [][]byte) (*Config, error) {
640+ if len(configs) == 0 {
655641 return &Config{}, nil
656642 }
657643
658− merged, err := Merge(readers)
644+ data, err := jsons.Merge(configs)
659645 if err != nil {
660− return nil, fmt.Errorf("failed to merge configuration readers: %w", err)
646+ return nil, err
661647 }
662−
663− return LoadReader(merged)
648+ var config Config
649+ if err := json.Unmarshal(data, &config); err != nil {
650+ return nil, err
651+ }
652+ return &config, nil
664653}
665654
666655func hasVertexCredentials(env env.Env) bool {