mirror of
https://gitlab.com/ahoneybun/nyxi-installer.git
synced 2025-05-12 11:04:02 -06:00
Compare commits
8 commits
4e567a79b0
...
24febde5f7
Author | SHA1 | Date | |
---|---|---|---|
![]() |
24febde5f7 | ||
![]() |
110a12cf34 | ||
![]() |
343c8c149b | ||
![]() |
27bfd3eefa | ||
![]() |
3182e823cc | ||
![]() |
b7c45f60c4 | ||
![]() |
329b99443d | ||
![]() |
df7ab3e3ad |
3 changed files with 113 additions and 26 deletions
4
.gitignore
vendored
4
.gitignore
vendored
|
@ -1 +1,5 @@
|
||||||
/target
|
/target
|
||||||
|
flake.nix
|
||||||
|
configuration.nix
|
||||||
|
home.nix
|
||||||
|
garrus.nix
|
||||||
|
|
|
@ -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"
|
||||||
|
|
133
src/main.rs
133
src/main.rs
|
@ -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."),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue