aboutsummaryrefslogtreecommitdiff
path: root/src/environment.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/environment.rs')
-rw-r--r--src/environment.rs56
1 files changed, 56 insertions, 0 deletions
diff --git a/src/environment.rs b/src/environment.rs
new file mode 100644
index 0000000..dd10171
--- /dev/null
+++ b/src/environment.rs
@@ -0,0 +1,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(),
+ }
+ }
+}