use std::path::Path; use std::{env, path::PathBuf}; use tokio::fs; use crate::error::AppResult; use crate::task::base_task::ALL_BASE_TASKS; const DEFAULT_CONFIG_DIR: &str = "/etc"; lazy_static::lazy_static! { pub static ref CFG_PATH: PathBuf = env::var("TRM_CFG_PATH").map(PathBuf::from).unwrap_or_else(|_| PathBuf::from(DEFAULT_CONFIG_DIR).join("tourmaline")); } pub async fn generate_script_files>(output: P) -> AppResult<()> { let output = output.as_ref(); for task in &*ALL_BASE_TASKS { let key_data = task.key_data(); let name = key_data.task_name; let script_dir = output.join(name); if !script_dir.exists() { fs::create_dir_all(&script_dir).await?; } let up_path = output.join("up.nu"); let down_path = output.join("down.nu"); fs::write( &up_path, format!( r#"# Applies all system changes of `{name}` def main [cfg] {{ echo "Executing up task `{name}` with config" $cfg }} "# ), ) .await?; fs::write( &down_path, format!( r#"# Reverts all system changes of `{name}` def main [cfg] {{ echo "Executing up task `{name}` with config" $cfg }} "# ) .trim(), ) .await?; } Ok(()) }