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 Runningbrew 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 ```
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.
pacaptr
currently supports the following package managers (in order of precedence):
brew
port
apt
(through [Procursus])apt
apk
dnf
emerge
xbps
zypper
pacaptr --using <name>
syntax.
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.
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
Debian
bash
cargo install cargo-deb
cargo deb
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:
If the user hasn't yet specified any path to look at, we will look for the config file in the default path.
If the config file is not present anyway, a default one will be loaded with Default::default
, and no files will be written.
Any config item can be overridden by the corresponding PACAPTR_*
environment variable. For example, PACAPTR_NEEDED=false
is prioritized over needed = true
in pacaptr.toml
.
Example
```toml
install
instead ofreinstall
in pacaptr -S
needed = true
default_pm = "choco"
```
--using
, --pm
Use this flag to explicitly specify the underlying package manager to be invoked.
```bash
choco
,pacaptr --using choco -Su --dryrun
```
This can be useful when you are running Linux and you want to use linuxbrew
, for example. In that case, you can --using brew
.
sudo
invocationIf 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
.
The flags after a --
will be passed directly to the underlying package manager:
```bash pacaptr -h
pacaptr -S curl docker --dryrun -- --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
brew install curl
won't run:pacaptr -S curl --dryrun
brew cleanup --dry-run
is actually running:pacaptr -Sc --dryrun
--dryrun
:pacaptr -Sc
```
--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.
brew
Please note that cask
is for macOS
only.
Be careful when a formula and a cask share the same name, e.g. docker
.
```bash pacaptr -Si docker | rg cask
docker
pacaptr -S docker
docker
pacaptr -S homebrew/cask/docker
pacaptr -S docker -- --cask ```
scoop
pacaptr
launches a pwsh
subprocess to run scoop
, or a powershell
one if pwsh
is not found in $PATH
. Please make sure that you have set the right execution policy in the corresponding shell:
pwsh
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
choco
pip
pacaptr --using pip3
if you want to run the pip3
command.Sounds nice! Please let me take you to the contributing guidelines :)