1use anyhow::Result;
2
3use crate::{colors, config::Config};
4
5pub async fn handle_init(yes: bool) -> Result<()> {
6 let current_dir = std::env::current_dir()?;
7 let display_dir = tokio::fs::canonicalize(¤t_dir)
8 .await
9 .unwrap_or(current_dir);
10
11 if !yes && !confirm_init(&display_dir)? {
12 println!("{}", colors::dim("Init cancelled."));
13 return Ok(());
14 }
15
16 let path = Config::init_current_dir_config().await?;
17 println!(
18 "{}",
19 colors::green(&format!("Initialized shine config at {}", path.display()))
20 );
21 println!(
22 "{}",
23 colors::dim(&format!("presets_dir = {}", display_dir.display()))
24 );
25 Ok(())
26}
27
28fn confirm_init(dir: &std::path::Path) -> Result<bool> {
29 use std::io::Write as _;
30
31 print!(
32 "Initialize {} as the shine presets directory? [y/N] ",
33 dir.display()
34 );
35 std::io::stdout().flush()?;
36
37 let mut input = String::new();
38 std::io::stdin().read_line(&mut input)?;
39 let answer = input.trim();
40 Ok(answer.eq_ignore_ascii_case("y") || answer.eq_ignore_ascii_case("yes"))
41}