package config import ( "os" "path/filepath" "strings" "github.com/joho/godotenv" ) type Config struct { Addr string DataDir string SessionKey string // random string BaseURL string // external URL used in clone instructions, e.g. https://gitgud.ikuro.dev } func (c Config) DBPath() string { return filepath.Join(c.DataDir, "app.db") } func (c Config) ReposDir() string { return filepath.Join(c.DataDir, "repos") } func Load() (Config, error) { // Load .env if present; in containers config comes from real env vars. _ = godotenv.Load() dataDir, err := filepath.Abs(os.Getenv("GITGUD_DATA_DIR")) if err != nil { return Config{}, err } baseURL := os.Getenv("GITGUD_BASE_URL") if baseURL == "" { addr := os.Getenv("GITGUD_ADDR") if strings.HasPrefix(addr, ":") { addr = "localhost" + addr } baseURL = "http://" + addr } baseURL = strings.TrimRight(baseURL, "/") return Config{ Addr: os.Getenv("GITGUD_ADDR"), DataDir: dataDir, SessionKey: os.Getenv("GITGUD_SESSION_KEY"), BaseURL: baseURL, }, nil }