Morganamilo/paru · error

can not install conflicting packages with --noconfirm

Error message

can not install conflicting packages with --noconfirm

What it means

check_actions detects file or package conflicts within the planned transaction. Normally paru (like pacman) asks the user to confirm conflict resolution interactively (printing 'Conflicting packages will have to be confirmed manually'); when --noconfirm is set there is no way to answer, so it bails immediately instead of hanging or making unsafe default choices.

Solutions

  1. Remove --noconfirm and run interactively to answer conflict prompts
  2. Pre-resolve the conflict: remove the conflicting package first (`paru -R <conflicting-pkg> --noconfirm`)
  3. Use `--ask 4` style pacman conflict handling via pacman flags if appropriate
  4. Change your package set so no conflicts are present in one transaction

Example fix

// before
$ paru -S newpkg --noconfirm   # conflicts with oldpkg
// after
$ paru -R oldpkg --noconfirm && paru -S newpkg --noconfirm
Defensive patterns

Strategy: validation

Validate before calling

// dry-run first to detect conflicts before --noconfirm runs
paru -S "$PKGS" --print-format '%n' >/dev/null || exit 1

Prevention

When it happens

Trigger: Running e.g. `paru -S pkg1 pkg2 --noconfirm` where the planned install contains conflicting packages/files (conflicts/inner_conflicts non-empty) and config.no_confirm is true.

Common situations: CI/automation scripts using --noconfirm that pull in conflicting packages; installing a package that replaces/conflicts with an installed one; file conflicts between repo and AUR packages.

Understand the failure class

Background: Conflicting config options: "cannot be used together" — configuration validation errors across open-source libraries — this error's family across 162 libraries.

Related errors


AI-assisted analysis of Morganamilo/paru@9ac3578807 (2026-09-12). Data as JSON: /api/errors/8b55cf573fd704b4. Report an issue: GitHub.

Appendix: source

Thrown at src/install.rs:1471

                    eprint!(" ({})", conflict);
                }
                eprint!("  ");
            }
            eprintln!();
        }
        eprintln!();
    }

    if (!conflicts.is_empty() || !inner_conflicts.is_empty()) && !config.use_ask {
        eprintln!(
            "{} {}",
            c.warning.paint("::"),
            c.bold.paint(tr!(
                "Conflicting packages will have to be confirmed manually"
            ))
        );
        if config.no_confirm {
            bail!(tr!("can not install conflicting packages with --noconfirm"));
        }
    }

    Ok((conflicts, inner_conflicts))
}

fn repo_install(
    config: &Config,
    install: &[RepoPackage],
    conflicts: &HashSet<String>,
) -> Result<i32> {
    if install.is_empty() {
        return Ok(0);
    }

    let mut deps = Vec::new();
    let mut exp = Vec::new();

View on GitHub (pinned to 9ac3578807)