git.lucas.co / cce-system-interface
system settings
git clone https://git.lucas.co/cce-system-interface.git

commit90eec563193b3c8997cf01d5045cf4213a111ee3
parentc3549339c9
authorLucas Galante <[email protected]>
date2026-06-26 15:03
system-interface: migrate status controls from system info to interface page

 src/main.rs              |   6 +-
 src/pages/system_info.rs | 348 +----------------------------------------------
 src/renderer.rs          |  25 ++--
 src/watchers.rs          |   4 +-
 4 files changed, 23 insertions(+), 360 deletions(-)

diff --git a/src/main.rs b/src/main.rs
index a9da7df..7a76fe6 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -176,7 +176,7 @@ struct SystemInterface {
     rx_fingers: std::sync::mpsc::Receiver<Vec<Finger>>,
     rx_processes: std::sync::mpsc::Receiver<pages::processes::ProcessesState>,
     rx_system: std::sync::mpsc::Receiver<pages::system_info::SystemState>,
-    rx_status: std::sync::mpsc::Receiver<pages::system_info::StatusData>,
+    rx_status: std::sync::mpsc::Receiver<pages::interface::StatusData>,
     rx_storage: std::sync::mpsc::Receiver<pages::storage::StorageState>,
     rx_notifications: std::sync::mpsc::Receiver<pages::system_info::NotificationsConfig>,
     rx_typeface: std::sync::mpsc::Receiver<pages::interface::InterfaceState>,
@@ -691,8 +691,8 @@ fn collect_popover_rects(w: &dyn cce_ui::widget::Element, popovers: &mut Vec<(f3
             }
         }
         while let Ok(s) = self.rx_status.try_recv() {
-            system_info::update(&mut self.app.system_info, system_info::SystemMessage::StatusRefreshed(s));
-            if self.app.current_page == Page::System {
+            interface::update(&mut self.app.interface, interface::InterfaceMessage::StatusRefreshed(s));
+            if self.app.current_page == Page::Interface {
                 self.needs_rebuild = true;
             }
         }
diff --git a/src/pages/system_info.rs b/src/pages/system_info.rs
index f30a205..80b26c6 100644
--- a/src/pages/system_info.rs
+++ b/src/pages/system_info.rs
@@ -1,7 +1,6 @@
 use crate::app::{AppAction, PageContent, SectionContextExt};
 use cce_ui::layout::{render_widget, PageLayoutBuilder, LayoutStrategy};
-use cce_ui::widget::{Label, Dropdown, InfoBox, Toggle, Spinbox, Slider, Element};
-use crate::pages::interface::{parse_u16_from, parse_f32_from};
+use cce_ui::widget::{Label, Dropdown, InfoBox, Toggle, Spinbox};
 use crate::config_manager::CONFIG_PATH;
 use std::io::Write;
 use std::fs;
@@ -71,21 +70,6 @@ pub struct SystemState {
     pub notifications_duration: i32,
     pub notifications_duration_spinbox: Spinbox,
 
-    // Status Interface fields
-    pub status_loaded: bool,
-    pub status_font_size: u16,
-    pub status_padding: u16,
-    pub status_separators: bool,
-    pub status_underline: bool,
-    pub status_running: bool,
-    pub status_label: Label,
-    pub status_separators_toggle: Toggle,
-    pub status_underline_toggle: Toggle,
-    pub status_padding_spinbox: Spinbox,
-    pub status_box_opacity: f32,
-    pub status_box_blur: f32,
-    pub status_box_opacity_slider: Slider,
-    pub status_box_blur_slider: Slider,
 }
 
 impl Default for SystemState {
@@ -129,20 +113,6 @@ impl Default for SystemState {
                 .with_unit("s")
                 .with_config(&get_config_path(), "duration"),
 
-            status_loaded: false,
-            status_font_size: 11,
-            status_padding: 8,
-            status_separators: true,
-            status_underline: true,
-            status_running: false,
-            status_label: Label::new("Status Interface: Stopped").with_font_size(14.0).with_color([170, 51, 51]),
-            status_separators_toggle: Toggle::new().with_label("Show Separators").with_config(&get_config_path(), "status_separators"),
-            status_underline_toggle: Toggle::new().with_label("Show Underline").with_config(&get_config_path(), "status_underline"),
-            status_padding_spinbox: Spinbox::new(8, 0, 32, 1).with_label("Side Padding").with_unit("px").with_config(&get_config_path(), "status_padding"),
-            status_box_opacity: 1.0,
-            status_box_blur: 0.0,
-            status_box_opacity_slider: Slider::new().with_range(0.0, 100.0).with_scroll(true).with_value(1.0).with_label("Background Opacity").with_config(&get_config_path(), "status_box_opacity"),
-            status_box_blur_slider: Slider::new().with_range(0.0, 100.0).with_scroll(true).with_value(0.0).with_label("Background Blur").with_config(&get_config_path(), "status_box_blur"),
         }
     }
 }
@@ -165,13 +135,7 @@ pub enum SystemMessage {
     SetNotificationsDuration(i32),
     SendTestNotification,
     NotificationsRefreshed(NotificationsConfig),
-    StatusRefreshed(StatusData),
-    StatusToggleSeparators,
-    StatusToggleUnderline,
-    StatusReload,
-    StatusSetPadding(u16),
-    StatusSetBoxOpacity(f32),
-    StatusSetBoxBlur(f32),
+
 }
 
 // ── zbus proxies ────────────────────────────────────────────────────
@@ -479,21 +443,6 @@ pub async fn fetch_system_state() -> SystemState {
             .with_label("Notification Duration")
             .with_unit("s")
             .with_config(&get_config_path(), "duration"),
-
-        status_loaded: false,
-        status_font_size: 11,
-        status_padding: 8,
-        status_separators: true,
-        status_underline: true,
-        status_running: false,
-        status_label: Label::new("Status Interface: Stopped").with_font_size(14.0).with_color([170, 51, 51]),
-        status_separators_toggle: Toggle::new().with_label("Show Separators").with_config(&get_config_path(), "status_separators"),
-        status_underline_toggle: Toggle::new().with_label("Show Underline").with_config(&get_config_path(), "status_underline"),
-        status_padding_spinbox: Spinbox::new(8, 0, 32, 1).with_label("Side Padding").with_unit("px").with_config(&get_config_path(), "status_padding"),
-        status_box_opacity: 1.0,
-        status_box_blur: 0.0,
-        status_box_opacity_slider: Slider::new().with_range(0.0, 100.0).with_scroll(true).with_value(1.0).with_label("Background Opacity").with_config(&get_config_path(), "status_box_opacity"),
-        status_box_blur_slider: Slider::new().with_range(0.0, 100.0).with_scroll(true).with_value(0.0).with_label("Background Blur").with_config(&get_config_path(), "status_box_blur"),
     }
 }
 
