// Copyright 2024 Matthew Rich . All rights reserved. package config import ( "context" "encoding/json" "net/url" "fmt" "decl/internal/data" "decl/internal/folio" "runtime" "decl/internal/system" ) // Collects facts about the system var ( buildValues = map[string]any{ "GOOS": runtime.GOOS, "GOARCH": runtime.GOARCH, } ) func init() { folio.DocumentRegistry.ConfigurationTypes.Register([]string{"system"}, func(u *url.URL) data.Configuration { s := NewSystem() return s }) } type System Generic[any] func NewSystem() *System { s := make(System) for k, v := range buildValues { s[k] = v } s.CurrentUser() s["importpath"] = []string { "/etc/jx/lib", } return &s } func (s *System) CurrentUser() { processUser := system.ProcessUser() processGroup := system.ProcessGroup(processUser) (*s)["user"] = processUser.Username (*s)["gecos"] = processUser.Name (*s)["home"] = processUser.HomeDir (*s)["uid"] = processUser.Uid (*s)["group"] = processGroup.Name (*s)["gid"] = processUser.Gid } func (s *System) URI() string { return fmt.Sprintf("%s://%s", s.Type(), "") } func (s *System) SetURI(uri string) error { return nil } func (s *System) SetParsedURI(uri data.URIParser) error { return nil } func (s *System) Clone() data.Configuration { jsonSystem, _ := json.Marshal(s) clone := NewSystem() if unmarshalErr := json.Unmarshal(jsonSystem, clone); unmarshalErr != nil { panic(unmarshalErr) } return clone } func (s *System) Has(key string) (ok bool) { _, ok = (*s)[key] return } func (s *System) Type() string { return "system" } func (s *System) Read(context.Context) ([]byte, error) { return nil, nil } func (s *System) GetValue(name string) (result any, err error) { var ok bool if result, ok = (*s)[name]; !ok { err = data.ErrUnknownConfigurationKey } return }