xpm
适用于任何类 Unix 发行版(包括 macOS)的通用包管理器。也支持实验性的 Windows。
适用于任何类 Unix 发行版的通用包管理器(现在使用 Rust 编写!)
以下为英文项目原文快照,最新内容请访问 GitHub。
A universal package manager for any unix-like distro including macOS. Rewritten in Rust for maximum performance and portability.
XPM is a package manager for unix systems like Linux, BSD, MacOS, etc. It can be a wrapper for native package managers or a package manager itself by using its way of installing packages. For the list of packages available, see xpm-popular.
These systems get full native package manager integration with intelligent search, metadata extraction, and clean formatted output.
For other systems, XPM provides script-based installation through the xpm-popular repository:
Linux Distributions:
macOS → Homebrew (brew) - via scripts
curl -fsSL install.cat/verseles/xpm
# Clone the repository
git clone https://github.com/verseles/xpm.git
cd xpm
# Build
cargo build --release
# Install to /usr/local/bin
sudo cp target/release/xpm /usr/local/bin/
cargo install --git https://github.com/verseles/xpm.git
# Check your system
xpm check
# Add the default repository (pulls from xpm-popular)
xpm refresh
# Search for packages (searches XPM + native PM)
xpm search neovim
# Install a package
xpm install neovim
# Remove a package
xpm remove neovim
| Command | Alias | Description |
|---|---|---|
search |
s |
Search for packages (XPM + native PM) |
install |
i |
Install a package |
remove |
rm |
Remove a package |
refresh |
- | Refresh package database |
upgrade |
- | Upgrade installed packages (coming soon) |
get |
- | Download a file |
file |
- | File operations (copy, move, delete, bin) |
repo |
- | Repository management |
checksum |
hash |
Compute file checksums |
shortcut |
- | Create desktop shortcuts |
log |
- | Show installed packages |
check |
- | Check system configuration |
make |
- | Create a package (coming soon) |
# Basic search
xpm search vim
# Multiple terms
xpm search text editor
# Limit results
xpm search rust --limit 10
# JSON output (for scripts)
xpm search go --json
XPM is built as a Rust workspace with two crates:
Packages are bash scripts with metadata headers:
#!/bin/bash
readonly xNAME="my-package"
readonly xVERSION="1.0.0"
readonly xTITLE="My Package"
readonly xDESC="Description of my package"
readonly xURL="https://example.com"
xARCHS=(x86_64 aarch64)
xDEFAULT=(any)
install_any() {
# Installation logic
echo "Installing..."
}
remove_any() {
# Removal logic
echo "Removing..."
}
validate() {
# Validation - return 0 if installed correctly
which my-package >/dev/null
}
Save as my-package/my-package.bash in your repository.
my-xpm-repo/
├── package1/
│ └── package1.bash
├── package2/
│ └── package2.bash
└── ...
# Development build
cargo build
# Release build (optimized)
cargo build --release
# Run tests
cargo test
# Run with verbose output
cargo run -- --verbose check
# Pre-commit checks (format + lint + test)
make precommit
Test xpm on different distributions using Podman:
# Build and test on Ubuntu
make test-ubuntu
# Build and test on Arch Linux
make test-arch
# Build and test all distros
make docker-test
# Clean container images
make docker-clean
Contributions are welcome! Please:
cargo test and cargo clippyBSD-4-Clause
Built with ❤️ by Verseles