warren-cli 0.1.6

Install any CLI tool unlimited times. Every instance is its own world.
use anyhow::{Result, bail};

use crate::config::WarrenConfig;
use crate::instance::{InstanceLayout, Launcher};
use crate::ui::theme::Theme;

pub async fn execute(config: &WarrenConfig, theme: &Theme, alias: &str, yes: bool) -> Result<()> {
    let layout = InstanceLayout::new(&config.paths.instances_dir, alias);
    if !layout.exists() {
        bail!("instance '{}' not found", alias);
    }
    if !yes {
        use dialoguer::Confirm;
        let confirm = Confirm::new()
            .with_prompt(format!("Remove instance '{}' and all its data?", alias))
            .default(false)
            .interact()?;
        if !confirm {
            theme.warn("Aborted.");
            return Ok(());
        }
    }
    Launcher::uninstall(&config.paths.bin_dir, alias)?;
    // Best-effort: legacy instances never had one, and a missing file is fine.
    crate::app::desktop::uninstall(alias).ok();
    layout.destroy()?;
    theme.success(&format!("Removed instance '{}'", alias));
    Ok(())
}