Modern hardware information and monitoring tool for Linux — built with Python 3 + PyQt6.
Fast, beautiful, and accurate. Think HWiNFO meets Neofetch, with a clean dark UI.
| Category | Details |
|---|---|
| CPU | Name, cores/threads, frequency (live), temperature, cache, per-core usage bars |
| GPU | NVIDIA / AMD / Intel, VRAM, utilization, temperature, driver, clocks |
| RAM | Total/used/available, swap, type, speed, slots |
| Storage | SSD/HDD/NVMe detection, SMART status, read/write speed, partitions |
| Network | All interfaces, IPv4/IPv6, WiFi SSID/signal, live bandwidth charts |
| Sensors | Temperatures, fan RPM, battery (via lm_sensors / hwmon) |
| System | OS, kernel, DE, shell, uptime, mainboard, BIOS, package count |
| Export | JSON, TXT, PDF |
| Live charts | Smooth rolling charts, no external chart library needed |
sudo pacman -S python python-pyqt6 python-psutil lm_sensors smartmontools \
mesa-utils vulkan-tools pciutils usbutils dmidecodepip install -r requirements.txtgit clone https://github.com/yourname/hwsonnet
cd hwsonnet
./install.shThe installer:
- Checks for missing pacman packages
- Installs Python dependencies via pip
- Creates a
.desktopfile for your app launcher - Creates a
hwsonnetcommand in~/.local/bin
python main.py
# or after install:
hwsonnetFor accurate temperature and fan data:
sudo sensors-detect # follow prompts, then reboot or modprobe the suggested modules
sensors # verify outputRequires the proprietary NVIDIA driver (not nouveau):
sudo pacman -S nvidia nvidia-utils
# nvidia-smi should be available after driver installationWorks out of the box via /sys/class/drm — no extra packages needed.
sudo pacman -S smartmontools
# Run HWSonnet as root, or add yourself to the 'disk' group:
sudo usermod -aG disk $USERhwsonnet/
├── main.py # Entry point
├── requirements.txt
├── install.sh
├── src/
│ ├── app.py # QApplication setup + theme
│ ├── core/
│ │ ├── workers.py # Background QThread workers
│ │ └── collectors/ # One collector per subsystem
│ │ ├── cpu_collector.py
│ │ ├── gpu_collector.py
│ │ ├── ram_collector.py
│ │ ├── storage_collector.py
│ │ ├── network_collector.py
│ │ ├── sensors_collector.py
│ │ └── system_collector.py
│ ├── ui/
│ │ ├── main_window.py # Master window
│ │ ├── sidebar.py # Collapsible nav sidebar
│ │ ├── styles/
│ │ │ └── dark_theme.py # Global QSS stylesheet + palette
│ │ ├── widgets/
│ │ │ ├── info_card.py # InfoCard / KeyValueCard
│ │ │ ├── live_chart.py # Custom QPainter rolling chart
│ │ │ └── gauge_widget.py # Circular gauge + mini bar gauge
│ │ └── pages/
│ │ ├── overview_page.py
│ │ ├── cpu_page.py
│ │ ├── gpu_page.py
│ │ ├── ram_page.py
│ │ ├── storage_page.py
│ │ ├── network_page.py
│ │ ├── sensors_page.py
│ │ └── system_page.py
│ └── utils/
│ ├── format.py # Value formatting helpers
│ ├── export.py # JSON / TXT / PDF export
│ └── logger.py # Centralized logging
- MVVM-inspired: collectors = Model, pages = View+ViewModel, workers = async binding
- No blocking UI: all I/O and subprocess calls run in
QThreadworkers - No external chart library: live charts drawn entirely with
QPainter - Graceful degradation: missing tools (nvidia-smi, dmidecode, smartctl) → "N/A"
pip install pyinstaller
pyinstaller --onefile --windowed --name HWSonnet main.py
# Then package with appimagetoolpkgname=hwsonnet
pkgver=1.0.0
pkgrel=1
pkgdesc="Modern hardware info tool for Linux"
arch=('x86_64')
depends=('python' 'python-pyqt6' 'python-psutil')
optdepends=('lm_sensors' 'smartmontools' 'nvidia-utils')
source=("git+https://github.com/yourname/hwsonnet.git")
MIT
