1#![feature(exit_status_error)]
11
12use rootcause::report;
13use ytil_cmd::CmdExt as _;
14use ytil_sys::cli::Args;
15
16mod cmd;
17
18const SESSION_NAME: &str = "agm";
19const LAYOUT_NAME: &str = "agm";
20
21fn launch_session(args: &[String]) -> rootcause::Result<()> {
22 let session_name = args.first().map_or(SESSION_NAME, String::as_str);
23
24 if ytil_zellij::list_sessions().is_ok_and(|sessions| sessions.iter().any(|s| s.name == session_name)) {
25 ytil_zellij::attach_session(session_name)?;
26 return Ok(());
27 }
28
29 if ytil_zellij::is_active() {
30 ytil_cmd::silent_cmd("zellij")
31 .args(["--new-session-with-layout", LAYOUT_NAME, "--session", session_name])
32 .exec()?;
33 return Ok(());
34 }
35
36 ytil_zellij::new_session_with_layout(session_name, LAYOUT_NAME)
37}
38
39#[ytil_sys::main]
40fn main() -> rootcause::Result<()> {
41 let args = ytil_sys::cli::get();
42
43 if args.has_help() {
44 println!("{}", include_str!("../help.txt"));
45 return Ok(());
46 }
47
48 match args.first().map(String::as_str) {
49 Some("install") => {
50 let is_debug = args.iter().any(|a| a == "--debug");
51 cmd::install::install_plugin_and_hooks(is_debug)
52 }
53 Some("git-stat") => {
54 let paths = args.get(1..);
55 for cwd in paths.into_iter().flatten() {
56 let stat = cmd::git_stat::run(cwd);
57 println!("{cwd} {stat}");
58 }
59 Ok(())
60 }
61 Some("sessions") => cmd::sessions::run(),
62 None => launch_session(&args),
63 Some(unknown) => Err(report!("unknown argument").attach(format!("argument={unknown}"))),
64 }
65}