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+}