A personal quickshell dynamic island system to replace my taskbar
- QML 87.3%
- Python 11.3%
- JavaScript 0.8%
- Shell 0.6%
| components | ||
| scripts | ||
| .gitignore | ||
| MusicHistory.qml | ||
| qmldir | ||
| README.md | ||
| SETUP.md | ||
| shell.qml | ||
| Theme.qml | ||
| UserSettings.qml | ||
Amadeus Island
A Quickshell-based top bar for KDE Plasma 6 on Wayland. Started as a Steins;Gate themed dynamic island and grew into a full replacement for the Plasma panel — launcher, tray, volume mixer, and a live status island in the middle.
Features
- Dynamic island (top-center) — clock, music / MPRIS, Discord calls, recording, notifications, Bluetooth connect/disconnect, screenshot confirmations, download-complete pills, calendar reminders (MyCalBook), stopwatch + countdown timer (long-press to open Timers), system-stress warnings (CPU / RAM / temp). Right-click for recent notification history. Expands on hover/click; swipeable between states when several are active at once.
- Sibling pills (around the island) —
APPSlauncher (top-left), virtual-desktop indicator that auto-hides on a single desktop (click/scroll to switch), always-on time pill when the island isn't showing the idle clock, volume mixer, and system tray (top-right). - Searchable app launcher — fuzzy-matches installed
.desktopentries. Favorites grid with reorder, right-click to pin/unpin, custom exec overrides for AppImages and similar. - System tray — StatusNotifierItem icons with left-click activate, middle-click secondary-activate, right-click DBus menu, scroll-wheel. Hidden-app blacklist lives in the settings panel.
- Volume mixer — default output/input picker, per-app stream sliders, click-to-mute. Tabs for devices vs. applications.
- Settings panel — Do Not Disturb toggle, GUI editor for favorites, tray blacklist, quick-action buttons, and calendar credentials. Backed by
user.json; no QML editing required for day-to-day changes. - OSD overlays — vertical bars under the volume pill for sink/mic volume + mute, ripple pulses on the wifi/bluetooth pills on state change, and a centered toast on power-profile switch. Built to replace KDE's
plasma-osdpopups so the feedback lives in the same visual language as the rest of the bar. - Notification server — the island owns
org.freedesktop.Notificationsdirectly (no longer snooping the bus). Notifications surface as transient pills + a right-click history popover, replacing Plasma's notification daemon for popup display. - IPC —
qs -c amadeus-island ipc call launcher toggleand similar for keyboard shortcuts.
Requirements
- Quickshell 0.2.1+
- Plasma 6, Wayland session
- PipeWire / WirePlumber
- JetBrains Mono font
- Python 3.10+
- CLI utilities:
pactl,wpctl,dbus-monitor,busctl,pgrep,notify-send
Optional but nice: Polonium KWin script for automatic tiling, ksuperkey for Super-alone keybindings.
Install
Full walkthrough in SETUP.md. Short version:
git clone <this-repo> ~/.config/quickshell/amadeus-island
sudo dnf install jetbrains-mono-fonts pulseaudio-utils wireplumber \
dbus-tools libnotify procps-ng python3-pillow
# Enable the state probe
cp ~/.config/quickshell/amadeus-island/scripts/amadeus-probe.service \
~/.config/systemd/user/
systemctl --user enable --now amadeus-probe.service
# Run the shell
qs -c amadeus-island
Configuration
Click the pen icon in the top-right of the launcher (opens the Amadeus Settings panel):
- General — Do Not Disturb toggle (suppresses notification pills; history still captures them), MyCalBook URL + API key for calendar reminders (leave blank to disable).
- Tray — hide individual tray icons by id (exact) or title substring.
- Quick Actions — additional corner buttons in the launcher.
- Favorites — pinned app tiles. Reorder, remove, or override launch commands.
All edits write to user.json live — no restart needed. Colors, animation timings, pill dimensions live in Theme.qml for manual tuning.
Interaction cheatsheet
| Action | Effect |
|---|---|
| Hover island | Temporary expand |
| Click island | Sticky expand (auto-collapse after 5s idle) |
| Right-click island | Open notification history (last 10) |
| Long-press island | Open Timers modal (stopwatch + countdown) |
| Right-click app in launcher | Pin / unpin favorite |
| Click tray icon | Activate app (middle = secondary, right = menu) |
| Click / scroll workspace dots | Switch virtual desktop |
| Scroll on volume pill | ±5% default sink |
| Middle-click volume pill | Mute toggle |
Notes
- Named after Amadeus from Steins;Gate 0. The original red palette became a summer-sky blue after a wallpaper change — swap it back (or to anything else) by editing three hex values at the top of Theme.qml.
- If you remove the default Plasma panel, Super still fires KRunner and Alt-Tab still switches windows. See SETUP.md for binding Super to the Amadeus launcher instead.
- The island doubles as Plasma-panel + OSD + notification-popup replacement. Recommended cleanup once you're happy with it:
- Disable Plasma's OSDs (volume / mic / wifi / bluetooth / power-profile / etc.) so they don't double up:
kwriteconfig6 --file plasmarc --group OSD --key Enabled false - Remove or hide the default Plasma panel (right-click the panel → Edit Panel → menu → Remove Panel) — the island already provides clock, tray, launcher, volume.
- Notifications: the island owns
org.freedesktop.Notifications, so Plasma's popup is automatically pre-empted; no extra setup required. Plasma's Notifications KCM still controls per-app filtering and history.
- Disable Plasma's OSDs (volume / mic / wifi / bluetooth / power-profile / etc.) so they don't double up:
- Shared under whatever license you picked — no warranty. File an issue upstream on your Forgejo if something breaks.