Package Management with Pacman

HorizonOS uses pacman as its package manager. This guide covers essential package management tasks.

Basic Pacman Commands

Update System

# Update package database and upgrade all packages
sudo pacman -Syu

# Update database only
sudo pacman -Sy
⚠️ Important

Always run pacman -Syu before installing new packages to avoid partial upgrades.

Install Packages

# Install a single package
sudo pacman -S package-name

# Install multiple packages
sudo pacman -S package1 package2 package3

# Install a package without prompting
sudo pacman -S --noconfirm package-name

Remove Packages

# Remove a package
sudo pacman -R package-name

# Remove a package and its dependencies
sudo pacman -Rs package-name

# Remove a package, dependencies, and config files
sudo pacman -Rns package-name

Search for Packages

# Search for a package
pacman -Ss search-term

# Search installed packages
pacman -Qs search-term

Package Information

# Show package information
pacman -Si package-name

# Show info for installed package
pacman -Qi package-name

# List files owned by a package
pacman -Ql package-name

# Find which package owns a file
pacman -Qo /path/to/file

System Maintenance

List Orphaned Packages

Orphaned packages are dependencies that are no longer needed:

# List orphaned packages
pacman -Qtdq

# Remove all orphaned packages
sudo pacman -Rns $(pacman -Qtdq)

Clean Package Cache

Pacman stores downloaded packages in /var/cache/pacman/pkg/:

# Remove old versions of installed packages
sudo pacman -Sc

# Remove all cached packages
sudo pacman -Scc

Check for Errors

# Check for missing dependencies
sudo pacman -Dk

# Verify all packages
sudo pacman -Qkk

Working with Package Groups

# List all groups
pacman -Sg

# List packages in a group
pacman -Sg group-name

# Install an entire group
sudo pacman -S group-name

Downgrading Packages

If a package update causes issues, you can downgrade:

# List available versions in cache
ls /var/cache/pacman/pkg/ | grep package-name

# Install specific version
sudo pacman -U /var/cache/pacman/pkg/package-name-version.pkg.tar.zst

Ignoring Packages

To prevent certain packages from being updated, edit /etc/pacman.conf:

# Add to /etc/pacman.conf
IgnorePkg = package-name package-name2

Updating Mirrors

Update your mirror list for faster downloads:

# Install reflector
sudo pacman -S reflector

# Update mirrors
sudo reflector --latest 20 --protocol https --sort rate --save /etc/pacman.d/mirrorlist

# Refresh database
sudo pacman -Syy

Parallel Downloads

Speed up package downloads by enabling parallel downloads. Edit /etc/pacman.conf:

ParallelDownloads = 5

Useful Pacman Flags

Flag Description
-S Sync (install)
-R Remove
-Q Query
-U Upgrade from file
-y Refresh database
-u System upgrade
-s Search
-c Clean cache
📚 Next Steps

Learn about the AUR (Arch User Repository) to access thousands of additional packages.

Troubleshooting

Package Conflicts

If you encounter package conflicts:

# Remove conflicting package first
sudo pacman -R conflicting-package
sudo pacman -S new-package

Corrupted Database

# Refresh database
sudo rm /var/lib/pacman/sync/*
sudo pacman -Syy

Failed Transaction

# Remove lock file if pacman crashed
sudo rm /var/lib/pacman/db.lck