Compare commits

...

8 commits

Author SHA1 Message Date
Aaron Honeycutt
24febde5f7 messing with the spacing a bit 2025-04-10 20:58:00 -06:00
Aaron Honeycutt
110a12cf34 adding funny doggo prints 2025-04-10 20:34:04 -06:00
Aaron Honeycutt
343c8c149b boot partition is not mounting 2025-04-10 20:25:35 -06:00
Aaron Honeycutt
27bfd3eefa add mount feature for nix crate 2025-04-10 20:16:34 -06:00
Aaron Honeycutt
3182e823cc update nix-configs to rust-rewrite branch 2025-04-10 18:58:08 -06:00
Aaron Honeycutt
b7c45f60c4 fix garrus filename 2025-04-10 18:15:40 -06:00
Aaron Honeycutt
329b99443d add partition function 2025-04-10 18:09:18 -06:00
Aaron Honeycutt
df7ab3e3ad update gitignore for nix files the installer will download 2025-04-10 18:01:52 -06:00
3 changed files with 113 additions and 26 deletions

4
.gitignore vendored
View file

@ -1 +1,5 @@
/target /target
flake.nix
configuration.nix
home.nix
garrus.nix

View file

@ -5,6 +5,6 @@ edition = "2021"
[dependencies] [dependencies]
curl = "0.4.47" curl = "0.4.47"
nix = "0.29.0" nix = { version = "0.29.0", features = ["mount"] }
rsfdisk = "0.1.0" rsfdisk = "0.1.0"
sys_metrics = "0.2.7" sys_metrics = "0.2.7"

View file

