pacaptr

pacaptr

Crates.io docs.rs Private APIs License

pac·apt·r, or the PACman AdaPTeR, is a wrapper for many package managers that allows you to use pacman commands with them.

Just set pacman as the alias of pacaptr on your non-Arch OS, and then you can run pacman -Syu wherever you like!

```smalltalk

pacaptr -S neofetch Pending brew reinstall neofetch Proceed with the previous command? · Yes Running brew reinstall neofetch ==> Downloading https://homebrew.bintray.com/bottles/neofetch-7.1.0

##################################################### 100.0%

==> Reinstalling neofetch ==> Pouring neofetch-7.1.0.big_sur.bottle.tar.gz 🍺 /usr/local/Cellar/neofetch/7.1.0: 6 files, 351.7KB ```


Contents


Why pacaptr?

Coming from Arch Linux to macOS, I really like the idea of having an automated version of [Pacman Rosetta] for making common package managing tasks less of a travail thanks to the concise pacman syntax.

That's why I decided to take inspiration from the existing sh-based [icy/pacapt] to make a new CLI tool in Rust for better portability (especially for Windows and macOS) and easier maintenance.

Supported Package Managers

pacaptr currently supports the following package managers (in order of precedence):

As for now, the precedence is still (unfortunately) hard-coded. For example, if both scoop and choco are installed, scoop will be the default. You can, however, edit the default package manager in your config.

Please refer to the [compatibility table] for more details on which operations are supported.

Installation

We need your help to achieve binary distribution of pacaptr on more platforms!

brew

bash brew install rami3l/tap/pacaptr

scoop

powershell scoop bucket add extras scoop install pacaptr

choco

powershell choco install pacaptr

cargo

To install the release version from crates.io:

bash cargo install pacaptr

To install the master version from GitHub:

bash cargo install pacaptr --git https://github.com/rami3l/pacaptr.git

To clone and install (for the interested Rustaceans):

bash git clone https://github.com/rami3l/pacaptr.git && cd pacaptr cargo install --path . # Output path is usually `$HOME/.cargo/bin/pacaptr`.

To uninstall:

bash cargo uninstall pacaptr

For Alpine Linux users, cargo build might not just work. Please try the following instead:

bash RUSTFLAGS="-C target-feature=-crt-static" cargo build

Packaging for Debian

bash cargo install cargo-deb cargo deb

Configuration

The default path for the config file is $HOME/.config/pacaptr/pacaptr.toml, which can be overridden by the PACAPTR_CONFIG environment variable.

I decided not to trash user's $HOME without their permission, so:

Example

```toml

This enforces the use of install instead of

reinstall in pacaptr -S

needed = true

Explicitly set the default package manager

default_pm = "choco"

dry_run = false

no_confirm = false

no_cache = false

```

Tips

Universal

--using, --pm

Use this flag to explicitly specify the underlying package manager to be invoked.

```bash

Here we force the use of choco,

so the following output is platform-independent:

pacaptr --using choco -Su --dryrun

Canceled: choco upgrade all

```

This can be useful when you are running Linux and you want to use linuxbrew, for example. In that case, you can --using brew.

Automatic sudo invocation

If you are not root and you wish to do something requiring sudo, pacaptr will do it for you by invoking sudo -S.

This feature is currently available for apk, apt, dnf, emerge, pkcon, port, xbps and zypper.

Extra flags support

The flags after a -- will be passed directly to the underlying package manager:

```bash pacaptr -h

USAGE:

pacaptr [FLAGS] [KEYWORDS]... [-- ...]

pacaptr -S curl docker --dryrun -- --proxy=localhost:1234

Canceled: foo install curl --proxy=localhost:1234

Canceled: foo install docker --proxy=localhost:1234

```

Here foo is the name of your package manager. (The actual output is platform-specific, which largely depends on if foo can actually read the flags given.)

--dryrun, --dry-run

Use this flag to just print out the command to be executed (sometimes with a --dry-run flag to activate the package manager's dryrun option).

Pending means that the command execution has been blocked by a prompt; Canceled means it has been canceled in a dry run; Running means that it has started running.

Some query commands might still be run, but anything "big" should have been stopped from running, e.g. installation. For instance:

```bash

Nothing will be installed,

as brew install curl won't run:

pacaptr -S curl --dryrun

Canceled: brew install curl

Nothing will be deleted here,

but brew cleanup --dry-run is actually running:

pacaptr -Sc --dryrun

Running: brew cleanup --dry-run

.. (showing the files to be removed)

To remove the forementioned files,

run the command above again without --dryrun:

pacaptr -Sc

Running: brew cleanup

.. (cleaning up)

```

--yes, --noconfirm, --no-confirm

Use this flag to trigger the corresponding flag of your package manager (if possible) in order to answer "yes" to every incoming question.

This option is useful when you don't want to be asked during installation, for example, but it can also be dangerous if you don't know what you're doing!

--nocache, --no-cache

Use this flag to remove cache after package installation.

This option is useful when you want to reduce Docker image size, for example.

Platform-Specific Tips

For brew

For scoop

For choco

For pip

Feel Like Contributing?

Sounds nice! Please let me take you to the contributing guidelines :)