diff --git a/crates/hyfetch/src/bin/hyfetch.rs b/crates/hyfetch/src/bin/hyfetch.rs index c8921c9c..75e2380b 100644 --- a/crates/hyfetch/src/bin/hyfetch.rs +++ b/crates/hyfetch/src/bin/hyfetch.rs @@ -224,7 +224,8 @@ fn main() -> Result<()> { } else { color_profile.with_lightness_adaptive( config - .lightness + .lightness_per_theme.map(|val| val.get(theme)) + .or(config.lightness) .unwrap_or_else(|| Config::default_lightness(theme)), theme, ) @@ -1495,6 +1496,7 @@ fn create_config( light_dark: Some(theme), auto_detect_light_dark: Some(det_bg.is_some()), lightness: Some(lightness), + lightness_per_theme: None, color_align, backend, args: None, diff --git a/crates/hyfetch/src/color_util.rs b/crates/hyfetch/src/color_util.rs index d558ddeb..cbb5a6b9 100644 --- a/crates/hyfetch/src/color_util.rs +++ b/crates/hyfetch/src/color_util.rs @@ -72,6 +72,13 @@ static RGB_COLORS_AC: OnceLock = OnceLock::new(); #[derive(Copy, Clone, PartialEq, PartialOrd, Debug, Deserialize, Serialize)] pub struct Lightness(f32); +/// Represents a dictionary of one lightness option per {light, dark} theme. +#[derive(Copy, Clone, Debug, Deserialize, Serialize)] +pub struct LightnessPerTheme { + dark: Lightness, + light: Lightness, +} + #[derive(Debug, Error)] pub enum LightnessError { #[error( @@ -148,6 +155,15 @@ impl Lightness { } } +impl LightnessPerTheme { + pub fn get(&self, theme: TerminalTheme) -> Lightness { + match theme { + TerminalTheme::Light => self.light, + TerminalTheme::Dark => self.dark + } + } +} + impl TryFrom for Lightness { type Error = LightnessError; diff --git a/crates/hyfetch/src/models.rs b/crates/hyfetch/src/models.rs index e432f480..e9ad874f 100644 --- a/crates/hyfetch/src/models.rs +++ b/crates/hyfetch/src/models.rs @@ -6,6 +6,7 @@ use strum::{AsRefStr, Display, EnumString}; use crate::color_profile::ColorProfile; use crate::color_util::Lightness; +use crate::color_util::LightnessPerTheme; use crate::neofetch_util::ColorAlignment; use crate::types::{AnsiMode, Backend, TerminalTheme}; @@ -16,6 +17,7 @@ pub struct Config { pub auto_detect_light_dark: Option, pub light_dark: Option, pub lightness: Option, + pub lightness_per_theme: Option, pub color_align: ColorAlignment, pub backend: Backend, #[serde(default)]