diff --git a/Cargo.lock b/Cargo.lock index c0a4bc7..d988d46 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -242,18 +242,18 @@ dependencies = [ [[package]] name = "lru" -version = "0.18.0" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a860605968fce16869fd239cf4237a82f3ac470723415db603b0e8b6c8d4fb9" +checksum = "0b6180140927ee907000b0aa540091f6ea512ead4447c92b8fc35bc72788a5a6" dependencies = [ "hashbrown 0.17.1", ] [[package]] name = "memchr" -version = "2.8.2" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88904434abc2901f197fe8cc55f0445e7ded921dba5911dad2e2b39b48e663c4" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "num-conv" @@ -287,7 +287,7 @@ checksum = "6aa2c4e539b869820a2b82e1aef6ff40aa85e65decdd5185e83fb4b1249cd00f" [[package]] name = "nyanit" -version = "0.1.2" +version = "0.1.3" dependencies = [ "ratatui", "ratatui-textarea", @@ -342,18 +342,18 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.45" +version = "1.0.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +checksum = "dfbc457d0c7a0759a614551b11a6409e5951f6c7537be1f1b7682b9ae9230368" dependencies = [ "proc-macro2", ] [[package]] name = "ratatui" -version = "0.30.1" +version = "0.30.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1695748e3a735b34968c887ceea5a380b43545903868ae8f5b666593100f6b68" +checksum = "3274ba0a2c5e1bcad2a2005d20f4dc59dad26b2eb0940fb094500dba4099d57d" dependencies = [ "instability", "ratatui-core", @@ -364,14 +364,13 @@ dependencies = [ [[package]] name = "ratatui-core" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42d3603f354bba8c595fa47860e60142d7372b7210c27044c6a7d0e1a4336b44" +checksum = "cbb175c433c8e28a809d1f5773a2ae96e68c0ce40db865cbab1020bf33ae479c" dependencies = [ "bitflags", "compact_str", "hashbrown 0.17.1", - "indoc", "itertools", "kasuari", "lru", @@ -386,9 +385,9 @@ dependencies = [ [[package]] name = "ratatui-termion" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c16cc35a9d9114e0b2bb4b22018b96ae7f5fe60e2595dc73e622b4e78624835" +checksum = "87c732202fa5a71a9da0991013f0853e53f87048f45198e3a1ca3ee722accc2f" dependencies = [ "instability", "ratatui-core", @@ -410,9 +409,9 @@ dependencies = [ [[package]] name = "ratatui-widgets" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ef4f17dd7ac3abf5adc2b920a03c61eee4bfe6a88fa5191936895525371d79c" +checksum = "66e3d19bcc9130ca376277d93b60767ff121ace3be06f5f95f81dd68956407d1" dependencies = [ "bitflags", "hashbrown 0.17.1", @@ -430,9 +429,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.12.4" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1292b7759ae1cb9ec195452d1390a074f0cd8541ab7a5a8c31cd6db45d4a6ba" +checksum = "2a0e75113e14dc5acb068cd0786884f214f1312650a3d36d269f5c4f3cdee8a2" dependencies = [ "aho-corasick", "memchr", @@ -442,9 +441,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.14" +version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" +checksum = "1f388202e4b80542a0921078cc23b6333bcf1409c1e3f86404cae4766a6131db" dependencies = [ "aho-corasick", "memchr", @@ -459,9 +458,9 @@ checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" [[package]] name = "rustversion" -version = "1.0.22" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" +checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" [[package]] name = "ryu" @@ -534,9 +533,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.117" +version = "2.0.118" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +checksum = "1b9ae57f904213ebb649ce6895b8a66c66f0203b9319718f69a5612a065b1422" dependencies = [ "proc-macro2", "quote", @@ -575,9 +574,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.49" +version = "0.3.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "711a53c2d47bbd818258c498c8dbfe186a2526c631495cfe7e078567f86b8469" +checksum = "18dfaaeddcb932337b5e7866ee7d0ce9b76d2fd092997146f187ec09b4558a50" dependencies = [ "deranged", "libc", diff --git a/Cargo.toml b/Cargo.toml index 007d775..8d85579 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,12 +1,12 @@ [package] name = "nyanit" -version = "0.1.2" +version = "0.1.3" edition = "2024" [dependencies] ratatui = { version = "0.30", default-features = false, features = ["termion"] } ratatui-textarea = { version = "0.9", default-features = false, features = ["termion"] } -regex = "1.12" +regex = "1.1" termion = "4" diff --git a/src/main.rs b/src/main.rs index 40438af..6cb98cb 100644 --- a/src/main.rs +++ b/src/main.rs @@ -92,10 +92,10 @@ fn mount_and_check_snaps() -> Result { fn init_stage() -> Result { // mount sysfss - nyan_system::prepare_env()?; + nyan_system::prepare_env().map_err(|ex| format!("prepare_env error: {}", ex))?; // check if device is encrypted - if nyan_system::bzzpss_dev_encrypted(ROOT_DEV)? { + if nyan_system::bzzpss_dev_encrypted(ROOT_DEV).map_err(|ex| format!("Error checking if device is encrypted: {}", ex))? { // if encrypted return EnterPassword so used get promted for pass return Ok(NyanitState::EnterPassword); } @@ -337,7 +337,10 @@ impl NyanitTUI<'_> { } } + + fn main() -> ExitCode { + nyan_system::set_env_vars_unsafe(); let mut app = NyanitTUI::new().unwrap(); app.run().unwrap(); // Terminal restores automatically when `stdout` (RawTerminal) is dropped diff --git a/src/nyan_system.rs b/src/nyan_system.rs index fd3f3b9..1faf69c 100644 --- a/src/nyan_system.rs +++ b/src/nyan_system.rs @@ -227,6 +227,31 @@ pub fn prepare_env() -> Result<(), ExecCommandError> { Ok(()) } +/// +/// MUST be done before spawning any threads or async runtimes +pub fn set_env_vars_unsafe() -> () { + use std::env; + // 1. Define your custom paths + let custom_bin = "/usr/bin"; + let custom_lib = "/usr/lib"; + + // 2. Retrieve existing paths to append/prepend (optional but recommended) + let existing_path = env::var("PATH").unwrap_or_else(|_| String::new()); + let existing_ld_path = env::var("LD_LIBRARY_PATH").unwrap_or_else(|_| String::new()); + + // 3. Construct new path strings + // Prepend custom paths so they take precedence + let new_path = format!("{}:{}", custom_bin, existing_path); + let new_ld_path = format!("{}:{}", custom_lib, existing_ld_path); + + // 4. Set environment variables (UNSAFE in Rust 2024+) + // MUST be done before spawning any threads or async runtimes + unsafe { + env::set_var("PATH", new_path); + env::set_var("LD_LIBRARY_PATH", new_ld_path); + } +} + // # Mount the real root filesystem pub fn mount_bee_root(mount_point: &str, dev_name: &str) -> Result<(), ExecCommandError> { exec_command("mount", &vec!["-o", "ro", dev_name, mount_point])?;