67 lines
1.9 KiB
Rust
67 lines
1.9 KiB
Rust
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();
|
|
}
|