Skip to content

Commit

Permalink
Add Pamac support (#953)
Browse files Browse the repository at this point in the history
  • Loading branch information
ahutsunshin authored Sep 29, 2023
1 parent 0ab8f4f commit 0a8a654
Show file tree
Hide file tree
Showing 3 changed files with 54 additions and 1 deletion.
3 changes: 2 additions & 1 deletion config.example.toml
Original file line number Diff line number Diff line change
Expand Up @@ -66,13 +66,14 @@
#greedy_cask = true

[linux]
# Arch Package Manager to use. Allowed values: autodetect, trizen, paru, yay, pikaur, pacman.
# Arch Package Manager to use. Allowed values: autodetect, trizen, paru, yay, pikaur, pacman, pamac.
#arch_package_manager = "pacman"
# Arguments to pass yay (or paru) when updating packages
#yay_arguments = "--nodevel"
#show_arch_news = true
#trizen_arguments = "--devel"
#pikaur_arguments = ""
#pamac_arguments = "--no-devel"
#enable_tlmgr = true
#emerge_sync_flags = "-q"
#emerge_update_flags = "-uDNa --with-bdeps=y world"
Expand Down
11 changes: 11 additions & 0 deletions src/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -202,6 +202,7 @@ pub enum ArchPackageManager {
Yay,
Pacman,
Pikaur,
Pamac,
}

#[derive(Deserialize, Default, Debug)]
Expand All @@ -212,6 +213,7 @@ pub struct Linux {
show_arch_news: Option<bool>,
trizen_arguments: Option<String>,
pikaur_arguments: Option<String>,
pamac_arguments: Option<String>,
dnf_arguments: Option<String>,
apt_arguments: Option<String>,
enable_tlmgr: Option<bool>,
Expand Down Expand Up @@ -696,6 +698,15 @@ impl Config {
.unwrap_or("")
}

/// Extra Pamac arguments
pub fn pamac_arguments(&self) -> &str {
self.config_file
.linux
.as_ref()
.and_then(|s| s.pamac_arguments.as_deref())
.unwrap_or("")
}

/// Show news on Arch Linux
pub fn show_arch_news(&self) -> bool {
self.config_file
Expand Down
41 changes: 41 additions & 0 deletions src/steps/os/archlinux.rs
Original file line number Diff line number Diff line change
Expand Up @@ -190,6 +190,45 @@ impl ArchPackageManager for Pikaur {
}
}

pub struct Pamac {
executable: PathBuf,
}

impl Pamac {
fn get() -> Option<Self> {
Some(Self {
executable: which("pamac")?,
})
}
}
impl ArchPackageManager for Pamac {
fn upgrade(&self, ctx: &ExecutionContext) -> Result<()> {
let mut command = ctx.run_type().execute(&self.executable);

command
.arg("upgrade")
.args(ctx.config().pamac_arguments().split_whitespace())
.env("PATH", get_execution_path());

if ctx.config().yes(Step::System) {
command.arg("--no-confirm");
}

command.check_run()?;

if ctx.config().cleanup() {
let mut command = ctx.run_type().execute(&self.executable);
command.arg("clean");
if ctx.config().yes(Step::System) {
command.arg("--no-confirm");
}
command.check_run()?;
}

Ok(())
}
}

fn box_package_manager<P: 'static + ArchPackageManager>(package_manager: P) -> Box<dyn ArchPackageManager> {
Box::new(package_manager) as Box<dyn ArchPackageManager>
}
Expand All @@ -203,12 +242,14 @@ pub fn get_arch_package_manager(ctx: &ExecutionContext) -> Option<Box<dyn ArchPa
.or_else(|| YayParu::get("yay", &pacman).map(box_package_manager))
.or_else(|| Trizen::get().map(box_package_manager))
.or_else(|| Pikaur::get().map(box_package_manager))
.or_else(|| Pamac::get().map(box_package_manager))
.or_else(|| Pacman::get(ctx).map(box_package_manager)),
config::ArchPackageManager::Trizen => 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),
}
}

Expand Down

0 comments on commit 0a8a654

Please sign in to comment.