Isla
Uma Dynamic Island para o meu desktop Linux. Um shell para Hyprland que cabe numa pílula preta no topo da tela.
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.
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.
- Slack ~430 MB
- Spotify com spotifyd ~105 MB
- App do Slack ~655 MB
- Spotify no Chrome ~570 MB
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().
O Isla tem um site próprio, com o tour completo: launcher, notificações, Spotify, WhatsApp e Isla Files rodando no navegador.