Skip to content
cosmixPublic

About

A fast, beautiful CLI for managing system updates. Supports APT (parallel using aria2), Flatpak, DNF, Snap, Pacman updates concurrently with real-time progress tracking.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Repository files navigation

sysupdate

A fast, beautiful CLI for managing system updates on Linux. Runs package manager updates concurrently with real-time progress tracking.

Python License

Supported Package Managers

Package Manager Distribution
APT Debian, Ubuntu, Linux Mint, Pop!_OS
DNF Fedora, RHEL, CentOS, Rocky Linux
Pacman Arch Linux, Manjaro, EndeavourOS
Flatpak All distributions
Snap All distributions
AUR Arch-based, with yay or paru
mise All distributions
Omarchy Omarchy (migrations)

Also updates these CLI tools when installed: Claude Code (claude update) and Codex CLI (codex update). Under sudo they run as the invoking user, so per-user installs in ~/.local/bin are found and stay owned by that user. A dry run lists nothing for them, since neither has a check-only mode.

AUR updates use yay (or paru when yay is missing) and run as the invoking user, since makepkg refuses to run as root; they are skipped when sysupdate runs as root without sudo. mise tools are upgraded with mise upgrade, also as the invoking user. On Omarchy, pending migrations are applied with omarchy-migrate, and Pacman runs with --overwrite /usr/share/omarchy/* as Omarchy's own updater does.

Pacman runs first. Omarchy migrations start after Pacman finishes, and AUR after both, because of the pacman lock and because migrations need the new packages. If Pacman fails, the updaters that wait for it are skipped and reported as failures. Everything else runs concurrently.

Features

  • Concurrent Updates: All available package managers run in parallel
  • Multi-Distro Support: Works on Debian, Fedora, Arch-based systems and more
  • Parallel Downloads: Uses aria2c for faster APT package downloads (optional)
  • Real-time Progress: Live progress bars with package names and speed
  • Self-Update: Built-in command to update sysupdate itself from GitHub Releases
  • Gorgeous Terminal UI: Animated startup banner with a diagonal sheen reveal, truecolor gradient progress bars, and per-manager accent colors — with graceful fallbacks for narrow, non-Unicode, or piped output
  • Detailed Logging: Timestamped logs saved for troubleshooting

Installation

Pre-built binary (recommended)

Grab a self-contained binary from the latest release — no Python or uv required. Replace x86_64 with aarch64 on ARM systems.

# Download the binary for your architecture
curl -LO https://github.com/cosmix/sysupdate/releases/latest/download/sysupdate-linux-x86_64

# (Optional) verify the checksum
curl -LO https://github.com/cosmix/sysupdate/releases/latest/download/SHA256SUMS.txt
sha256sum --check --ignore-missing SHA256SUMS.txt

# Install onto your PATH (the filename must stay 'sysupdate' for self-update to work)
chmod +x sysupdate-linux-x86_64
sudo mv sysupdate-linux-x86_64 /usr/local/bin/sysupdate

# Run
sysupdate

Once installed this way, sysupdate self-update upgrades the binary in place from future releases.

From source

# Clone the repository
git clone https://github.com/cosmix/sysupdate.git
cd sysupdate

# Install with uv
uv sync

# Run
uv run sysupdate

Optional: Parallel Downloads

Install aria2 for faster parallel package downloads:

sudo apt install aria2

Usage

# Run updates
sysupdate

# Dry run (show what would be updated)
sysupdate --dry-run

# Verbose mode (detailed package info)
sysupdate --verbose

# Disable banner/summary animations (or set SYSUPDATE_NO_ANIMATION=1)
sysupdate --no-animation

# Show version
sysupdate --version

# Check for sysupdate updates
sysupdate self-update --check-only

# Update sysupdate to latest version
sysupdate self-update

Example Output

sysupdate in action — animated gradient banner, live truecolor progress bars, and the end-of-run summary

On Fedora, APT is replaced with DNF. On Arch, it's replaced with Pacman. Narrow or non-Unicode terminals automatically fall back to compact ASCII art.

Requirements

  • Python 3.11+
  • Linux (Debian/Ubuntu, Fedora/RHEL, Arch, or derivatives)
  • sudo privileges
  • At least one supported package manager (APT, DNF, or Pacman)
  • flatpak (optional)
  • snap (optional)
  • claude / codex (optional, updated via their own update command)
  • aria2 (optional, for parallel APT downloads)

Log Files

Logs are saved to /var/log/sysupdate/ when running as root, or ~/.local/state/sysupdate/logs/ for non-root users:

sysupdate_YYYYMMDD_HHMMSS_main.log
sysupdate_YYYYMMDD_HHMMSS_apt.log      # Debian/Ubuntu
sysupdate_YYYYMMDD_HHMMSS_dnf.log      # Fedora/RHEL
sysupdate_YYYYMMDD_HHMMSS_pacman.log   # Arch
sysupdate_YYYYMMDD_HHMMSS_flatpak.log
sysupdate_YYYYMMDD_HHMMSS_snap.log
sysupdate_YYYYMMDD_HHMMSS_claude.log
sysupdate_YYYYMMDD_HHMMSS_codex.log

Testing

# Run tests
uv run pytest

# Run with verbose output
uv run pytest -v

# Test with downgraded packages
./test_downgrade.sh --count 3
uv run sysupdate

test_downgrade.sh

Utility to simulate package downgrades for testing:

./test_downgrade.sh --dry-run    # Preview
./test_downgrade.sh --count 5    # Downgrade 5 packages
./test_downgrade.sh              # Downgrade 3 packages (default)

Legacy Script

The original bash script is available as sysupdate-legacy.sh:

./sysupdate-legacy.sh

License

MIT - See LICENSE

About

A fast, beautiful CLI for managing system updates. Supports APT (parallel using aria2), Flatpak, DNF, Snap, Pacman updates concurrently with real-time progress tracking.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages