use clap::{Parser, Subcommand};
pub mod commands;
pub mod database;
pub mod git;
use commands::{
add, auto_update, deploy, init, link, list, log, push, remove, summary, uninstall, unlink,
update,
};
#[derive(Parser)]
#[command(name = "adof")]
#[command(version = "v0.10.0")]
#[command(author = "Abinash S. <fnabinash@gmail.com>")]
#[command(about = "ADOF - An Automatic Dot-files Organizer Friend", long_about = None)]
struct Cli {
#[command(subcommand)]
command: Commands,
}
#[derive(Subcommand)]
enum Commands {
Init,
Add,
Remove,
List,
Link {
link: String,
},
Push,
Update {
#[arg(short, long, default_value = "false")]
check: bool,
},
AutoUpdate {
#[arg(default_value = "60")]
min: u64,
},
Log {
#[arg(default_value = "0")]
num: u8,
#[arg(short, long, default_value = "false")]
remote: bool,
},
Summary,
Deploy {
#[arg(default_value = "")]
link: String,
#[arg(short, long, default_value = "")]
commit: String,
},
Unlink,
Uninstall,
Sponsor,
}
#[tokio::main]
async fn main() {
let cli = Cli::parse();
match &cli.command {
Commands::Init => {
init::init().await;
}
Commands::Add => {
add::add().await;
}
Commands::Remove => {
remove::remove();
}
Commands::List => {
list::list();
}
Commands::Link { link } => {
link::link(link);
}
Commands::Push => {
push::push();
}
Commands::Update { check } => {
update::update(*check);
}
Commands::AutoUpdate { min } => {
auto_update::auto_update(*min).await;
}
Commands::Log { num, remote } => {
log::log(*num, *remote);
}
Commands::Summary => {
summary::summary();
}
Commands::Deploy { link, commit } => {
deploy::deploy(link, commit);
}
Commands::Unlink => {
unlink::unlink();
}
Commands::Uninstall => {
uninstall::uninstall();
}
Commands::Sponsor => {
webbrowser::open("https://github.com/sponsors/fnabinash").unwrap();
}
}
}