Voltar ao lab

Isla

Uma Dynamic Island para o meu desktop Linux. Um shell para Hyprland que cabe numa pílula preta no topo da tela.

produto
Isla

Isla é o shell que eu construí para o meu desktop, Hyprland no NixOS. Uma pílula preta fica pendurada no topo de cada tela e se abre no que eu preciso na hora: launcher, notificações, Spotify, WhatsApp, Slack, um gerenciador de arquivos. Depois ela volta a ser pílula.

Por que eu fiz

Eu queria que o desktop tivesse um lugar só. Barra, launcher, central de notificações, popups de volume e de Wi-Fi, e uma janela do Spotify aberta só para trocar de música: cada coisa vivia num canto da tela, com um visual diferente. A Dynamic Island do iPhone mostrou que um único objeto dá conta de tudo isso, desde que ele saiba mudar de forma.

O Isla começou como um experimento de motion e virou o meu ambiente de trabalho. Uso todo dia, em monitores de 155 Hz e 240 Hz.

Uma pílula preta no topo de cada tela.

Ela fica onde estaria um notch e sai do caminho. Quando você precisa dela, ela vira o desktop.

Estados da pílula

Escolha um estado, ou clique na pílula em repouso.

O que ele substitui

  • Spotify. Um cliente nativo dentro da pílula, com busca, playlists, fila, dispositivos e letra sincronizada. O som vem do spotifyd, um daemon em Rust; o app oficial nem precisa estar instalado.
  • WhatsApp e Slack. Rodam dentro do shell, não numa janela de navegador. O Isla repinta o WhatsApp com preto de verdade e o accent do tema, sem banners nem promoções.
  • Gerenciador de arquivos. O Isla Files cresce da pílula até virar uma janela: Quick Look na barra de espaço, busca por nome e por conteúdo, impressoras e scanners da rede funcionando sem driver.
  • Barra, launcher e notificações. O launcher também troca de janela, e as notificações chegam como Live Activities, com as ações do próprio app.

Slack e Spotify na pílula, com menos da metade da memória.

Com os dois abertos, o Slack e o Spotify do Isla usam cerca de 540 MB. O app do Slack e o Spotify no Chrome usam cerca de 1.220 MB, e isso com o Spotify no Chrome ainda deslogado.

Isla ~540 MB
  • Slack ~430 MB
  • Spotify com spotifyd ~105 MB
Os apps que ele substitui ~1.220 MB
  • App do Slack ~655 MB
  • Spotify no Chrome ~570 MB
Memória é PSS somando todos os processos de cada app (o Slack do Isla inclui o motor do navegador), em repouso, no NixOS. O WhatsApp fica de fora: na pílula ele usa mais do que no Chrome.

Como é feito

Escrito em QML sobre o Quickshell, com um núcleo em Rust para os arquivos. Cada estado da pílula é uma Activity com prioridade, e a de maior prioridade que quer a tela ganha. Largura, altura e raio seguem molas amortecidas resolvidas em forma fechada contra o tempo real de cada frame, então o movimento é o mesmo em 155 Hz e em 240 Hz. Tudo fica declarado na minha configuração do NixOS: um rebuild traz o shell inteiro de volta em qualquer máquina.

A demo lá em cima usa as mesmas molas, convertidas em curvas linear() de CSS, e não roda nenhum JavaScript: os estados são um grupo de rádio, e cada um é um seletor :has().

A página do Isla: o título "A Dynamic Island for my Linux desktop", a pílula em repouso com o relógio e a música no topo, e os botões de estado do tour.
O site do Isla, com o tour interativo.
Captura do Spotify do Isla: campo de busca, abas de busca, playlists, músicas curtidas, fila e dispositivos, uma lista de faixas tocadas recentemente e o mini player embaixo.
Captura real: o Spotify dentro da pílula.

O Isla tem um site próprio, com o tour completo: launcher, notificações, Spotify, WhatsApp e Isla Files rodando no navegador.