diff --git a/config.example.toml b/config.example.toml index df506e86..f614c6b9 100644 --- a/config.example.toml +++ b/config.example.toml @@ -70,10 +70,12 @@ #autoremove = true [linux] -# Arch Package Manager to use. Allowed values: autodetect, trizen, paru, yay, pikaur, pacman, pamac. +# Arch Package Manager to use. Allowed values: autodetect, trizen, aura, paru, yay, pikaur, pacman, pamac. #arch_package_manager = "pacman" # Arguments to pass yay (or paru) when updating packages #yay_arguments = "--nodevel" +#aura_aur_arguments = "-kx" +#aura_pacman_arguments = "" #show_arch_news = true #trizen_arguments = "--devel" #pikaur_arguments = "" diff --git a/src/config.rs b/src/config.rs index b5b50822..d69989cc 100644 --- a/src/config.rs +++ b/src/config.rs @@ -216,12 +216,15 @@ pub enum ArchPackageManager { Pacman, Pikaur, Pamac, + Aura, } #[derive(Deserialize, Default, Debug)] #[serde(deny_unknown_fields)] pub struct Linux { yay_arguments: Option, + aura_aur_arguments: Option, + aura_pacman_arguments: Option, arch_package_manager: Option, show_arch_news: Option, trizen_arguments: Option, @@ -268,6 +271,8 @@ pub struct ConfigFile { display_time: Option, assume_yes: Option, yay_arguments: Option, + aura_aur_arguments: Option, + aura_pacman_arguments: Option, no_retry: Option, run_in_tmux: Option, cleanup: Option, @@ -764,9 +769,27 @@ impl Config { /// Extra yay arguments pub fn yay_arguments(&self) -> &str { - get_deprecated!(self.config_file, yay_arguments, linux, yay_arguments) - .as_deref() - .unwrap_or("--devel") + self.config_file + .linux + .as_ref() + .and_then(|s| s.yay_arguments.as_deref()) + .unwrap_or("") + } + + /// Extra aura arguments for AUR and pacman + pub fn aura_aur_arguments(&self) -> &str { + self.config_file + .linux + .as_ref() + .and_then(|s| s.aura_aur_arguments.as_deref()) + .unwrap_or("") + } + pub fn aura_pacman_arguments(&self) -> &str { + self.config_file + .linux + .as_ref() + .and_then(|s| s.aura_pacman_arguments.as_deref()) + .unwrap_or("") } /// Extra apt arguments diff --git a/src/steps/os/archlinux.rs b/src/steps/os/archlinux.rs index 60e8138e..74290377 100644 --- a/src/steps/os/archlinux.rs +++ b/src/steps/os/archlinux.rs @@ -229,6 +229,53 @@ impl ArchPackageManager for Pamac { } } +pub struct Aura { + executable: PathBuf, + sudo: PathBuf, +} + +impl Aura { + fn get(ctx: &ExecutionContext) -> Option { + Some(Self { + executable: which("aura")?, + sudo: ctx.sudo().to_owned()?, + }) + } +} + +impl ArchPackageManager for Aura { + fn upgrade(&self, ctx: &ExecutionContext) -> Result<()> { + let sudo = which("sudo").unwrap_or(PathBuf::new()); + let mut aur_update = ctx.run_type().execute(&sudo); + + if sudo.ends_with("sudo") { + aur_update + .arg(&self.executable) + .arg("-Au") + .args(ctx.config().aura_aur_arguments().split_whitespace()); + if ctx.config().yes(Step::System) { + aur_update.arg("--noconfirm"); + } + + aur_update.check_run()?; + } else { + println!("Aura requires sudo installed to work with AUR packages") + } + + let mut pacman_update = ctx.run_type().execute(&self.sudo); + pacman_update + .arg(&self.executable) + .arg("-Syu") + .args(ctx.config().aura_pacman_arguments().split_whitespace()); + if ctx.config().yes(Step::System) { + pacman_update.arg("--noconfirm"); + } + pacman_update.check_run()?; + + Ok(()) + } +} + fn box_package_manager(package_manager: P) -> Box { Box::new(package_manager) as Box } @@ -243,13 +290,15 @@ pub fn get_arch_package_manager(ctx: &ExecutionContext) -> Option Trizen::get().map(box_package_manager), config::ArchPackageManager::Paru => YayParu::get("paru", &pacman).map(box_package_manager), config::ArchPackageManager::Yay => YayParu::get("yay", &pacman).map(box_package_manager), config::ArchPackageManager::Pacman => Pacman::get(ctx).map(box_package_manager), config::ArchPackageManager::Pikaur => Pikaur::get().map(box_package_manager), config::ArchPackageManager::Pamac => Pamac::get().map(box_package_manager), + config::ArchPackageManager::Aura => Aura::get(ctx).map(box_package_manager), } }