@@ -744,72 +693,6 @@ pub fn view(state: &mut SystemState, cx: f32, cy: f32, cw: f32, ch: f32, _root_f
         sec2.spacing(12.0);
     });
 
-    // ── 9. Status Interface Section ──
-    builder.add_section(&mut final_pc, "Status Interface", sec_focused.get(8).copied().unwrap_or(false), |sec3| {
-        let sec_w = sec3.cw;
-        if !state.status_loaded {
-            sec3.text("Loading Status Interface status...", 12.0, 0.0, 12.0, TEXT_DIM);
-            sec3.spacing(18.0);
-        } else {
-            // Status
-            let status_text = if state.status_running { "Status Interface: Running" } else { "Status Interface: Stopped" };
-            let status_color = if state.status_running { [92, 143, 97] } else { [170, 51, 51] };
-            state.status_label.set_text(status_text);
-            state.status_label.set_color(status_color);
-            sec3.widget(&mut state.status_label, 12.0, sec_w - 24.0, 20.0, ctx);
-            sec3.spacing(12.0);
-
-            sec3.spacing(4.0);
-
-            // Separators toggle
-            state.status_separators_toggle.set_toggled(state.status_separators);
-            sec3.widget_full(&mut state.status_separators_toggle, cce_ui::layout::toggle_height(), ctx);
-            sec3.spacing(16.0);
-
-            // Underline toggle
-            state.status_underline_toggle.set_toggled(state.status_underline);
-            sec3.widget_full(&mut state.status_underline_toggle, cce_ui::layout::toggle_height(), ctx);
-            sec3.spacing(16.0);
-
-            // Padding spinbox
-            state.status_padding_spinbox.value = state.status_padding as i32;
-            sec3.widget(&mut state.status_padding_spinbox, 12.0, sec_w - 24.0, 44.0, ctx);
-            sec3.spacing(16.0);
-
-            // Opacity slider
-            state.status_box_opacity_slider.set_label(&format!("Background Opacity: {}%", (state.status_box_opacity * 100.0).round() as i32));
-            state.status_box_opacity_slider.set_value(state.status_box_opacity);
-            let label_h_op = cce_ui::widget::label_offset(&state.status_box_opacity_slider);
-            let slider_h_op = cce_ui::layout::slider_height() + label_h_op;
-            sec3.widget_full(&mut state.status_box_opacity_slider, slider_h_op, ctx);
-            sec3.spacing(16.0);
-
-            // Blur slider
-            state.status_box_blur_slider.set_label(&format!("Background Blur: {}%", (state.status_box_blur * 100.0).round() as i32));
-            state.status_box_blur_slider.set_value(state.status_box_blur);
-            let label_h_bl = cce_ui::widget::label_offset(&state.status_box_blur_slider);
-            let slider_h_bl = cce_ui::layout::slider_height() + label_h_bl;
-            sec3.widget_full(&mut state.status_box_blur_slider, slider_h_bl, ctx);
-            sec3.spacing(16.0);
-
-            // Reload button
-            let yt_reload = sec3.ay();
-            let btn_w = sec_w - 24.0;
-            let button_x = sec3.left + 12.0;
-            sec3.button(
-                "Reload Status Interface",
-                button_x,
-                yt_reload,
-                btn_w,
-                32.0,
-                [0.13, 0.18, 0.14, 1.0],
-                [0.25, 0.30, 0.26, 1.0],
-                [1.0, 1.0, 1.0, 1.0],
-                AppAction::SystemInfo(SystemMessage::StatusReload),
-            );
-            sec3.spacing(12.0);
-        }
-    });
 
     final_pc
 }
@@ -903,56 +786,7 @@ pub fn update(state: &mut SystemState, msg: SystemMessage) {
             state.notifications_bell = new.bell;
             state.notifications_duration = new.duration;
         }
-        SystemMessage::StatusRefreshed(new) => {
-            let was_status_hovered = state.status_label.hovered();
-            let was_separators_hovered = state.status_separators_toggle.hovered();
-            let was_underline_hovered = state.status_underline_toggle.hovered();
-            let was_opacity_hovered = state.status_box_opacity_slider.hovered();
-            let was_blur_hovered = state.status_box_blur_slider.hovered();
-
-            state.status_loaded = true;
-            state.status_font_size = new.font_size;
-            state.status_padding = new.padding;
-            state.status_separators = new.separators;
-            state.status_underline = new.underline;
-            state.status_running = new.running;
-            state.status_box_opacity = new.bg_opacity;
-            state.status_box_blur = new.bg_blur;
-
-            state.status_label.set_hovered(was_status_hovered);
-            state.status_separators_toggle.set_hovered(was_separators_hovered);
-            state.status_underline_toggle.set_hovered(was_underline_hovered);
-            state.status_box_opacity_slider.set_hovered(was_opacity_hovered);
-            state.status_box_blur_slider.set_hovered(was_blur_hovered);
-        }
-        SystemMessage::StatusToggleSeparators => {
-            state.status_separators = !state.status_separators;
-            write_status_separators(state.status_separators);
-            status_interface_reload();
-        }
-        SystemMessage::StatusToggleUnderline => {
-            state.status_underline = !state.status_underline;
-            write_status_underline(state.status_underline);
-            status_interface_reload();
-        }
-        SystemMessage::StatusSetPadding(val) => {
-            state.status_padding = val;
-            write_status_padding(val);
-            status_interface_reload();
-        }
-        SystemMessage::StatusSetBoxOpacity(val) => {
-            state.status_box_opacity = val;
-            write_status_box_opacity(val);
-            status_interface_reload();
-        }
-        SystemMessage::StatusSetBoxBlur(val) => {
-            state.status_box_blur = val;
-            write_status_box_blur(val);
-            status_interface_reload();
-        }
-        SystemMessage::StatusReload => {
-            status_interface_reload();
-        }
+
     }
 }
 
