DPMS v1.1.0 — Full Feature List
CLI (dpms) — 120+ flags/arguments
Package Lifecycle
--install PKG/-i— Install a package (local.dp.tar.xz, URL, or name from git repo)--uninstall PKG/-r— Remove a package (deletes tracked files + empty dirs)--reinstall PKG— Remove then re-install a package--upgrade/-u— Upgrade all installed packages--downgrade PKG/--oldpackage— Downgrade to next older version--purge PKG— Remove package including config/data files--download PKG— Download a package archive without installing
Query & Inspection
--list/-l/--installed/-inpc— List installed packages with file counts--installable/-a— Show all packages available in repositories--info PKG/-I— Show detailed package metadata + install status--files PKG/-f— List every file installed by a package--verify PKG/-V— Check all installed files still exist--verify-all— Verify all installed packages at once--search PKG/-s— Animated search across repositories--depends PKG— Show recursive dependency tree (up to 3 levels)--rdepends PKG— Show reverse dependencies--what-owns FILE— Find which package owns a file--check— Check integrity of all installed packages--arch— Show detected system architecture--why PKG— Show why a package is installed--size PKG— Show installed size of a package--list-type PKG EXT— List files by extension within a package--recent [N]— Show N most recently installed packages (default 10)--duplicates— Find duplicate files across packages--changelog PKG— Show changelog for a package--compare V1 V2— Compare two version strings--list-updates— Show available package updates--stats— Show package statistics
Archiving
--tar FOLDER— Create a plain.tar.xzarchive from a folder--maketar FOLDER [NAME VERSION [ARCH]]— Create.dp.tar.xzpackage archive--rc N— Mark package as release candidate (-rcNsuffix)
Repository Management
--add-repo NAME URL [ARCH]— Add a new repository--remove-repo NAME— Remove a repository--toggle-repo NAME— Enable/disable a repository--repo-list [NAME]/--list-repo [NAME]— List repos or show packages from a repo--sync/-S— Check connectivity to all enabled repos--update/-U— Update package metadata from all repos--repo-priority NAME PRIO— Set numeric priority for a repository
Lock & Hold
--lock PKG— Lock a package to prevent changes--unlock PKG— Unlock a locked package--locked-list— Show all locked packages--hold PKG— Hold a package to prevent upgrades--unhold PKG— Release a held package--list-held— Show held packages
Transaction Solver (zypper-style)
--dry-run— Preview changes without making modifications--force-resolution— Force dependency resolution ignoring conflicts--no-recommends— Only install required dependencies--clean-deps/--clean/--autoremove— Remove orphaned packages--port-commit— Commit changes to local ports
Export/Import/Backup
--export-installed FILE— Export installed package list to a file--import-installed FILE— Install packages from an exported list--backup DIR— Back up the package database--restore FILE— Restore the package database from a backup
Cache
--clean-cache— Clean cached packages and repo data
Meta
--rescue/-R— Launch the rescue TUI shell--gui— Launch the PyQt5 GUI--tui/-T— Launch the Textual TUI--reset— Reset DPMS configuration--get [ARGS]— Run the dpms-get sub-CLI--history— Show full transaction history--history-last N— Show last N transactions--version— Show DPMS version--feedback— Send feedback to DPMS team--global DIR/-g DIR— Set install root for a single command
Log/Audit
--dlr-verify— Verify SHA hashes in dlr.log--list-nft— List directories excluded via nft.log markers
Repo Generation (apt-ftparchive style)
--gen-packages DIR— GeneratePackagesindex--gen-sources DIR— GenerateSourcesindex--gen-contents DIR— GenerateContents(file-to-package mapping)--gen-release DIR— GenerateReleasefile with checksums--gen-repo DIR— Generate full repo metadata (all of the above)--gen-generate CONFIG— Generate repo from a config file--gen-clean DIR— Clean cache files from a repo directory
Build Profiles
standard— Default flagslite—-j1,-Osperformance—-jN,-O3 -march=nativecustom— From environment variables
TUI (dpms --tui / dpms-tui)
Textual-based terminal UI with:
- Dashboard — Title screen with navigation buttons (Package Manager, Repository Manager, Transaction History, Quit). Keyboard:
p,r,h,q - Package Manager — Browse Installed/Available packages, real-time search filtering, Install/Remove/Info actions. Keyboard:
i,a,/,q - Repository Manager — List all repos with enable/disable status, Sync All, Toggle, Add/Remove repos. Keyboard:
s,q - Transaction History — Timestamped log, color-coded (green=install, red=remove). Keyboard:
q
GUI (dpms --gui)
PyQt5 graphical interface (600x400):
- Convert Tab — Select source dir, output filename/path, choose compression (gzip/xz), compress button
- Download Tab — Enter URL, select output path, download button
- Shared — Color-coded status log, status bar, threaded operations via QThread
Rescue TUI (dpms --rescue)
Minimal shell for emergency repairs:
| Command | Description |
|---|---|
check |
Check/create DPMS directories |
clean |
Clean temporary files |
verify |
Verify/repair repo list JSON |
reset |
Reset DPMS configuration |
list |
List installed packages |
help |
Show available commands |
exit |
Exit rescue shell |
dpms-get Sub-CLI (dpms --get)
APT-style sub-commands:
update— Resync package metadataupgrade— Upgrade all installed packagesdist-upgrade/full-upgrade— Distribution upgradeinstall PKG...— Install packagesreinstall PKG...— Reinstall packagesremove PKG...— Remove packagespurge PKG...— Remove packages and config filesautoremove/auto-remove/autopurge— Remove unused packagesmarkauto PKG...— Mark packages as auto-installedunmarkauto PKG...— Mark packages as manually installedsearch QUERY— Search for packagesinfo PKG— Show package inforescue— Launch rescue modedownload PKG— Download binary packageclean— Erase downloaded archivesautoclean/auto-clean— Erase old downloaded archivesdistclean/dist-clean— Erase all cachescheck— Verify package integritydepends PKG— Show dependency treerdepends PKG— Show reverse dependencieswhat-owns PATH— Find package owning a filesource PKG— Download source archivebuild-dep PKG— Install build dependenciessatisfy TARGET— Satisfy dependency stringschangelog PKG— Show changeloglist-updates— Show available updatesstats— Show package statisticsport-commit— Commit changes to local portsdlr-verify— Verify SHA hashes in dlr.loglist-nft— List excluded directories
dm — DPMS Version Manager
Manages DPMS itself via pip:
dm list dpms— List available versions from PyPIdm current [dpms]— Show installed versiondm use dpms VERSION— Switch to a specific versiondm compare V1 V2— Compare two version stringsdm diff dpms V1 V2— Compare file listings between versionsdm pin dpms— Lock current versiondm unpin dpms— Unlock pinned versiondm list-pinned— Show all pinned packagesdm rollback dpms— Roll back to previous version
search.py — Standalone Search Tool
--regex PATTERN/-r— Regex-based search--fuzzy QUERY/-f— Fuzzy/partial match with scoring--category CAT/-c— Search by category (dev, util, shell, editor, net, core)--batch PKGS.../-b— Batch check multiple names--file FILE/--from-file— Search packages from a file--list-repos/-l— List configured repos--installable/-a— Show all installable packages- Interactive mode — Default, with package suggestion
- Animated search — Progress bar during search
dpms-bar — Progress Bar Library
Progress— Color-coded progress bar with ETASpinner— Animated spinner for indeterminate operationsIndeterminateProgress— Bouncing bar for unknown-length tasksMultiProgress— Multiple simultaneous progress barsProgressCallback— Threshold-based callback progress tracker
Core Engine Features
Dependency Solver (APK-style)
- Version matching: EQUAL, LESS, GREATER, FUZZY, CONFLICT
- Solver flags: LATEST, AVAILABLE, REINSTALL, INSTALLED, UPGRADE, REMOVE, IGNORE_CONFLICT
- Provider system with self-provides + virtual provides
install_ifconditional dependencies (lazy triggers)- Changeset generation (to_install, to_remove, to_upgrade)
- Queue-based resolution with priority queues
- Disqualification cascading through reverse dependency chains
Privilege Escalation
- Auto-detection of
sudo/doas - Auto re-exec with privileges for root operations
DPMS_ROOTenv var for dev mode (skip sudo)- Read-only ops never need root
GPG / Cryptographic Verification
- Key import into trusted keyring
- Signature verification via GPG
- SHA256 checksum verification
Source-Based Building
- Source archive download via wget
- SHA256 verification via USHA256.list
- Patch application from UPATCHES/
- Build script execution (UBUILD.sh)
- Profile-aware compilation
Plugin System
- Lifecycle hooks: pre_config, config, resolved, sack, pre_transaction, transaction
- Dynamic loading from plugin paths
- Glob-pattern enable/disable filtering
Crash Handling & Logging
- Global
sys.excepthookreplacement - Crash reports to
~/.cache/dpms/log/crash.log - Rotating file logs (1MB default, 5 backups)
- JSON transaction history with IDs and timestamps
Password Protection
- Interactive password setting
- Authentication prompt for protected ops
- Storage at
~/.dpms/password
Package Format
Archives Supported for Installation
.dp.tar.xz(canonical format).tar.xz,.tar.gz,.tar.bz2.tgz,.tbz2,.txz.dpm(legacy).zip
Naming Convention
- Stable:
name-version-arch.dp.tar.xz - RC:
name-version-arch.dp-rcN.tar.xz
Installation Tracking
- Database:
/var/lib/dp/installed/<pkgname> - Content: list of installed file paths (one per line)
- Enables clean uninstall and integrity verification
Configuration & Environment
| Variable | Default | Description |
|---|---|---|
DPMS_ROOT |
/ |
Install root (uses sudo when /) |
DPMS_DATA_DIR |
~/.cache/dpms |
Data directory |
DPMS_TMP_DIR |
/tmp/dpms-build |
Build temp directory |
DPMS_OPT_DIR |
/opt |
Install prefix for source builds |
DPMS_BIN_DIR |
/usr/local/bin |
Binary install directory |
DPMS_BUILD_PROFILE |
standard |
Build profile |
DPMS_PASSWORD_FILE |
~/.dpms/password |
Password file |
Cross-Platform Support
| Platform | Arch |
|---|---|
| Linux x86_64 | x86_64 |
| Linux ARM64 | aarch64 |
| Linux ARMv7 | armv7 |
| macOS Intel | x86_64 |
| macOS Apple Silicon | aarch64 |
| Windows | Detected |
Database Persistence Layer
RepoPersistor— Tracks expired repos and last makecache timeTempfilePersistor— Tracks temp files across sessions- All persistence uses JSON on disk
Package Update / Rename Tracking
update_dbentry()— Rename paths in DB entriesapply_move()— Move files on disk and update trackingparse_updates()— Parse update commandsgrab_updates()— Detect new update files by mtime changes