Isla Source on GitHub

A Dynamic Island
for my Linux desktop.

Isla is the shell I built for Hyprland on NixOS. One black pill hangs from the top of every screen and springs open into a launcher, notifications, Spotify, WhatsApp and the menus of your tray apps, then tucks back in.

Read the source

Written in QML on Quickshell, with WhatsApp running in QtWebEngine. Used every day at 155 Hz and 240 Hz.

Hover the pill to open it. Press / to search.

It sits where a notch would be and keeps out of the way. Reach for it and it becomes the desktop.

Super

Tap Super. The pill becomes a launcher.

Type to search your apps. With nothing typed it lists only what is already open, so the same field doubles as a window switcher.

Enter on an app that is already running jumps to its window instead of opening a second one. The workspace lens slides over to where it lives.

Type, use the arrow keys, press Enter.

Notifications arrive as Live Activities.

The pill swells into a banner with the app's picture, two lines of text and its actions, then tucks back in when its time is up. Hovering holds it there.

When more are waiting, a badge counts them, and the next one follows as soon as you act on this one.

Act on the banner to see the queue move.

SuperShiftS

Screenshots the way GNOME takes them.

The screen freezes. Drag across it to take a region, or click a window to take just that window. The shot is copied and saved to Pictures/Screenshots in one go.

Then the pill shows it, thumbnail first. Edit opens it in Satty to annotate and crop, Folder opens where it went. Print takes a region, Shift+Print the whole monitor, Alt+Print the focused window.

Then drag across the screen, or click a window.

SuperS

A whole Spotify client, inside the pill.

While something plays, album art and a small waveform slide into the resting pill, and a track change peeks for a moment. Super+S opens the player itself: now playing, search, playlists, liked songs, the queue and your devices.

Press play in Isla and the music plays here, even if a TV or a phone had it a minute ago. Pausing, skipping and seeking never move it.

Sound comes from spotifyd, a Spotify Connect daemon written in Rust that uses about 38 MB of memory. The official app never has to be installed.

Screenshot of Isla's Spotify browser: a search field, tabs for search, playlists, liked songs, queue and devices, a list of recently played tracks with one selected, and a mini player at the bottom.
Screenshot. Search with recently played and the mini player.

SuperW

WhatsApp, inside the pill.

Super+W grows the pill into WhatsApp Web. It runs inside the shell, not in a browser window, and Isla repaints it: true black, your accent instead of WhatsApp green, and no rail, banners or promos.

Ctrl+B folds the chat list away so the open chat gets the whole panel, with your four most recent chats up in its header. Ctrl+K opens a switcher: type a name, press Enter.

Voice and video calls work, and scrolling is smooth. Close the panel and WhatsApp keeps running, so messages still arrive as notifications. Quit in its menu stops it.

Sample chats, not real conversations.

Tray menus, drawn by Isla.

Right-click an app in the tray and its menu opens inside the pill, where the notification history was. Every app's menu looks the same: rows on the pill's black, hairline separators, a check next to whatever is on.

A submenu takes the menu's place with a back row instead of cascading off to the side. Esc goes back one level, a click outside closes it.

Right-click Slack in the tray.

SuperI

A pill on every screen.

Each monitor gets the full pill with its own workspaces. Super+I trades it for a minimal one on all of them: the clock, and whatever is playing.

Super+Space switches the keyboard layout and says so in the pill. The desktop shell's own popups for Caps Lock, Wi-Fi, Bluetooth, night light and the rest are switched off, so nothing pops up outside the island.

Two monitors, each with its own workspaces.

One palette, every surface.

Text and accents come from the desktop theme's palette file and change the moment it does, inside WhatsApp too. The pill itself stays true black, so it reads as part of the bezel.

An accent that is too dark to read on black gets lightened until it holds 4.5:1 contrast. Try one: this page follows the same rule.

How it is built

Hyprland

One layer surface per monitor, above every window. It is a fixed transparent canvas sized for the largest state, so the compositor never resizes it mid morph, and its input mask follows the pill so everything around it stays clickable.

Quickshell and QML

Each state is an Activity with a priority: compact, track peek, volume and layout, expanded, notification, Spotify and WhatsApp, launcher. The highest one that wants the screen gets it. A new state is one more Activity.

QtWebEngine

Quickshell is patched to start Chromium's engine before the app, so WhatsApp Web runs as a view inside the pill, on its own profile, with Isla's stylesheet and script injected and the palette sent again on every theme change.

Tray menus over D-Bus

Tray apps publish their menus over D-Bus. Isla reads them and draws every row itself, so a Qt, GTK or Electron app's menu all come out looking alike.

State that survives

Minimal mode, the folded chat list and whether WhatsApp was running live in one small JSON file, so restarting the shell puts everything back where it was.

NixOS

Declared in nalyx, my NixOS configuration, next to spotifyd, the patched Quickshell and the screenshot tool. A rebuild brings the whole thing back on any machine.

Springs, not easing curves

Width, height and radius each follow a damped spring solved in closed form against the real frame time, so the motion is the same at 155 Hz and 240 Hz. Opening, the height overshoots a little (response 0.50 s, damping 0.72). Tucking back in, it settles firmly (0.40 s, 0.88).

Screenshots from the real shell

Everything above is a recreation in HTML. These are captures of Isla running.

The resting pill: four workspaces on the left with the first one active, Wi-Fi, volume, Bluetooth and tray glyphs and the clock on the right.
Resting
The expanded pill: clock, date and weather, Wi-Fi, volume and Bluetooth buttons, a media card with transport controls, the tray and an empty notification history.
Expanded on hover
The Spotify player inside the pill with track title, artist, playback device, progress, transport and volume.
Spotify player
The volume indicator: a speaker glyph, a bar at seventy percent and the value.
Volume

In progress

Next: Isla Files.

A file manager that opens from the pill, on a native core written in Rust. It is being built now and there is nothing to show yet, so here is what it is for rather than a picture of it.

Browse
Walk through your folders without leaving the pill.
Quick Look
Space previews a file without opening an app.
Search
Find files by name as you type.
Shelf
Keep files on a shelf while you move between apps.
Print and scan
Print a file, or scan a page into a folder.
A picker for WhatsApp
Attach files from inside the pill instead of a separate dialog.

The source is public.

Isla lives in nalyx, my NixOS configuration, under home/features/desktop/hyprland/isla.

Open alysnnix/nalyx on GitHub