@@ -1031,93 +865,7 @@ fn get_config_path() -> String {
     }
 }
 
-fn write_status_value(key: &str, value: &str) {
-    crate::pages::interface::write_config_value_path(&get_config_path(), key, value);
-}
-
-fn read_status_font_size() -> Option<u16> {
-    let content = std::fs::read_to_string(&get_config_path()).ok()?;
-    Some(parse_u16_from(&content, "status_font_size", 11))
-}
-
-fn read_status_padding() -> Option<u16> {
-    let content = std::fs::read_to_string(&get_config_path()).ok()?;
-    Some(parse_u16_from(&content, "status_padding", 8))
-}
-
-fn write_status_padding(padding: u16) {
-    write_status_value("status_padding", &padding.to_string());
-}
-
-fn read_status_separators() -> Option<bool> {
-    let content = std::fs::read_to_string(&get_config_path()).ok()?;
-    Some(crate::pages::interface::parse_bool_from(&content, "status_separators", true))
-}
-
-fn write_status_separators(val: bool) {
-    write_status_value("status_separators", &val.to_string());
-}
-
-fn read_status_underline() -> Option<bool> {
-    let content = std::fs::read_to_string(&get_config_path()).ok()?;
-    Some(crate::pages::interface::parse_bool_from(&content, "status_underline", true))
-}
-
-fn write_status_underline(val: bool) {
-    write_status_value("status_underline", &val.to_string());
-}
-
-fn read_status_box_opacity() -> Option<f32> {
-    let content = std::fs::read_to_string(&get_config_path()).ok()?;
-    Some(parse_f32_from(&content, "status_box_opacity", 1.0))
-}
-
-fn write_status_box_opacity(val: f32) {
-    write_status_value("status_box_opacity", &val.to_string());
-}
-
-fn read_status_box_blur() -> Option<f32> {
-    let content = std::fs::read_to_string(&get_config_path()).ok()?;
-    Some(parse_f32_from(&content, "status_box_blur", 0.0))
-}
-
-fn write_status_box_blur(val: f32) {
-    write_status_value("status_box_blur", &val.to_string());
-}
 
