A personal quickshell dynamic island system to replace my taskbar
  • QML 87.3%
  • Python 11.3%
  • JavaScript 0.8%
  • Shell 0.6%
Find a file
2026-06-03 12:23:06 +02:00
components feat: minimize when clicking focused app 2026-06-03 12:23:06 +02:00
scripts fix(system): move CPU/GPU probe to a script file 2026-04-29 16:08:14 +02:00
.gitignore initial commit 2026-04-22 12:07:18 +02:00
MusicHistory.qml feat: music improvements 2026-04-22 16:45:48 +02:00
qmldir feat: alarm + working caffeine + volume slide-in animation 2026-04-29 16:16:16 +02:00
README.md chore: updated readme 2026-04-25 21:27:07 +02:00
SETUP.md fix: small fixes 2026-05-07 10:15:01 +02:00
shell.qml fix: small fixes 2026-05-07 10:15:01 +02:00
Theme.qml fix: volume max and grabbing 2026-04-30 09:35:49 +02:00
UserSettings.qml feat: alarm + working caffeine + volume slide-in animation 2026-04-29 16:16:16 +02:00

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) — APPS launcher (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 .desktop entries. 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-osd popups so the feedback lives in the same visual language as the rest of the bar.
  • Notification server — the island owns org.freedesktop.Notifications directly (no longer snooping the bus). Notifications surface as transient pills + a right-click history popover, replacing Plasma's notification daemon for popup display.
  • IPCqs -c amadeus-island ipc call launcher toggle and 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.
  • Shared under whatever license you picked — no warranty. File an issue upstream on your Forgejo if something breaks.