From 83235cea4fdb9f1d22d4e2b8858fd9de2a10a2d1 Mon Sep 17 00:00:00 2001 From: Fuwn Date: Wed, 21 Jan 2026 15:02:28 +0000 Subject: perf: Cache environment variables at startup --- src/environment.rs | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 src/environment.rs (limited to 'src/environment.rs') 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 = + LazyLock::new(Environment::from_environment); + +pub struct Environment { + pub root: String, + pub css_external: Option, + pub primary_colour: Option, + pub favicon_external: Option, + pub mathjax: bool, + pub head: Option, + pub header: Option, + pub plain_text_route: Option, + pub condense_links: Vec, + pub condense_links_at_headings: Vec, + pub proxy_by_default: bool, + pub keep_gemini: Option>, + pub embed_images: Option, +} + +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(), + } + } +} -- cgit v1.2.3