-fn status_interface_reload() {
-    std::thread::spawn(|| {
-        let _ = std::process::Command::new("pkill")
-            .args(["-f", "cce-status-interface"])
-            .status();
-        std::thread::sleep(std::time::Duration::from_millis(150));
-        send_ipc_command("spawn cce-status-interface");
-    });
-}
-
-pub async fn fetch_status_state() -> StatusData {
-    let running = tokio::process::Command::new("pgrep")
-        .args(["-f", "cce-status-interface"]).output().await.ok()
-        .map(|o| !o.stdout.is_empty())
-        .unwrap_or(false);
-
-    let font_size = read_status_font_size().unwrap_or(11);
-    let padding = read_status_padding().unwrap_or(8);
-    let separators = read_status_separators().unwrap_or(true);
-    let underline = read_status_underline().unwrap_or(true);
-    let bg_opacity = read_status_box_opacity().unwrap_or(1.0);
-    let bg_blur = read_status_box_blur().unwrap_or(0.0);
-
-    StatusData {
-        font_size,
-        padding,
-        separators,
-        underline,
-        running,
-        bg_opacity,
-        bg_blur,
-    }
-}
 
 #[cfg(test)]
 mod tests {
@@ -1127,7 +875,7 @@ mod tests {
     fn test_view_layout_grid() {
         let mut state = SystemState::default();
         let mut layout = cce_ui::layout::ColumnLayout::new(20.0);
-        let sec_focused = vec![false, false, false, false, false, false, false, false, false];
+        let sec_focused = vec![false, false, false, false, false, false, false, false];
         let mut ctx = cce_ui::context::UiContext::new();
         let pc = view(&mut state, 10.0, 20.0, 800.0, 600.0, false, &sec_focused, &mut layout, &mut ctx);
         assert!(!pc.rects.is_empty() || !pc.texts.is_empty());
@@ -1177,93 +925,5 @@ mod tests {
         assert_eq!(parse_notifications_duration(content), 10);
     }
 
-    #[test]
-    fn test_read_write_separators() {
-        let dir = std::env::temp_dir();
-        let path = dir.join("test_status_separators.json");
-        let path_str = path.to_str().unwrap().to_string();
-
-        let _ = fs::write(&path_str, "{\"layout\": {\"status_separators\": true, \"status_padding\": 8}}");
-        TEST_CONFIG_PATH.with(|p| *p.borrow_mut() = Some(path_str));
-
-        let original = read_status_separators().unwrap_or(true);
-        write_status_separators(!original);
-        assert_eq!(read_status_separators(), Some(!original));
-        write_status_separators(original);
-        assert_eq!(read_status_separators(), Some(original));
-
-        let _ = fs::remove_file(path);
-    }
-
-    #[test]
-    fn test_read_write_padding() {
-        let dir = std::env::temp_dir();
-        let path = dir.join("test_status_padding.json");
-        let path_str = path.to_str().unwrap().to_string();
-
-        let _ = fs::write(&path_str, "{\"layout\": {\"status_separators\": true, \"status_padding\": 8}}");
-        TEST_CONFIG_PATH.with(|p| *p.borrow_mut() = Some(path_str));
-
-        let original = read_status_padding().unwrap_or(8);
-        write_status_padding(12);
-        assert_eq!(read_status_padding(), Some(12));
-        write_status_padding(original);
-        assert_eq!(read_status_padding(), Some(original));
-
-        let _ = fs::remove_file(path);
-    }
 
-    #[test]
-    fn test_read_write_underline() {
-        let dir = std::env::temp_dir();
-        let path = dir.join("test_status_underline.json");
-        let path_str = path.to_str().unwrap().to_string();
-
-        let _ = fs::write(&path_str, "{\"layout\": {\"status_underline\": true, \"status_padding\": 8}}");
-        TEST_CONFIG_PATH.with(|p| *p.borrow_mut() = Some(path_str));
-
-        let original = read_status_underline().unwrap_or(true);
-        write_status_underline(!original);
-        assert_eq!(read_status_underline(), Some(!original));
-        write_status_underline(original);
-        assert_eq!(read_status_underline(), Some(original));
-
-        let _ = fs::remove_file(path);
-    }
-
-    #[test]
-    fn test_read_write_status_box_opacity() {
-        let dir = std::env::temp_dir();
-        let path = dir.join("test_status_box_opacity.json");
-        let path_str = path.to_str().unwrap().to_string();
-
-        let _ = fs::write(&path_str, "{\"layout\": {\"status_box_opacity\": 1.0}}");
-        TEST_CONFIG_PATH.with(|p| *p.borrow_mut() = Some(path_str));
-
-        let original = read_status_box_opacity().unwrap_or(1.0);
-        write_status_box_opacity(0.75);
-        assert_eq!(read_status_box_opacity(), Some(0.75));
-        write_status_box_opacity(original);
-        assert_eq!(read_status_box_opacity(), Some(original));
-
-        let _ = fs::remove_file(path);
-    }
-
-    #[test]
-    fn test_read_write_status_box_blur() {
-        let dir = std::env::temp_dir();
-        let path = dir.join("test_status_box_blur.json");
-        let path_str = path.to_str().unwrap().to_string();
-
-        let _ = fs::write(&path_str, "{\"layout\": {\"status_box_blur\": 0.0}}");
-        TEST_CONFIG_PATH.with(|p| *p.borrow_mut() = Some(path_str));
-
-        let original = read_status_box_blur().unwrap_or(0.0);
-        write_status_box_blur(0.5);
-        assert_eq!(read_status_box_blur(), Some(0.5));
-        write_status_box_blur(original);
-        assert_eq!(read_status_box_blur(), Some(original));
-
-        let _ = fs::remove_file(path);
-    }
 }
diff --git a/src/renderer.rs b/src/renderer.rs
index d2e21c3..24b8bd4 100644
--- a/src/renderer.rs
+++ b/src/renderer.rs
@@ -153,6 +153,14 @@ impl SystemInterface {
         self.app.interface.status_box_corner_radius_spinbox.set_parent(None, &mut self.ui_context);
         self.app.interface.status_padding_spinbox.clear_children(&mut self.ui_context);
         self.app.interface.status_padding_spinbox.set_parent(None, &mut self.ui_context);
+        self.app.interface.status_separators_toggle.clear_children(&mut self.ui_context);
+        self.app.interface.status_separators_toggle.set_parent(None, &mut self.ui_context);
+        self.app.interface.status_underline_toggle.clear_children(&mut self.ui_context);
+        self.app.interface.status_underline_toggle.set_parent(None, &mut self.ui_context);
+        self.app.interface.status_box_opacity_slider.clear_children(&mut self.ui_context);
+        self.app.interface.status_box_opacity_slider.set_parent(None, &mut self.ui_context);
+        self.app.interface.status_box_blur_slider.clear_children(&mut self.ui_context);
+        self.app.interface.status_box_blur_slider.set_parent(None, &mut self.ui_context);
 
         self.app.interface.sans_box.clear_children(&mut self.ui_context); self.app.interface.sans_box.set_parent(None, &mut self.ui_context);
         self.app.interface.serif_box.clear_children(&mut self.ui_context); self.app.interface.serif_box.set_parent(None, &mut self.ui_context);
@@ -170,10 +178,7 @@ impl SystemInterface {
         self.app.system_info.gpu_gov_menu.clear_children(&mut self.ui_context); self.app.system_info.gpu_gov_menu.set_parent(None, &mut self.ui_context);
         self.app.system_info.notifications_enable_toggle.clear_children(&mut self.ui_context); self.app.system_info.notifications_enable_toggle.set_parent(None, &mut self.ui_context);
         self.app.system_info.notifications_bell_toggle.clear_children(&mut self.ui_context); self.app.system_info.notifications_bell_toggle.set_parent(None, &mut self.ui_context);
-        self.app.system_info.notifications_duration_spinbox.clear_children(&mut self.ui_context); self.app.system_info.notifications_duration_spinbox.set_parent(None, &mut self.ui_context);
-        self.app.system_info.status_separators_toggle.clear_children(&mut self.ui_context); self.app.system_info.status_separators_toggle.set_parent(None, &mut self.ui_context);
-        self.app.system_info.status_underline_toggle.clear_children(&mut self.ui_context); self.app.system_info.status_underline_toggle.set_parent(None, &mut self.ui_context);
-        self.app.system_info.status_padding_spinbox.clear_children(&mut self.ui_context); self.app.system_info.status_padding_spinbox.set_parent(None, &mut self.ui_context);
+
 
         self.app.input.rate_spinbox.clear_children(&mut self.ui_context); self.app.input.rate_spinbox.set_parent(None, &mut self.ui_context);
         self.app.input.delay_spinbox.clear_children(&mut self.ui_context); self.app.input.delay_spinbox.set_parent(None, &mut self.ui_context);
@@ -285,8 +290,7 @@ impl SystemInterface {
                 self.page_sec_containers.push(cce_ui::widget::SectionContainer::new("GPU Power").with_layout(cce_ui::widget::AdaptiveGridLayout { min_col_width: 140.0, gap: 8.0, padding_x: 0.0, padding_y: 0.0 }));
                 self.page_sec_containers.push(cce_ui::widget::SectionContainer::new("Battery").with_layout(cce_ui::widget::AdaptiveGridLayout { min_col_width: 140.0, gap: 8.0, padding_x: 0.0, padding_y: 0.0 }));
                 self.page_sec_containers.push(cce_ui::widget::SectionContainer::new("System Notifications").with_layout(cce_ui::widget::AdaptiveGridLayout { min_col_width: 140.0, gap: 8.0, padding_x: 0.0, padding_y: 0.0 }));
-                self.page_sec_containers.push(cce_ui::widget::SectionContainer::new("Status Interface").with_layout(cce_ui::widget::AdaptiveGridLayout { min_col_width: 140.0, gap: 8.0, padding_x: 0.0, padding_y: 0.0 }));
-                for i in 0..9 {
+                for i in 0..8 {
                     link_parent_child(page_root, &mut self.page_sec_containers[i], &mut self.ui_context);
                 }
                 link_parent_child(&mut self.page_sec_containers[4], &mut self.app.system_info.cpu_gov_menu, &mut self.ui_context);
@@ -294,11 +298,6 @@ impl SystemInterface {
                 link_parent_child(&mut self.page_sec_containers[7], &mut self.app.system_info.notifications_enable_toggle, &mut self.ui_context);
                 link_parent_child(&mut self.page_sec_containers[7], &mut self.app.system_info.notifications_bell_toggle, &mut self.ui_context);
                 link_parent_child(&mut self.page_sec_containers[7], &mut self.app.system_info.notifications_duration_spinbox, &mut self.ui_context);
-                link_parent_child(&mut self.page_sec_containers[8], &mut self.app.system_info.status_separators_toggle, &mut self.ui_context);
-                link_parent_child(&mut self.page_sec_containers[8], &mut self.app.system_info.status_underline_toggle, &mut self.ui_context);
-                link_parent_child(&mut self.page_sec_containers[8], &mut self.app.system_info.status_padding_spinbox, &mut self.ui_context);
-                link_parent_child(&mut self.page_sec_containers[8], &mut self.app.system_info.status_box_opacity_slider, &mut self.ui_context);
-                link_parent_child(&mut self.page_sec_containers[8], &mut self.app.system_info.status_box_blur_slider, &mut self.ui_context);
             }
             Page::Processes => {
                 self.page_sec_containers.clear();
@@ -354,6 +353,10 @@ impl SystemInterface {
                 link_parent_child(&mut self.page_sec_containers[2], &mut self.app.interface.color_selectors[22], &mut self.ui_context);
                 link_parent_child(&mut self.page_sec_containers[2], &mut self.app.interface.status_box_corner_radius_spinbox, &mut self.ui_context);
                 link_parent_child(&mut self.page_sec_containers[2], &mut self.app.interface.status_padding_spinbox, &mut self.ui_context);
+                link_parent_child(&mut self.page_sec_containers[2], &mut self.app.interface.status_separators_toggle, &mut self.ui_context);
+                link_parent_child(&mut self.page_sec_containers[2], &mut self.app.interface.status_underline_toggle, &mut self.ui_context);
+                link_parent_child(&mut self.page_sec_containers[2], &mut self.app.interface.status_box_opacity_slider, &mut self.ui_context);
+                link_parent_child(&mut self.page_sec_containers[2], &mut self.app.interface.status_box_blur_slider, &mut self.ui_context);
                 
                 // Section 3: Controls (parent of: Slider, MenuBar, Toggles, Spinbox, ColorSelector, Textbox, FontSelector)
                 link_parent_child(&mut self.page_sec_containers[3], &mut self.app.interface.color_selectors[5], &mut self.ui_context);
diff --git a/src/watchers.rs b/src/watchers.rs
index 036e39f..ac0f59c 100644
--- a/src/watchers.rs
+++ b/src/watchers.rs
@@ -13,7 +13,7 @@ pub struct Watchers {
     pub rx_fingers: Receiver<Vec<Finger>>,
     pub rx_processes: Receiver<processes::ProcessesState>,
     pub rx_system: Receiver<system_info::SystemState>,
-    pub rx_status: Receiver<system_info::StatusData>,
+    pub rx_status: Receiver<interface::StatusData>,
     pub rx_storage: Receiver<storage::StorageState>,
     pub rx_notifications: Receiver<system_info::NotificationsConfig>,
     pub rx_typeface: Receiver<interface::InterfaceState>,
@@ -157,7 +157,7 @@ pub fn spawn_all(
 
     let rx_system = spawn_bg_active(current_page_shared.clone(), 9, 5, || system_info::fetch_system_state());
     let rx_processes = spawn_bg_active(current_page_shared.clone(), 6, 3, || processes::fetch_processes_state());
-    let rx_status = spawn_bg_active(current_page_shared.clone(), 9, 10, || system_info::fetch_status_state());
+    let rx_status = spawn_bg_active(current_page_shared.clone(), 4, 10, || interface::fetch_status_state());
     let rx_storage = spawn_bg_active(current_page_shared.clone(), 8, 10, || storage::fetch_storage_state());
 
     let rx_notifications = {