0db2ff264571081b624f5baeef71886ed91e96f6

Author
Ayman Bagabas <ayman.bagabas@gmail.com>
Committer
Ayman Bagabas <ayman.bagabas@gmail.com>
Date

Message

config: move server config into its own package

Diff

 1diff --git a/config/config.go b/config/config.go
 2new file mode 100644
 3index 0000000000000000000000000000000000000000..1bb7908261b7a3e4e1aa9eeaf8edef4a8bd97705
 4--- /dev/null
 5+++ b/config/config.go
 6@@ -0,0 +1,42 @@
 7+package config
 8+
 9+import (
10+	"log"
11+
12+	"github.com/charmbracelet/soft/internal/git"
13+	"github.com/charmbracelet/soft/stats"
14+	"github.com/meowgorithm/babyenv"
15+)
16+
17+// Config is the configuration for the soft-serve.
18+type Config struct {
19+	Host            string `env:"SOFT_SERVE_HOST" default:""`
20+	Port            int    `env:"SOFT_SERVE_PORT" default:"23231"`
21+	KeyPath         string `env:"SOFT_SERVE_KEY_PATH" default:".ssh/soft_serve_server_ed25519"`
22+	RepoPath        string `env:"SOFT_SERVE_REPO_PATH" default:".repos"`
23+	InitialAdminKey string `env:"SOFT_SERVE_INITIAL_ADMIN_KEY" default:""`
24+	RepoSource      *git.RepoSource
25+	Stats           stats.Stats
26+}
27+
28+// DefaultConfig returns a Config with the values populated with the defaults
29+// or specified environment variables.
30+func DefaultConfig() *Config {
31+	var scfg Config
32+	err := babyenv.Parse(&scfg)
33+	if err != nil {
34+		log.Fatalln(err)
35+	}
36+	rs := git.NewRepoSource(scfg.RepoPath)
37+	return scfg.WithRepoSource(rs).WithStats(stats.NewStats())
38+}
39+
40+func (cfg *Config) WithStats(s stats.Stats) *Config {
41+	cfg.Stats = s
42+	return cfg
43+}
44+
45+func (cfg *Config) WithRepoSource(rs *git.RepoSource) *Config {
46+	cfg.RepoSource = rs
47+	return cfg
48+}