Skip to main content

par_term_config/config/config_struct/
badge_config.rs

1//! Badge overlay settings (iTerm2-style session labels).
2//!
3//! Extracted from the top-level [`super::Config`] struct via `#[serde(flatten)]`.
4//! All fields serialise at the top level of the YAML config file -- existing
5//! config files remain 100% compatible.
6
7use serde::{Deserialize, Serialize};
8
9/// Badge overlay text, colour, font and placement.
10#[derive(Debug, Clone, Serialize, Deserialize)]
11pub struct BadgeConfig {
12    /// Enable badge display
13    #[serde(default = "crate::defaults::bool_false")]
14    pub badge_enabled: bool,
15
16    /// Badge text format with variable interpolation
17    /// Supports \(session.username), \(session.hostname), \(session.path), etc.
18    #[serde(default = "crate::defaults::badge_format")]
19    pub badge_format: String,
20
21    /// Badge text color [R, G, B] (0-255)
22    #[serde(default = "crate::defaults::badge_color")]
23    pub badge_color: [u8; 3],
24
25    /// Badge opacity (0.0-1.0)
26    #[serde(default = "crate::defaults::badge_color_alpha")]
27    pub badge_color_alpha: f32,
28
29    /// Badge font family (uses system font if not found)
30    #[serde(default = "crate::defaults::badge_font")]
31    pub badge_font: String,
32
33    /// Use bold weight for badge font
34    #[serde(default = "crate::defaults::bool_true")]
35    pub badge_font_bold: bool,
36
37    /// Top margin in pixels from terminal edge
38    #[serde(default = "crate::defaults::badge_top_margin")]
39    pub badge_top_margin: f32,
40
41    /// Right margin in pixels from terminal edge
42    #[serde(default = "crate::defaults::badge_right_margin")]
43    pub badge_right_margin: f32,
44
45    /// Maximum badge width as fraction of terminal width (0.0-1.0)
46    #[serde(default = "crate::defaults::badge_max_width")]
47    pub badge_max_width: f32,
48
49    /// Maximum badge height as fraction of terminal height (0.0-1.0)
50    #[serde(default = "crate::defaults::badge_max_height")]
51    pub badge_max_height: f32,
52}
53
54impl Default for BadgeConfig {
55    fn default() -> Self {
56        Self {
57            badge_enabled: crate::defaults::bool_false(),
58            badge_format: crate::defaults::badge_format(),
59            badge_color: crate::defaults::badge_color(),
60            badge_color_alpha: crate::defaults::badge_color_alpha(),
61            badge_font: crate::defaults::badge_font(),
62            badge_font_bold: crate::defaults::bool_true(),
63            badge_top_margin: crate::defaults::badge_top_margin(),
64            badge_right_margin: crate::defaults::badge_right_margin(),
65            badge_max_width: crate::defaults::badge_max_width(),
66            badge_max_height: crate::defaults::badge_max_height(),
67        }
68    }
69}