envhub_pkgs/
devbox.rs

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}