diff --git a/goolinux.json b/goolinux.json index 2a5ed29..abf7716 100644 --- a/goolinux.json +++ b/goolinux.json @@ -1,6 +1,7 @@ { "system": { + "base": "alpine", "packages": [ "tmux", "vim", "ripgrep", "go" diff --git a/main.go b/main.go index fe51750..bb7f266 100644 --- a/main.go +++ b/main.go @@ -20,6 +20,7 @@ type Config struct { } type SystemConfig struct { + Base string Packages []string } @@ -44,9 +45,12 @@ type ServiceConfig struct { func main() { var err error var config Config + var systemConfig Config + // Read user config file file, err := os.ReadFile("goolinux.json") if err != nil { + fmt.Println("Cannot read user config file") fmt.Println(err) return } @@ -57,6 +61,26 @@ func main() { return } + // Read system "base" config file if it exists + if config.System.Base != "" { + path := "services/" + config.System.Base + ".json" + file, err = os.ReadFile(path) + if err != nil { + fmt.Println("Cannot read system base config file") + fmt.Println(err) + return + } + + err = hjson.Unmarshal(file, &systemConfig) + if err != nil { + fmt.Println(err) + return + } + + // Merge base system config layer + mergo.Merge(&config, systemConfig, mergo.WithOverride) + } + // Parse services for name, service := range config.Services { var b strings.Builder diff --git a/services/alpine.json b/services/alpine.json new file mode 100644 index 0000000..194e329 --- /dev/null +++ b/services/alpine.json @@ -0,0 +1,13 @@ +{ + +system: { + base: "alpine", + packages: [], +} + +services: { + ssh: { enable: "true" }, + firewall: { enable: "true" }, +} + +} diff --git a/services/firewall/netavark.template b/services/firewall/netavark.template index 7c521e1..1802ac3 100644 --- a/services/firewall/netavark.template +++ b/services/firewall/netavark.template @@ -1,2 +1,4 @@ +# https://fedoraproject.org/wiki/Changes/NetavarkNftablesDefault + [network] firewall_driver="nftables" diff --git a/services/proxy/caddy.template b/services/proxy/caddy.template index cb936b1..f10357f 100644 --- a/services/proxy/caddy.template +++ b/services/proxy/caddy.template @@ -1,6 +1,8 @@ +# https://caddyserver.com/docs/caddyfile/options { } +# https://caddyserver.com/docs/caddyfile/patterns {{range .Config.proxy}} {{.domain}} { reverse_proxy localhost:{{.port}}