@ -1,12 +1,16 @@
use std::io; use std::io;
use std::io::Write; use std::io::Write;
use std::fs;
use std::fs::File; use std::fs::File;
use std::process::Command; use std::process::Command;
use std::path::Path;
use sys_metrics::disks; use sys_metrics::disks;
use rsfdisk::fdisk::Fdisk; use rsfdisk::fdisk::Fdisk;
use rsfdisk::core::partition_table::PartitionTableKind; use rsfdisk::core::partition_table::PartitionTableKind;
use rsfdisk::core::partition::{Guid, Partition, PartitionKind}; use rsfdisk::core::partition::{Guid, Partition, PartitionKind};
use nix::mount::{mount, MsFlags};
use std::os::unix::ffi::OsStrExt;
use curl::easy::Easy; use curl::easy::Easy;
fn format_drive(drive_name: &str) -> rsfdisk::Result<()> { fn format_drive(drive_name: &str) -> rsfdisk::Result<()> {
@ -34,9 +38,11 @@ fn format_drive(drive_name: &str) -> rsfdisk::Result<()> {
let root = Partition::builder() let root = Partition::builder()
.partition_type(partition_type) .partition_type(partition_type)
.name("Root") .name("Root")
.size_in_sectors(121_634_816) // Flash drive testing
// 500GB // .size_in_sectors(121_634_816)
//.size_in_sectors(499_033_071_61) // Internal drive testing
.size_in_sectors(499_033_071_61)
// replace static int with a variable
.build()?; .build()?;
let _ = disk.partition_add(root)?; let _ = disk.partition_add(root)?;
@ -46,11 +52,80 @@ fn format_drive(drive_name: &str) -> rsfdisk::Result<()> {
Ok(()) Ok(())
} }
// fn mount_parts() {} fn format_partitions() {
let _efi_partition = Command::new("mkfs.fat")
.arg("-F32")
.arg("-n")
.arg("EFI")
// replace static path with a variable
.arg("/dev/nvme1n1p1")
.output()
.expect("Failed to partition boot partition as FAT32");
let _root_partition = Command::new("mkfs.ext4")
// replace static path with a variable
.arg("/dev/nvme1n1p2")
.output()
.expect("Failed to partition root partition as ext4");
}
fn mount_root() {
// replace static path with a variable
let root_source = Some(Path::new("/dev/nvme1n1p2"));
let root_target = Path::new("/mnt");
// unmounts root before hand to fix bugs
let _umount_root = Command::new("umount")
// replace static path with a variable
.arg("/dev/nvme1n1p2")
.output()
.expect("Failed to unmount root");
mount(
root_source,
root_target,
Some("ext4"),
MsFlags::empty(),
None::<&[u8]>,
)
.expect("Failed to mount root partition");
// Deletes the boot directory
// Shouldn't be needed with a blank drive
// So just for testing
let _delete_boot_directory = Command::new("rm")
.arg("-r")
.arg("/mnt/boot")
.output()
.expect("Failed to delete boot directory");
// Creates the boot directory in /mnt/boot
let _create_boot_directory = Command::new("mkdir")
.arg("/mnt/boot")
.output()
.expect("Failed to create boot directory");
}
fn mount_boot() {
// replace static path with a variable
let boot_source = Some(Path::new("/dev/nvme1n1p1"));
let boot_target = Path::new("/mnt/boot");
mount(
boot_source,
boot_target,
Some("vfat"),
MsFlags::empty(),
None::<&[u8]>,
)
.expect("Failed to mount boot partition");
println!("");
}
fn grab_flake() { fn grab_flake() {
let mut easy = Easy::new(); let mut easy = Easy::new();
easy.url("https://gitlab.com/ahoneybun/nix-configs/-/raw/main/flake.nix").unwrap(); easy.url("https://gitlab.com/ahoneybun/nix-configs/-/raw/rust-rewrite/flake.nix").unwrap();
let mut file = File::create("flake.nix").unwrap(); let mut file = File::create("flake.nix").unwrap();
@ -66,7 +141,7 @@ fn grab_flake() {
fn grab_config() { fn grab_config() {
let mut easy = Easy::new(); let mut easy = Easy::new();
easy.url("https://gitlab.com/ahoneybun/nix-configs/-/raw/main/configuration.nix").unwrap(); easy.url("https://gitlab.com/ahoneybun/nix-configs/-/raw/rust-rewrite/configuration.nix").unwrap();
let mut file = File::create("configuration.nix").unwrap(); let mut file = File::create("configuration.nix").unwrap();
@ -82,7 +157,7 @@ fn grab_config() {
fn grab_home() { fn grab_home() {
let mut easy = Easy::new(); let mut easy = Easy::new();
easy.url("https://gitlab.com/ahoneybun/nix-configs/-/raw/main/home.nix").unwrap(); easy.url("https://gitlab.com/ahoneybun/nix-configs/-/raw/rust-rewrite/home.nix").unwrap();
let mut file = File::create("home.nix").unwrap(); let mut file = File::create("home.nix").unwrap();
@ -119,6 +194,8 @@ fn main() {
println!(""); println!("");
println!("Use the full drive path such as /dev/nvme0n1 or /dev/sda"); println!("Use the full drive path such as /dev/nvme0n1 or /dev/sda");
println!("If you're on the Lemur nvme1n1 is the test drive");
println!("");
println!("Which drive do we want to use for this installation?: {}", drive_name); println!("Which drive do we want to use for this installation?: {}", drive_name);
io::stdin() io::stdin()
@ -131,18 +208,12 @@ fn main() {
let _ = format_drive(drive_name); let _ = format_drive(drive_name);
// Formatting the partitions // Formatting the partitions
let _efi_partition = Command::new("mkfs.fat") format_partitions();
.arg("-F32")
.arg("-n")
.arg("EFI")
.arg("/dev/sda1")
.output()
.expect("Failed to partition boot partition as FAT32");
let _root_partition = Command::new("mkfs.ext4") // Mounting the partitions
.arg("/dev/sda2") mount_root();
.output()
.expect("Failed to partition root partition as ext4"); // mount_boot();
// Download nix files // Download nix files
grab_flake(); grab_flake();
@ -156,10 +227,19 @@ fn main() {
.output() .output()
.expect("Failed to execute command"); .expect("Failed to execute command");
println!("");
println!("-------------------------");
println!("Water packed!");
println!("Treats packed!");
println!("We're ready for our walk!");
println!("-------------------------");
// Host selection // Host selection
loop { loop {
println!(""); println!("");
println!("Host selection"); println!("Host selection:");
println!("---------------");
println!("");
println!("1. Lemur Pro 13 (Garrus)"); println!("1. Lemur Pro 13 (Garrus)");
println!("2. Device 2"); println!("2. Device 2");
println!("3. Quit"); println!("3. Quit");
@ -175,7 +255,7 @@ fn main() {
let mut garrus_config = Easy::new(); let mut garrus_config = Easy::new();
garrus_config.url("https://gitlab.com/ahoneybun/nix-configs/-/raw/main/hosts/x86_64/garrus/configuration.nix").unwrap(); garrus_config.url("https://gitlab.com/ahoneybun/nix-configs/-/raw/main/hosts/x86_64/garrus/configuration.nix").unwrap();
let mut config_file = File::create("configuration.nix").unwrap(); let mut config_file = File::create("garrus.nix").unwrap();
{ {
let mut transfer = garrus_config.transfer(); let mut transfer = garrus_config.transfer();
@ -185,14 +265,17 @@ fn main() {
}).unwrap(); }).unwrap();
transfer.perform().unwrap(); transfer.perform().unwrap();
} }
break
}
"2" => {
let _nixos_install = Command::new("nixos-install") let _nixos_install = Command::new("nixos-install")
.arg("--flake") .arg("--flake")
.arg("/mnt/etc/nixos#garrus") .arg("/mnt/etc/nixos#garrus")
.output() .output()
.expect("Fiale to execute command"); .expect("Failed to execute command");
break
}
"2" => {
println!("Nix the world!");
}, },
"3" => { "3" => {
println!("Goodbye!"); println!("Goodbye!");
@ -201,4 +284,4 @@ fn main() {
_ => println!("Invalid choice, try again."), _ => println!("Invalid choice, try again."),
} }
} }
} }