From f0a8e704c063b56733bcf111a5f213e342e12370902f7f96b068e7aa18a6d92d Mon Sep 17 00:00:00 2001 From: Kira Date: Thu, 28 May 2026 00:43:31 +0200 Subject: [PATCH] Using secure boot status to determin its awailability for installation. --- Cargo.lock | 2 ++ Cargo.toml | 2 ++ src/stage.rs | 4 ++++ src/stages/partition/mod.rs | 43 ++++++++++++++++++++++++++----------- 4 files changed, 39 insertions(+), 12 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c5959e3..cd43bc8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1804,6 +1804,8 @@ dependencies = [ "log", "rand 0.10.1", "rust-i18n", + "serde", + "serde_json", "time-format", "toml 1.1.2+spec-1.1.0", ] diff --git a/Cargo.toml b/Cargo.toml index fdd5e1f..9a257e7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,6 +12,8 @@ iced = { version = "0.14", default-features = false, features = ["crisp", "linux iced_moving_picture = "0" log = "0.4" rust-i18n = "3" +serde = { version = "1", features = ["derive"] } +serde_json = "1" time-format = "1.2" toml = "1" diff --git a/src/stage.rs b/src/stage.rs index 6d8c833..1b112fd 100644 --- a/src/stage.rs +++ b/src/stage.rs @@ -72,6 +72,10 @@ impl StageResult { self.add_val(val_name, ConfigValue::Bool(v)) } + pub fn add_val_u64(self, val_name: &str, v: u64) -> Self { + self.add_val(val_name, ConfigValue::U64(v)) + } + pub fn get_val(&self, val_name: &str) -> Option { let v = self .config diff --git a/src/stages/partition/mod.rs b/src/stages/partition/mod.rs index 3f06070..89ca03c 100644 --- a/src/stages/partition/mod.rs +++ b/src/stages/partition/mod.rs @@ -82,6 +82,7 @@ pub struct PartitionStage { swap_mode: Option, use_zram: bool, secure_boot: bool, + secure_boot_in_setup_mode: bool, custom_swap_size_mb: u32, custom_swap_size_str: String, selected_disk_parts: Option>, @@ -116,6 +117,14 @@ impl PartitionStage { let min_disk_size: KiraSize = KiraSize::new_mb(min_disk_size_mb.try_into().unwrap_or(8192)); + + let sec_boot_setup = match kira_sysinfo::get_secure_boot_status() { + Ok(sb_status) => sb_status.setup_mode, + Err(ex) => { + log::error!("Unable to get secure boot status! {}", ex); + false + } + }; match maybe_dev_list { Ok(dev_list) => { let acepted_dev: Vec = dev_list @@ -143,6 +152,7 @@ impl PartitionStage { swap_mode: Some(SwapMode::SwapNoHibernate), use_zram: true, secure_boot: false, + secure_boot_in_setup_mode: sec_boot_setup, custom_swap_size_mb: 1024, custom_swap_size_str: "1024MB".into(), selected_disk_parts: None, @@ -205,14 +215,14 @@ impl PartitionStage { } fn gen_result(&self) -> StageResult { + let swap_size: KiraSize = self.get_swap_size(); + let dev_name = self + .device + .clone() + .expect("Device should be selected!") + .name; StageResult::new("partition") - .add_val_string( - "device", - self.device - .as_ref() - .and_then(|v| Some(v.name.clone())) - .unwrap_or_else(|| "NONE".to_string()), - ) + .add_val_string("device", dev_name) .add_val_string( "swap_mode", self.swap_mode @@ -220,7 +230,8 @@ impl PartitionStage { .unwrap_or(SwapMode::NoSwap) .to_string(), ) - .add_val_bool("zram", self.use_zram) + .add_val_u64("swap_size_mb", swap_size.mb()) + .add_val_bool("use_zram", self.use_zram) .add_val_bool("secure_boot", self.secure_boot) } @@ -320,7 +331,11 @@ impl PartitionStage { let dev_parts_content = widget::column![dev_parts_text, dev_parts_content]; let back_button = widget::button(widget::text(t!("button.back"))).on_press(Message::Back); - let next_button = widget::button(widget::text(t!("button.next"))).on_press(Message::Next); + let next_button = if self.device.is_some() { + widget::button(widget::text(t!("button.next"))).on_press(Message::Next) + } else { + widget::button(widget::text(t!("button.next"))) + }; let selected_dev_text = match self.selected_disk_parts { Some(_) => widget::text(t!("partition.current_dev_layout")), @@ -329,6 +344,12 @@ impl PartitionStage { let selected_dev_content = kira_color_bar::color_bar(self.selected_disk_parts.clone(), 64); let selected_dev_content = widget::column![selected_dev_text, selected_dev_content]; + let use_sec_boot_checkbox = if self.secure_boot_in_setup_mode { + widget::checkbox(self.secure_boot).label(t!("partition.use_secure_boot")) + .on_toggle(Message::ToggleSecureBoot) + } + else {widget::checkbox(self.secure_boot).label(t!("partition.use_secure_boot"))}; + widget::column![ widget::container( widget::column![ @@ -354,9 +375,7 @@ impl PartitionStage { .label(t!("partition.use_zram")) .on_toggle(Message::ToggleZram), widget::rule::horizontal(2), - widget::checkbox(self.secure_boot) - .label(t!("partition.use_secure_boot")) - .on_toggle(Message::ToggleSecureBoot), + use_sec_boot_checkbox, widget::rule::horizontal(2), selected_dev_content, dev_parts_content,