mod image;
mod seed;
mod ssh;
use std::path::PathBuf;
pub use image::{prepare_image, Arch, ImageSpec, PreparedImage};
pub use seed::{
create_seed_iso, HealthCheckConfig, NicConfig, ProcessConfig, SeedConfig, VolumeMountConfig,
};
pub use ssh::generate_ssh_key;
pub fn data_dir() -> Result<PathBuf, SetupError> {
if let Ok(dir) = std::env::var("VMRS_DATA_DIR") {
return Ok(PathBuf::from(dir));
}
let home = std::env::var("HOME").map_err(|_| {
SetupError::Config(
"HOME environment variable not set. Set VMRS_DATA_DIR explicitly.".into(),
)
})?;
Ok(PathBuf::from(home).join(".vm-rs"))
}
#[derive(Debug, thiserror::Error)]
pub enum SetupError {
#[error("I/O error: {0}")]
Io(#[from] std::io::Error),
#[error("ISO creation failed: {0}")]
IsoCreation(String),
#[error("asset download failed: {0}")]
AssetDownload(String),
#[error("configuration error: {0}")]
Config(String),
#[error("unsupported image: {0}")]
UnsupportedImage(String),
}