A vibe coded tangled fork which supports pijul.
1package config
2
3import (
4 "context"
5 "fmt"
6 "path/filepath"
7 "time"
8
9 "github.com/bluesky-social/indigo/atproto/syntax"
10 "github.com/sethvargo/go-envconfig"
11)
12
13type Server struct {
14 ListenAddr string `env:"LISTEN_ADDR, default=0.0.0.0:6555"`
15 Hostname string `env:"HOSTNAME, required"`
16 TapUrl string `env:"TAP_URL, required"`
17 PlcUrl string `env:"PLC_URL, default=https://plc.directory"`
18 Dev bool `env:"DEV, default=false"`
19 Owner syntax.DID `env:"OWNER, required"`
20 Secrets Secrets `env:",prefix=SECRETS_"`
21 LogDir string `env:"LOG_DIR, default=/var/log/spindle"`
22 DataDir string `env:"DATA_DIR, default=/var/lib/spindle"`
23 QueueSize int `env:"QUEUE_SIZE, default=100"`
24 MaxJobCount int `env:"MAX_JOB_COUNT, default=2"` // max number of jobs that run at a time
25}
26
27func (s Server) Did() syntax.DID {
28 return syntax.DID(fmt.Sprintf("did:web:%s", s.Hostname))
29}
30
31func (s Server) RepoDir() string {
32 return filepath.Join(s.DataDir, "repos")
33}
34
35func (s Server) DBPath() string {
36 return filepath.Join(s.DataDir, "spindle.db")
37}
38
39type Secrets struct {
40 Provider string `env:"PROVIDER, default=sqlite"`
41 OpenBao OpenBaoConfig `env:",prefix=OPENBAO_"`
42}
43
44type OpenBaoConfig struct {
45 ProxyAddr string `env:"PROXY_ADDR, default=http://127.0.0.1:8200"`
46 Mount string `env:"MOUNT, default=spindle"`
47}
48
49type NixeryPipelines struct {
50 Nixery string `env:"NIXERY, default=nixery.tangled.sh"`
51 WorkflowTimeout time.Duration `env:"WORKFLOW_TIMEOUT, default=5m"`
52}
53
54type Config struct {
55 Server Server `env:",prefix=SPINDLE_SERVER_"`
56 NixeryPipelines NixeryPipelines `env:",prefix=SPINDLE_NIXERY_PIPELINES_"`
57}
58
59func Load(ctx context.Context) (*Config, error) {
60 var cfg Config
61 err := envconfig.Process(ctx, &cfg)
62 if err != nil {
63 return nil, err
64 }
65
66 return &cfg, nil
67}