claw_spawn/infrastructure/
config.rs1use config::{Config, ConfigError, Environment, File};
2use serde::Deserialize;
3
4#[derive(Debug, Deserialize, Clone)]
5pub struct AppConfig {
6 pub database_url: String,
7 pub digitalocean_token: String,
8 pub encryption_key: String,
9 pub server_host: String,
10 pub server_port: u16,
11 pub openclaw_image: String,
12 pub control_plane_url: String,
13
14 pub customizer_repo_url: String,
16 pub customizer_ref: String,
17 pub customizer_workspace_dir: String,
18 pub customizer_agent_name: String,
19 pub customizer_owner_name: String,
20 pub customizer_skip_qmd: bool,
21 pub customizer_skip_cron: bool,
22 pub customizer_skip_git: bool,
23 pub customizer_skip_heartbeat: bool,
24
25 pub toolchain_node_major: u8,
27 pub toolchain_install_pnpm: bool,
28 pub toolchain_pnpm_version: String,
29 pub toolchain_install_rust: bool,
30 pub toolchain_rust_toolchain: String,
31 pub toolchain_extra_apt_packages: String,
32 pub toolchain_global_npm_packages: String,
33 pub toolchain_cargo_crates: String,
34}
35
36impl AppConfig {
37 pub fn from_env() -> Result<Self, ConfigError> {
38 let config = Config::builder()
39 .add_source(File::with_name("config/default").required(false))
40 .add_source(File::with_name("config/local").required(false))
41 .add_source(Environment::with_prefix("CLAW").separator("_"))
42 .set_default("server_host", "0.0.0.0")?
43 .set_default("server_port", 8080)?
44 .set_default("openclaw_image", "ubuntu-22-04-x64")?
45 .set_default("control_plane_url", "https://api.example.com")?
46 .set_default(
48 "customizer_repo_url",
49 "https://github.com/janebot2026/janebot-cli.git",
50 )?
51 .set_default("customizer_ref", "4b170b4aa31f79bda84f7383b3992ca8681d06d3")?
52 .set_default("customizer_workspace_dir", "/opt/openclaw/workspace")?
53 .set_default("customizer_agent_name", "Jane")?
54 .set_default("customizer_owner_name", "Cedros")?
55 .set_default("customizer_skip_qmd", true)?
56 .set_default("customizer_skip_cron", true)?
57 .set_default("customizer_skip_git", true)?
58 .set_default("customizer_skip_heartbeat", true)?
59 .set_default("toolchain_node_major", 20)?
61 .set_default("toolchain_install_pnpm", true)?
62 .set_default("toolchain_pnpm_version", "")?
63 .set_default("toolchain_install_rust", true)?
64 .set_default("toolchain_rust_toolchain", "stable")?
65 .set_default("toolchain_extra_apt_packages", "")?
66 .set_default("toolchain_global_npm_packages", "")?
67 .set_default("toolchain_cargo_crates", "")?
68 .build()?;
69
70 config.try_deserialize()
71 }
72}