From 6623555a0b615d3f11157855adbf8d92e4637bf0 Mon Sep 17 00:00:00 2001 From: Aaron Honeycutt Date: Sat, 19 Apr 2025 23:35:28 -0600 Subject: [PATCH 1/2] add VM option --- src/main.rs | 40 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/src/main.rs b/src/main.rs index 16020b7..4cbaff9 100644 --- a/src/main.rs +++ b/src/main.rs @@ -246,7 +246,8 @@ fn main() { println!("---------------"); println!(""); println!("1. Lemur Pro 13 (Garrus)"); - println!("2. Generic"); + println!("2. Virtual Machine"); + println!("3. Generic"); println!(""); println!("Enter your host for installation:"); @@ -289,8 +290,43 @@ fn main() { println!("Exited with status {:?}", install_status); break - } + }, "2" => { + let mut vm_config = Easy::new(); + vm_config.url("https://gitlab.com/ahoneybun/nix-configs/-/raw/main/hosts/x86_64/vm/configuration.nix").unwrap(); + + let mut config_file = File::create("vm.nix").unwrap(); + + { + let mut transfer = vm_config.transfer(); + transfer.write_function(|data| { + config_file.write_all(data).unwrap(); + Ok(data.len()) + }).unwrap(); + transfer.perform().unwrap(); + } + + // Copies the system nix files to /mnt/etc/nixos/ + let _garrus_nix_copy = Command::new("mv") + .args(["vm.nix", "/mnt/etc/nixos"]) + .output() + .expect("Failed to copy nix files over"); + + let mut nixos_install = Command::new("nixos-install") + .arg("--flake") + .arg("/mnt/etc/nixos#vm") + .arg("--no-root-passwd") + .stdout(Stdio::inherit()) + .stderr(Stdio::inherit()) + .spawn() + .unwrap(); + + let install_status = nixos_install.wait(); + println!("Exited with status {:?}", install_status); + + break; + } + "3" => { let mut nixos_install = Command::new("nixos-install") .arg("--flake") .arg("/mnt/etc/nixos#nixos") From bc2607c90e256324a04ea6dcc96f06bbf0ecfc0f Mon Sep 17 00:00:00 2001 From: Aaron Honeycutt Date: Sun, 20 Apr 2025 11:01:15 -0600 Subject: [PATCH 2/2] add logic for non-nvme drives --- src/main.rs | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/src/main.rs b/src/main.rs index 4cbaff9..019e4e9 100644 --- a/src/main.rs +++ b/src/main.rs @@ -50,8 +50,15 @@ fn format_drive(drive_name: &str) -> rsfdisk::Result<()> { } fn format_partitions(drive_name: &str) { - let efi_path = format!("{}p1", drive_name); - let root_path = format!("{}p2", drive_name); + // Check if drive name ends with a digit (e.g., "nvme0n1") + let suffix = if drive_name.chars().last().map(|c| c.is_ascii_digit()).unwrap_or(false) { + "p" + } else { + "" + }; + + let efi_path = format!("{}{}1", drive_name, suffix); + let root_path = format!("{}{}2", drive_name, suffix); let _efi_partition = Command::new("mkfs.fat") .arg("-F32") @@ -68,8 +75,15 @@ fn format_partitions(drive_name: &str) { } fn mount_partitions(drive_name: &str) { - let efi_path = format!("{}p1", drive_name); - let root_path = format!("{}p2", drive_name); + // Check if drive name ends with a digit (e.g., "nvme0n1") + let suffix = if drive_name.chars().last().map(|c| c.is_ascii_digit()).unwrap_or(false) { + "p" + } else { + "" + }; + + let efi_path = format!("{}{}1", drive_name, suffix); + let root_path = format!("{}{}2", drive_name, suffix); let root_source = Some(Path::new(&root_path)); let root_target = Path::new("/mnt");