diff --git a/configurator/configurator.go b/configurator/configurator.go index b2a3606..1e51031 100644 --- a/configurator/configurator.go +++ b/configurator/configurator.go @@ -2,7 +2,7 @@ package configurator import ( "fmt" - "path" + "strings" "github.com/joshmedeski/sesh/model" "github.com/joshmedeski/sesh/oswrap" @@ -29,13 +29,21 @@ func (c *RealConfigurator) configFilePath(rootDir string) string { return c.path.Join(rootDir, "sesh", "sesh.toml") } +func (c *RealConfigurator) fullImportPath(homeDir, importPath string) (string, error) { + if !strings.HasPrefix(importPath, "~") { + return c.path.Abs(importPath) + } + + return c.path.Join(homeDir, importPath[1:]), nil +} + func (c *RealConfigurator) getConfigFileFromUserConfigDir() (model.Config, error) { config := model.Config{} userHomeDir, err := c.os.UserHomeDir() if err != nil { return config, fmt.Errorf("couldn't get user config dir: %q", err) } - userConfigDir := path.Join(userHomeDir, ".config") + userConfigDir := c.path.Join(userHomeDir, ".config") configFilePath := c.configFilePath(userConfigDir) file, _ := c.os.ReadFile(configFilePath) // TODO: add to debugging logs @@ -46,6 +54,26 @@ func (c *RealConfigurator) getConfigFileFromUserConfigDir() (model.Config, error if err != nil { return config, fmt.Errorf("couldn't unmarshal config file: %q", err) } + + for _, importPath := range config.ImportPaths { + importFilePath, err := c.fullImportPath(userHomeDir, importPath) + if err != nil { + return config, fmt.Errorf("couldn't get full import path: %q", err) + } + + importFile, err := c.os.ReadFile(importFilePath) + if err != nil { + return config, fmt.Errorf("couldn't read import file %s: %q", importFilePath, err) + } + + importConfig := model.Config{} + if err := toml.Unmarshal(importFile, &importConfig); err != nil { + return config, fmt.Errorf("couldn't unmarshal import file %s: %q", importFilePath, err) + } + + config.SessionConfigs = append(config.SessionConfigs, importConfig.SessionConfigs...) + } + return config, nil }