1use crate::{nix::Nix, PackageManager};
2use anyhow::Error;
3use std::process::{Command, Stdio};
4
5pub struct Devbox {}
6
7impl Devbox {
8 pub fn new() -> Self {
9 Self {}
10 }
11}
12
13impl PackageManager for Devbox {
14 fn install(&self, name: &str) -> Result<(), Error> {
15 self.setup()?;
16 let mut child = Command::new("sh")
17 .arg("-c")
18 .arg(format!("devbox global add {}", name))
19 .stdin(Stdio::inherit())
20 .stdout(Stdio::inherit())
21 .stderr(Stdio::inherit())
22 .spawn()?;
23 child.wait()?;
24 Ok(())
25 }
26
27 fn uninstall(&self, name: &str) -> Result<(), Error> {
28 let mut child = Command::new("sh")
29 .arg("-c")
30 .arg(format!("devbox global rm {}", name))
31 .stdin(Stdio::inherit())
32 .stdout(Stdio::inherit())
33 .stderr(Stdio::inherit())
34 .spawn()?;
35 child.wait()?;
36 Ok(())
37 }
38
39 fn setup(&self) -> Result<(), Error> {
40 Nix::new().setup()?;
41 let mut child = Command::new("sh")
42 .arg("-c")
43 .arg("type devbox > /dev/null || curl -fsSL https://get.jetpack.io/devbox | bash")
44 .spawn()?;
45 child.wait()?;
46 Ok(())
47 }
48}