// rocie - An enterprise grocery management system - Web app // // Copyright (C) 2026 Benedikt Peetz // SPDX-License-Identifier: GPL-3.0-or-later // // This file is part of Rocie. // // You should have received a copy of the License along with this program. // If not, see . use std::{ process::{Child, Command}, thread::sleep, time::Duration, }; struct Processes { inner: Vec, } fn main() { let mut processes = Processes { inner: vec![] }; processes.spawn_in_terminal(&[ "bash", "-c", "(cd ../rocie-server && eval \"$(direnv export bash 2>/dev/null)\" && bash -c 'cargo run --package rocie-server -- serve --port 8080')" ]); processes.spawn_in_terminal(&[ "bash", "-c", "trunk serve --proxy-backend=http://localhost:8080/ --proxy-rewrite=/api/", ]); processes.spawn_in_terminal(&[ "bash", "-c", "nix run n#floorp-bin -- http://localhost:3000", ]); loop { sleep(Duration::from_secs(2 * 60 * 60)); } } impl Drop for Processes { fn drop(&mut self) { for process in &mut self.inner { process.kill().unwrap(); } } } impl Processes { fn spawn_in_terminal(&mut self, args: &[&str]) { let mut alacritty = Command::new("alacritty"); alacritty.arg("--hold"); alacritty.arg("--command"); alacritty.args(args); eprintln!("Spawning `{:?}`", alacritty); let new_child = alacritty.spawn().unwrap(); self.inner.push(new_child); } }