Back to lab

Isla

A Dynamic Island for my Linux desktop. A shell for Hyprland that fits in one black pill at the top of the screen.

product
Isla

Isla is the shell I built for my desktop, Hyprland on NixOS. One black pill hangs from the top of every screen and opens into whatever I need right then: a launcher, notifications, Spotify, WhatsApp, Slack, a file manager. Then it goes back to being a pill.

Why I built it

I wanted the desktop to have one place. A bar, a launcher, a notification center, volume and Wi-Fi popups, and a Spotify window kept open just to skip a track: each lived in its own corner of the screen, each with its own look. The iPhone’s Dynamic Island showed that a single object can handle all of that, as long as it knows how to change shape.

Isla started as a motion experiment and became my working environment. I use it every day, on 155 Hz and 240 Hz monitors.

One black pill at the top of every screen.

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

Pill states

Pick a state, or click the resting pill.

What it replaces

  • Spotify. A native client inside the pill, with search, playlists, the queue, devices and synced lyrics. Sound comes from spotifyd, a daemon written in Rust; the official app never has to be installed.
  • WhatsApp and Slack. They run inside the shell, not in a browser window. Isla repaints WhatsApp in true black with the theme’s accent, and drops the banners and promos.
  • The file manager. Isla Files grows out of the pill into a full window: Quick Look on the space bar, search by name and by content, and network printers and scanners that work with no drivers.
  • The bar, the launcher and notifications. The launcher doubles as a window switcher, and notifications arrive as Live Activities with the app’s own actions.

Slack and Spotify in the pill, at less than half the memory.

With both open, Isla's Slack and Spotify take about 540 MB. Slack's desktop app and Spotify in Chrome take about 1,220 MB, and that is before Spotify in Chrome is even signed in.

Isla ~540 MB
  • Slack ~430 MB
  • Spotify with spotifyd ~105 MB
The apps it replaces ~1,220 MB
  • Slack desktop app ~655 MB
  • Spotify in Chrome ~570 MB
Memory is PSS over every process an app starts (Isla's Slack includes its browser engine), idle, on NixOS. WhatsApp is not shown: in the pill it uses more than in Chrome.

How it is built

Written in QML on Quickshell, with a Rust core for files. Each state of the pill is an Activity with a priority, and the highest one that wants the screen gets it. 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 at 240 Hz. The whole thing is declared in my NixOS configuration: a rebuild brings the shell back on any machine.

The demo up there uses the same springs, baked into CSS linear() curves, and runs no JavaScript at all: the states are a radio group, and each one is a :has() selector.

The Isla landing page: the headline "A Dynamic Island for my Linux desktop", the resting pill with the clock and music at the top, and the tour state buttons.
The Isla site, with its interactive tour.
Screenshot of Isla's Spotify browser: a search field, tabs for search, playlists, liked songs, queue and devices, a list of recently played tracks, and a mini player at the bottom.
Real capture: Spotify inside the pill.

Isla has its own site with the full tour: the launcher, notifications, Spotify, WhatsApp and Isla Files, running in the browser.