♻️ Simple & Efficient Gemini-to-HTTP Proxy
fuwn.net
proxy
gemini-protocol
protocol
gemini
http
rust
1use std::sync::LazyLock;
2
3pub static ENVIRONMENT: LazyLock<Environment> =
4 LazyLock::new(Environment::from_environment);
5
6pub struct Environment {
7 pub root: String,
8 pub css_external: Option<String>,
9 pub primary_colour: Option<String>,
10 pub favicon_external: Option<String>,
11 pub mathjax: bool,
12 pub head: Option<String>,
13 pub header: Option<String>,
14 pub plain_text_route: Option<String>,
15 pub condense_links: Vec<String>,
16 pub condense_links_at_headings: Vec<String>,
17 pub proxy_by_default: bool,
18 pub keep_gemini: Option<Vec<String>>,
19 pub embed_images: Option<String>,
20 pub http09: bool,
21 pub http09_port: u16,
22}
23
24impl Environment {
25 fn from_environment() -> Self {
26 Self {
27 root: std::env::var("ROOT").unwrap_or_else(|_| {
28 log::warn!(
29 "could not use ROOT from environment variables, proceeding with \
30 default root: gemini://fuwn.me"
31 );
32 "gemini://fuwn.me".to_string()
33 }),
34 css_external: std::env::var("CSS_EXTERNAL").ok(),
35 primary_colour: std::env::var("PRIMARY_COLOUR").ok(),
36 favicon_external: std::env::var("FAVICON_EXTERNAL").ok(),
37 mathjax: std::env::var("MATHJAX")
38 .map(|v| v.to_lowercase() == "true")
39 .unwrap_or(true),
40 head: std::env::var("HEAD").ok(),
41 header: std::env::var("HEADER").ok(),
42 plain_text_route: std::env::var("PLAIN_TEXT_ROUTE").ok(),
43 condense_links: std::env::var("CONDENSE_LINKS")
44 .map(|s| s.split(',').map(String::from).collect())
45 .unwrap_or_default(),
46 condense_links_at_headings: std::env::var("CONDENSE_LINKS_AT_HEADINGS")
47 .map(|s| s.split(',').map(String::from).collect())
48 .unwrap_or_default(),
49 proxy_by_default: std::env::var("PROXY_BY_DEFAULT")
50 .map(|v| v.to_lowercase() == "true")
51 .unwrap_or(true),
52 keep_gemini: std::env::var("KEEP_GEMINI")
53 .ok()
54 .map(|s| s.split(',').map(String::from).collect()),
55 embed_images: std::env::var("EMBED_IMAGES").ok(),
56 http09: std::env::var("HTTP09")
57 .map(|v| v.to_lowercase() == "true")
58 .unwrap_or(false),
59 http09_port: std::env::var("HTTP09_PORT")
60 .ok()
61 .and_then(|p| p.parse().ok())
62 .unwrap_or(90),
63 }
64 }
65}