Eight widgets I built for my own desktop. Dark, dot-friendly, no theme to install. If you like one, take it; the rest are independent.
$ cat lessplasma.manifest
# eight widgets, all dark, all responsive
screen-time → per-app usage by the hour
sticky-note → editable note, autosaves
system-pulse → CPU / RAM / Net live bars
disk-usage → used/free per drive
calendar-strip → 7-day strip or full month grid
wifi-qr → scannable QR for current network
public-ip → external IP, country, VPN status
bar-clock → time as three filling bars
# each widget is its own folder under packages/
# install: ./install.sh
# reload: kquitapp6 plasmashell && kstart plasmashell
This is the only widget here that's more than a single QML file. There's a Python daemon running as a systemd user service, plus a small KWin script that fires on every window-focus change and tells the daemon what window you switched to. The daemon keeps a running tally of seconds per app per hour in SQLite, ignores time when you're idle (it asks org.freedesktop.ScreenSaver how long it's been), and the widget polls it every 15 seconds.
If a category in the chart says "Other" and you don't recognize what's in it, edit ~/.local/share/plasma-screentime/categories.json and the widget will pick the change up automatically.
A TextArea that saves to plasmoid config 600ms after you stop typing. That's the whole widget.
Reads /proc/stat, /proc/meminfo, /proc/net/dev every two seconds. CPU and network are deltas between two reads, RAM is MemTotal - MemAvailable. Bars go green, then orange, then red as load climbs.
One row per mounted drive, colored by fullness. The hard part was getting df to ignore the dozens of fake filesystems Linux mounts (tmpfs, snap, fuse, overlays) and only show real disks.
Seven days with a dot for each upcoming event. Drag the corner to make it taller and it switches to a full month grid, with today highlighted as a blue circle. Events come from DTSTART lines in your local .ics files (Akonadi resources, KOrganizer, anything in ~/.local/share/calendars). Online-only calendars won't show up; that's a different data source.
SSID is auto-detected. Click the ✎ to type your password once; it lives in plasmoid config locally. qrencode renders the standard WIFI:T:WPA;S:<ssid>;P:<pass>;; payload to a PNG and any phone camera reads it.
Pulls IP, city, country from ipinfo.io once a minute. The VPN dot is just ip link show greppped for tun*, wg*, tap*, nordlynx. It's not foolproof — a VPN running through a eth* interface won't trigger it — but covers most setups.
Hours, minutes, seconds as three filling bars. The seconds bar is the only one you'll catch moving.
You'll need:
| Distro | Command |
|---|---|
| Debian / Ubuntu / Neon | sudo apt install qt6-tools python3-dbus python3-gi curl |
| Arch | sudo pacman -S qt6-tools python-dbus python-gobject curl |
| Fedora | sudo dnf install qt6-qttools python3-dbus python3-gobject curl |
Plus qrencode if you want WiFi QR.
git clone https://github.com/Sha547/lessplasma.git
cd lessplasma
./install.sh # all widgets
./install.sh sticky-note # just oneThe installer checks deps upfront, registers each plasmoid via kpackagetool6, sets up the Screen Time daemon, and reloads plasmashell for you. Once that's done, right-click desktop → Add Widgets → search the widget name.
If you'd rather install via "Install Widget From Local File" in the picker, grab a .plasmoid from the Releases page (or build them yourself with ./package.sh --all — outputs to packaged/).
Quick preview of one widget without touching your live desktop:
./test.reload.sh sticky-noteThis launches plasmoidviewer6 against the source folder, so edits to the QML show up on the next ./test.reload.sh run.
- Screen Time — categories live at
~/.local/share/plasma-screentime/categories.json. Edit to add your apps (substring match). - WiFi QR — click ✎ in the widget to set your password.
- Sticky Note — just type.
./uninstall.shPlasmoids and daemon go. Your usage data at ~/.local/share/plasma-screentime/ stays unless you delete it.
Massive thanks to my friend Jack Faith (@jaxparrow07) — his nothingkdewidgets pack is what got me into building these in the first place. The install-script structure and packaging conventions in this repo are based on his. His widgets are also genuinely beautiful, go install them.







