mod mods; use mods::{ clearcache::clearcache, clone::clone, database::create_database, help::help, inssort::{inssort, inssort_from_file}, install::install, purge::{purge, purge_from_file}, search::{a_search, r_search}, stat_database::*, statpkgs::*, strs::err_rec, strs::err_unrec, strs::inf, uninstall::{uninstall, uninstall_from_file}, update::update, upgrade::upgrade, ver::ver, xargs::*, }; use std::{env, process::exit}; fn main() { extern "C" { fn geteuid() -> u32; } if unsafe { geteuid() } == 0 { // check if user runs ame as root err_unrec( "Do not run ame as root! this can cause serious damage to your system!".to_string(), ); } let args: Vec = env::args().skip(1).collect(); let mut pkgs: Vec = env::args().skip(2).collect(); if args.is_empty() { help(); exit(1); } let file = format!("{}/.local/share/ame/aur_pkgs.db", env::var("HOME").unwrap()); if !std::path::Path::new(&file).exists() { create_database(); } let oper = &args[0]; let noconfirm: bool = noconf(&args); argssort(&mut pkgs); match oper.as_str() { // match oper "-S" | "-Sn" | "ins" => { inssort(noconfirm, false, pkgs); // install } "-Sl" | "-Sln" | "insl" => { inssort_from_file(noconfirm, false, &pkgs[0]); // install from file } "-B" | "-Bn" | "build" => { rebuild(noconfirm); // install as a dependency } "-R" | "-Rn" | "rm" => { uninstall(noconfirm, pkgs); // uninstall } "-Rs" | "-Rsn" | "purge" => { purge(noconfirm, pkgs); // purge } "-Rl" | "-Rln" | "rml" => { uninstall_from_file(noconfirm, &pkgs[0]); // uninstall from file } "-Rsl" | "-Rsln" | "purgel" => { purge_from_file(noconfirm, &pkgs[0]); // purge from file } "-Syu" | "-Syun" | "upg" => { upgrade(noconfirm); // upgrade } "-Sy" | "upd" => { update(); // update } "-Ss" | "sea" => { r_search(&args[1]); // search for packages in the repository a_search(&args[1]); // search for packages in the aur } "-Sa" | "aursea" => { a_search(&args[1]); // search for packages in the aur } "-Sr" | "repsea" => { r_search(&args[1]); // search for packages in the repository } "-Cc" | "clr" => { clearcache(); // clear cache } "-v" | "-V" | "ver" => { ver(); // version } "-h" | "help" => { help(); // help } _ => { // if oper is not valid it either passes the args to pacman or prints an error let pass = runas::Command::new("pacman") .args(&args) .status() .expect("Something has gone wrong."); match pass.code() { Some(1) => { err_rec(format!("No such operation \"{}\"", args.join(" "))); inf("Try running \"ame help\" for an overview of how to use ame".to_string()) } Some(_) => {} None => err_unrec("Something has gone terribly wrong.".to_string()), } } } }