1mod image;
12mod seed;
13mod ssh;
14
15use std::path::PathBuf;
16
17pub use image::{prepare_image, Arch, ImageSpec, PreparedImage};
18pub use seed::{
19 create_seed_iso, HealthCheckConfig, NicConfig, ProcessConfig, SeedConfig, VolumeMountConfig,
20};
21pub use ssh::generate_ssh_key;
22
23pub fn data_dir() -> Result<PathBuf, SetupError> {
27 if let Ok(dir) = std::env::var("VMRS_DATA_DIR") {
28 return Ok(PathBuf::from(dir));
29 }
30 let home = std::env::var("HOME").map_err(|_| {
31 SetupError::Config(
32 "HOME environment variable not set. Set VMRS_DATA_DIR explicitly.".into(),
33 )
34 })?;
35 Ok(PathBuf::from(home).join(".vm-rs"))
36}
37
38#[derive(Debug, thiserror::Error)]
44pub enum SetupError {
45 #[error("I/O error: {0}")]
46 Io(#[from] std::io::Error),
47
48 #[error("ISO creation failed: {0}")]
49 IsoCreation(String),
50
51 #[error("asset download failed: {0}")]
52 AssetDownload(String),
53
54 #[error("configuration error: {0}")]
55 Config(String),
56
57 #[error("unsupported image: {0}")]
58 UnsupportedImage(String),
59}