aboutsummaryrefslogtreecommitdiff
path: root/src/environment.rs
blob: dd101716c9bebb4862de24fb830e65e0fcfcf5f3 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
use std::sync::LazyLock;

pub static ENVIRONMENT: LazyLock<Environment> =
  LazyLock::new(Environment::from_environment);

pub struct Environment {
  pub root:                       String,
  pub css_external:               Option<String>,
  pub primary_colour:             Option<String>,
  pub favicon_external:           Option<String>,
  pub mathjax:                    bool,
  pub head:                       Option<String>,
  pub header:                     Option<String>,
  pub plain_text_route:           Option<String>,
  pub condense_links:             Vec<String>,
  pub condense_links_at_headings: Vec<String>,
  pub proxy_by_default:           bool,
  pub keep_gemini:                Option<Vec<String>>,
  pub embed_images:               Option<String>,
}

impl Environment {
  fn from_environment() -> Self {
    Self {
      root:                       std::env::var("ROOT").unwrap_or_else(|_| {
        log::warn!(
          "could not use ROOT from environment variables, proceeding with \
           default root: gemini://fuwn.me"
        );
        "gemini://fuwn.me".to_string()
      }),
      css_external:               std::env::var("CSS_EXTERNAL").ok(),
      primary_colour:             std::env::var("PRIMARY_COLOUR").ok(),
      favicon_external:           std::env::var("FAVICON_EXTERNAL").ok(),
      mathjax:                    std::env::var("MATHJAX")
        .map(|v| v.to_lowercase() == "true")
        .unwrap_or(true),
      head:                       std::env::var("HEAD").ok(),
      header:                     std::env::var("HEADER").ok(),
      plain_text_route:           std::env::var("PLAIN_TEXT_ROUTE").ok(),
      condense_links:             std::env::var("CONDENSE_LINKS")
        .map(|s| s.split(',').map(String::from).collect())
        .unwrap_or_default(),
      condense_links_at_headings: std::env::var("CONDENSE_LINKS_AT_HEADINGS")
        .map(|s| s.split(',').map(String::from).collect())
        .unwrap_or_default(),
      proxy_by_default:           std::env::var("PROXY_BY_DEFAULT")
        .map(|v| v.to_lowercase() == "true")
        .unwrap_or(true),
      keep_gemini:                std::env::var("KEEP_GEMINI")
        .ok()
        .map(|s| s.split(',').map(String::from).collect()),
      embed_images:               std::env::var("EMBED_IMAGES").ok(),
    }
  }
}