forked from
tangled.org/core
Monorepo for Tangled — https://tangled.org
1package config
2
3import (
4 "context"
5 "fmt"
6
7 "github.com/bluesky-social/indigo/atproto/syntax"
8 "github.com/sethvargo/go-envconfig"
9)
10
11type Server struct {
12 ListenAddr string `env:"LISTEN_ADDR, default=0.0.0.0:6555"`
13 DBPath string `env:"DB_PATH, default=spindle.db"`
14 Hostname string `env:"HOSTNAME, required"`
15 JetstreamEndpoint string `env:"JETSTREAM_ENDPOINT, default=wss://jetstream1.us-west.bsky.network/subscribe"`
16 PlcUrl string `env:"PLC_URL, default=https://plc.directory"`
17 Dev bool `env:"DEV, default=false"`
18 Owner string `env:"OWNER, required"`
19 Secrets Secrets `env:",prefix=SECRETS_"`
20 LogDir string `env:"LOG_DIR, default=/var/log/spindle"`
21 QueueSize int `env:"QUEUE_SIZE, default=100"`
22 MaxJobCount int `env:"MAX_JOB_COUNT, default=2"` // max number of jobs that run at a time
23}
24
25func (s Server) Did() syntax.DID {
26 return syntax.DID(fmt.Sprintf("did:web:%s", s.Hostname))
27}
28
29type Secrets struct {
30 Provider string `env:"PROVIDER, default=sqlite"`
31 OpenBao OpenBaoConfig `env:",prefix=OPENBAO_"`
32}
33
34type OpenBaoConfig struct {
35 ProxyAddr string `env:"PROXY_ADDR, default=http://127.0.0.1:8200"`
36 Mount string `env:"MOUNT, default=spindle"`
37}
38
39type NixeryPipelines struct {
40 Nixery string `env:"NIXERY, default=nixery.tangled.sh"`
41 WorkflowTimeout string `env:"WORKFLOW_TIMEOUT, default=5m"`
42}
43
44type Config struct {
45 Server Server `env:",prefix=SPINDLE_SERVER_"`
46 NixeryPipelines NixeryPipelines `env:",prefix=SPINDLE_NIXERY_PIPELINES_"`
47}
48
49func Load(ctx context.Context) (*Config, error) {
50 var cfg Config
51 err := envconfig.Process(ctx, &cfg)
52 if err != nil {
53 return nil, err
54 }
55
56 return &cfg, nil
57}