use crate::{ install::{str_vec, uncomment_tag}, is_root, print_status, run_command, }; pub fn build_kxkbrc(layout: &str, variant: Option<&str>) -> String { let mut res = String::from("[Layout]\nUse=true\n"); res.push_str(&format!("LayoutList={layout}\n")); if let Some(variant) = variant { res.push_str(&format!("VariantList={variant}\n")); } res } pub fn create_iso(without_gui: bool, kb_layout: &str, kb_variant: Option<&str>) { if !is_root() { eprintln!("Error: You need root to create an ISO"); std::process::exit(1); } if !std::fs::exists("./iso").unwrap() { let cmd = str_vec(vec!["git", "clone", "https://git.hydrar.de/navos/iso"]); run_command(&cmd, None, false); } if without_gui { std::fs::remove_file("./iso/airootfs/etc/systemd/system/display-manager.service").unwrap(); } else { print_status("Adding GUI packages"); uncomment_tag("#gui: ", "./iso/packages.x86_64"); } print_status("Setting keyboard layout"); std::fs::create_dir_all("./iso/airootfs/etc/skel/.config").unwrap(); std::fs::write( "./iso/airootfs/etc/skel/.config/kxkbrc", build_kxkbrc(kb_layout, kb_variant), ) .unwrap(); std::fs::create_dir_all("./work").unwrap(); let mount_cmd = str_vec(vec![ "mount", "-t", "tmpfs", "-o", "size=10G", "tmpfs", "./work", ]); run_command(&mount_cmd, None, false); let mkarchiso_cmd = vec![ "mkarchiso".to_string(), "-v".to_string(), "-w".to_string(), "./work".to_string(), "-o".to_string(), "./".to_string(), "./iso".to_string(), ]; run_command(&mkarchiso_cmd, None, true); let umount_cmd = str_vec(vec!["umount", "-r", "./work"]); run_command(&umount_cmd, None, false); std::fs::remove_dir_all("./work").unwrap(); }