From b67914b956bf03cd330b1946df20371eb4d36eae Mon Sep 17 00:00:00 2001 From: galister <22305755+galister@users.noreply.github.com> Date: Thu, 15 Jan 2026 20:47:37 +0900 Subject: [PATCH] expand vars in paths --- wayvr/src/overlays/custom.rs | 17 +---------------- wgui/src/globals.rs | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 16 deletions(-) diff --git a/wayvr/src/overlays/custom.rs b/wayvr/src/overlays/custom.rs index ee43ce9..0f838bf 100644 --- a/wayvr/src/overlays/custom.rs +++ b/wayvr/src/overlays/custom.rs @@ -4,7 +4,7 @@ use std::{ }; use glam::{Affine3A, Quat, Vec3, vec3}; -use regex::Regex; +use wgui::globals::expand_env_vars; use wlx_common::{ overlays::{BackendAttrib, BackendAttribValue}, windowing::OverlayWindowState, @@ -22,21 +22,6 @@ use crate::{ }, }; -static ENV_VAR_REGEX: LazyLock = LazyLock::new(|| { - Regex::new(r"\$\{([A-Z_][A-Z0-9_]*)}|\$([A-Z_][A-Z0-9_]*)").unwrap() // want panic -}); - -pub(super) fn expand_env_vars(template: &str) -> String { - ENV_VAR_REGEX - .replace_all(template, |caps: ®ex::Captures| { - let var_name = caps.get(1).or_else(|| caps.get(2)).unwrap().as_str(); - std::env::var(var_name) - .inspect_err(|e| log::warn!("Unable to substitute env var {var_name}: {e:?}")) - .unwrap_or_default() - }) - .into_owned() -} - struct CustomPanelState; pub fn create_custom(app: &mut AppState, name: Arc) -> Option { diff --git a/wgui/src/globals.rs b/wgui/src/globals.rs index bda6ed4..918f5ec 100644 --- a/wgui/src/globals.rs +++ b/wgui/src/globals.rs @@ -3,9 +3,11 @@ use std::{ io::Read, path::PathBuf, rc::Rc, + sync::LazyLock, }; use anyhow::Context; +use regex::Regex; use crate::{ assets::{AssetPath, AssetProvider}, @@ -93,6 +95,7 @@ impl WguiGlobals { } fn load_asset_from_fs(&self, path: &str) -> anyhow::Result> { + let path = expand_env_vars(path); let path = self.0.borrow().asset_folder.join(path); let mut file = std::fs::File::open(path.as_path()).with_context(|| format!("Could not open asset from {}", path.display()))?; @@ -136,3 +139,18 @@ impl WguiGlobals { RefMut::map(self.0.borrow_mut(), |x| &mut x.font_system) } } + +static ENV_VAR_REGEX: LazyLock = LazyLock::new(|| { + Regex::new(r"\$\{([A-Z_][A-Z0-9_]*)}|\$([A-Z_][A-Z0-9_]*)").unwrap() // want panic +}); + +pub fn expand_env_vars(template: &str) -> String { + ENV_VAR_REGEX + .replace_all(template, |caps: ®ex::Captures| { + let var_name = caps.get(1).or_else(|| caps.get(2)).unwrap().as_str(); + std::env::var(var_name) + .inspect_err(|e| log::warn!("Unable to substitute env var {var_name}: {e:?}")) + .unwrap_or_default() + }) + .into_owned() +}