diff --git a/codchi/src/platform/cmd/linux.rs b/codchi/src/platform/cmd/linux.rs index b3c3248..aba1c5f 100644 --- a/codchi/src/platform/cmd/linux.rs +++ b/codchi/src/platform/cmd/linux.rs @@ -32,6 +32,19 @@ pub trait LinuxCommandTarget { } } + fn raw(&self, program: &str, args: &[&str]) -> LinuxCommandBuilder { + LinuxCommandBuilder { + driver: self.get_driver(), + program: Program::Raw { + program: program.to_string(), + args: args.iter().map(|arg| arg.to_string()).collect(), + }, + user: None, + cwd: None, + env: HashMap::new(), // output: Output::Collect, + } + } + fn script(&self, script: String) -> LinuxCommandBuilder { LinuxCommandBuilder { driver: self.get_driver(), @@ -66,6 +79,7 @@ pub struct LinuxCommandBuilder { #[derive(Debug, Clone)] pub enum Program { Run { program: String, args: Vec }, + Raw { program: String, args: Vec }, Script(String), } @@ -107,6 +121,12 @@ impl From for Command { cmd.arg("runin"); cmd.stdin(Stdio::piped()); } + Program::Raw { program, args } => { + cmd.arg(program); + for arg in args.iter() { + cmd.arg(arg); + } + } }; cmd } diff --git a/codchi/src/platform/machine.rs b/codchi/src/platform/machine.rs index 6f161be..11cd5ee 100644 --- a/codchi/src/platform/machine.rs +++ b/codchi/src/platform/machine.rs @@ -401,17 +401,17 @@ git add flake.* set_progress_status(format!("Starting {}...", self.config.name)); self.start()?; - let cmd = match cmd.split_first() { - Some((cmd, args)) => self - .cmd() - .run(cmd, &args.iter().map(|str| str.as_str()).collect_vec()), - None => self.cmd().run("bash", &["-l"]), - }; + let args = [ + vec![consts::user::DEFAULT_NAME], + cmd.iter().map(|str| str.as_str()).collect_vec(), + ] + .concat(); + let cmd = self.cmd().raw("su", &args); hide_progress(); cmd.with_cwd(consts::user::DEFAULT_HOME.clone()) - .with_user(LinuxUser::Default) + .with_user(LinuxUser::Root) .exec()?; Ok(()) } diff --git a/tests/windows.ps1 b/tests/windows.ps1 index 8382440..b57ff28 100644 --- a/tests/windows.ps1 +++ b/tests/windows.ps1 @@ -16,6 +16,6 @@ Describe "codchi.msix" { { codchi.exe -vv clone codchi https://github.com/aformatik/codchi nixosModules.codchi } | Should -Not -Throw } It "builds codchi inside codchi" { - { codchi.exe exec -vv codchi bash -lc 'cd codchi/codchi && direnv allow && cargo run -- --version' } | Should -Not -Throw + { codchi.exe exec -vv codchi bash -lc 'cd codchi/codchi && nix develop -c cargo run -- --version' } | Should -Not -Throw } }