summaryrefslogtreecommitdiff
path: root/src/main.rs
diff options
context:
space:
mode:
authorandromeda <andromeda@lenovo>2026-01-17 19:58:11 +0100
committerandromeda <andromeda@lenovo>2026-01-17 19:58:11 +0100
commitb51d2a4f12f58ba487366676269278ae2a445b68 (patch)
treef4b4ee262c6db2430deafa2274a407d6f4be4451 /src/main.rs
parent06c60f51c9a5fec3786c93b7b4a30286a2ae5812 (diff)
creates sh in empty environment
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/main.rs b/src/main.rs
index a0f78bc..913d5e3 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -16,7 +16,6 @@ use vte::{Params, Parser, Perform};
use zeno::{Mask, Transform};
// params
-const SHELL: &str = "/home/andromeda/.nix-profile/bin/sh";
const FONT: &str = "/home/andromeda/.nix-profile/share/fonts/truetype/Miracode.ttf";
struct Buffer<T: std::clone::Clone> {
@@ -186,7 +185,7 @@ fn main() {
.unwrap();
window.set_target_fps(60);
- let pty = spawn_pty(&SHELL).unwrap();
+ let pty = spawn_pty().unwrap();
fcntl(
&pty,
F_SETFL(OFlag::from_bits_truncate(fcntl(&pty, F_GETFL).unwrap()) | OFlag::O_NONBLOCK),
@@ -257,7 +256,7 @@ fn main() {
}
// forks a new pty and returns file descriptor of the master
-fn spawn_pty(shell: &str) -> Option<PtyMaster> {
+fn spawn_pty() -> Option<PtyMaster> {
// SAFETY safe unless os out of PTYs; incredibly unlikely
match unsafe { forkpty(None, None) } {
Ok(fork_pty_res) => match fork_pty_res {
@@ -266,7 +265,14 @@ fn spawn_pty(shell: &str) -> Option<PtyMaster> {
return Some(unsafe { PtyMaster::from_owned_fd(master) });
}
ForkptyResult::Child => {
- let _ = execv::<CString>(&CString::new(shell).unwrap(), &[]);
+ let _ = execv::<CString>(
+ &CString::new("/usr/bin/env").unwrap(),
+ &[ CString::new("/usr/bin/env").unwrap(),
+ CString::new("-i").unwrap(),
+ CString::new("sh").unwrap(),
+ CString::new("--norc").unwrap(),
+ CString::new("--noprofile").unwrap() ],
+ );
return None;
}
},