Flowral DE — ambiente gráfico próprio sem reescrever o Linux
Status: planejamento e backlog. A tecnologia para aplicações próprias é Rust + Slint, mas integração Slint ↔ Wayland Layer Shell para painéis e toasts exige validação. O Swirl continua compositor; Void continua base. Não implementar todas as substituições no primeiro release.
Visão e fronteiras
Um Flowral DE não precisa incluir um compositor, um gerenciador de rede novo ou um servidor de áudio novo. Ele precisa oferecer uma experiência coesa e acessível em volta dos serviços consolidados.
Flowral DE = Swirl (compositor)
+ Flowral Theme Engine (tokens/adapters, sem daemon residente)
+ Flowral Control Center (aplicação sob demanda)
+ futuro Flowral Shell:
Panel / Launcher / Notifications / OSD / Power Menu
+ integração com greetd / swayidle / swaylock
+ NetworkManager / BlueZ / PipeWire / UPower / XBPS / portals
O objetivo é substituir interfaces, não protocolos e serviços profundos que já estão maduros.
Distribuição das versões
O roadmap oficial agora organiza as entregas por v1.0, v1.1, v1.2, v2.0+ e pesquisa sem versão. A matriz abaixo continua servindo para avaliar dificuldade e ordem de experimentação, não prazos: Theme Engine, Control Center, Panel, Launcher, OSD, Power Menu, Wallpaper e lock/idle tematizados são objetivos da v1.0, enquanto Notifications/Toasts é meta v1.1 e Tray/Clipboard v1.2. Tudo exige testes reais e pode ser adiado com fallback.
Matriz por dificuldade e prioridade
Estimativas relativas de esforço (baixa / média / alta / crítica), não estimativa de dias nem garantia de consumo menor de RAM.
| Programa atual / necessidade | Futuro app Flowral | Dificuldade | Prioridade | Observação |
|---|---|---|---|---|
| Menu de desligar/suspender | Flowral Power Menu | Baixa | Primeiros protótipos | usar interfaces existentes e autorização adequada |
| OSD de brilho/volume | Flowral OSD | Baixa–média | Primeiros protótipos | overlay Wayland, backend PipeWire/brilho |
| swaybg | Flowral Wallpaper Picker | Baixa (GUI) | Primeiros protótipos | controlar swaybg; não reimplementar renderer inicialmente |
| Switcher de workspace | Flowral Switcher | Baixa–média | Primeiros protótipos | IPC Swirl + foco, preview opcional |
| Fuzzel | Flowral Launcher | Média | Segunda fase | localizar e executar .desktop com regras XDG |
| swaybar ou Waybar | Flowral Panel | Média | Segunda fase | duas ilhas inferiores, workspaces, bateria, relógio, status |
| Mako | Flowral Notifications | Média | Segunda fase | daemon freedesktop.Notifications completo, além da UI toast |
| wlr-randr/kanshi | Flowral Displays | Baixa–média UI | Via Control Center | configurações/rollback, manter backend existente |
| wl-clipboard/cliphist | Flowral Clipboard | Média | Após MVP | histórico opt-in, segurança de conteúdo sensível |
| system tray SNI | Flowral Tray | Média–alta | Após Panel | StatusNotifierItem/DBusMenu aumenta complexidade |
| swayidle | Flowral Idle Settings | Baixa (GUI) | Após MVP | configurar motor existente; reimplementar daemon é difícil |
| greetd + tuigreet | Flowral Greeter | Média–alta | Após MVP | somente frontend Rust+Slint sobre greetd IPC |
| swaylock | Flowral Lock Theme | Baixa visual | Próximo ao shell | personalizar swaylock mantendo segurança |
| swaylock completo | Flowral Lock | Alta/crítica | Muito posterior | protocolo seguro e autenticação auditada |
| Agente polkit | Flowral Polkit UI | Alta/segurança | Não prioritário | tematizar agente existente primeiro |
| xdg-desktop-portal | Flowral Portals | Alta | Não reimplementar agora | captura/picker/autorizações de apps |
| PCManFM | Flowral Files | Alta | Ideia futura | manter PCManFM personalizado |
| WezTerm | Flowral Terminal | Muito alta | Ideia futura | manter WezTerm |
Nota: as decisões anteriores descrevem swaybar como solução provisória. O usuário mencionou Waybar agora; Flowral Panel deve poder substituir qualquer uma, sem converter isso em decisão de adotar Waybar.
Funções e critérios de cada app
1 — Flowral Power Menu (baixa)
UI com Suspender, Sair, Reiniciar, Desligar, Cancelar. Atalhos teclado e navegação acessível. Nunca executar comandos privilegiados arbitrários. Mostra confirmação quando há risco de perda de trabalho; invocar ações via backend de sessão/energia validado. Falha não deixa sessão bloqueada.
2 — Flowral OSD (baixa–média)
Overlay de brilho, volume, mute, dispositivos e estado de microfone, sem stealing focus. Recebe atualizações dos serviços existentes; oculta-se após intervalo configurável. Pode compartilhar processo com Flowral Panel se o consumo for menor, mas não carregar Control Center inteiro sempre no boot.
3 — Flowral Wallpaper (baixa para UI)
Escolher imagem, crop/fit e tema por monitor, processar versões estáticas desfocadas para lockscreen, salvar config XDG. Na v0.1 deixar swaybg renderizar; processador de wallpaper próprio e animações só após benchmark E430. Não precisa manter indexador permanente.
4 — Flowral Switcher (baixa–média)
Lista compacta de workspaces, estado e janelas obtidos via IPC Swirl, sem polling agressivo. Alternar por teclado/gestos; cartões/miniaturas são opcionais e mais custosos. Fallback aos comandos nativos Swirl.
5 — Flowral Launcher (média)
Busca instantânea e teclado-first; categorias, favoritos e histórico só se opt-in. Ler e interpretar arquivos desktop-entry corretamente, incluindo Exec/field codes/terminal, ícones e diretórios XDG, sem executar linhas arbitrárias de um campo como shell. Layer surface com foco apropriado; fallback Fuzzel durante desenvolvimento.
6 — Flowral Panel (média)
Dois blocos no rodapé, próximos às referências visuais: workspace/data à esquerda, relógio/bateria/rede/áudio à direita. Trabalho com Layer Shell, IPC Swirl, eventos UPower, status e multi-monitor. Não implementar tray no primeiro protótipo. UI Reactiva Rust/Slint somente se prova de integração Layer Shell for aprovada.
7 — Flowral Notifications (média)
Mako é daemon de notificação, não apenas desenho de toasts. Flowral precisa implementar org.freedesktop.Notifications na bus de sessão D-Bus e cumprir versão suportada da Desktop Notifications Specification: Notify, CloseNotification, capabilities, replacement IDs, actions, timeouts, closed reasons, hints e icon support quando aplicável. Registro exclusivo do nome D-Bus por sessão; desativar Mako quando substituto estiver aprovado. Sem logs do corpo das mensagens por padrão.
Protocolo: https://specifications.freedesktop.org/notification/latest/
8 — Flowral Clipboard (média)
Usar protocolos de clipboard Wayland e bibliotecas consolidadas; histórico desligado por padrão, limpar sob demanda, ignorar tipos sensíveis e controlar persistência. Nunca salvar senhas/segredos recebidos sem uma política de privacidade; comparar benefício com wl-clipboard + cliphist.
9 — Flowral Idle Settings (baixa para painel)
Expor sliders e regras para swayidle, incluindo lock antes de suspender, DPMS off/on, inibidores e política de tampa. Não criar daemon idle do zero só para trocar tema. Se necessário depois, avaliar ext-idle-notify-v1, inhibit e tratamento de suspend/resume.
Referência: https://wayland.app/protocols/ext-idle-notify-v1
10 — Flowral Greeter (média–alta)
Interface de login própria em Rust+Slint sobre greetd IPC; greetd mantém a autenticação e inicialização de sessão. Evitar implementar um display manager próprio, PAM ou política de usuários. Greeter precisa rodar antes da sessão Flowral, possivelmente em compositor Wayland de login separado e sob usuário greeter; não assumir que Swirl do usuário já está iniciado. TTY fallback tuigreet obrigatório, e selecionar teclado/idioma/sessão corretamente; senha nunca em logs.
Referência: https://github.com/kennylevinsen/greetd
11 — Flowral Lock (tema simples; substituição crítica)
Tema de swaylock é barato. Substituir o mecanismo de bloqueio é outra história: cliente deve usar ext-session-lock-v1 se Swirl suportar, entrar em fail-closed, gerenciar todas as telas, validar autenticação PAM, resistir a falha do processo e ser revisado por segurança. Nunca fazer janela Slint normal que simula lock; isso não é bloqueio confiável.
Referência: https://wayland.app/protocols/ext-session-lock-v1
Tecnologia do shell
- Aplicações normais: Slint + Rust aprovado.
- Superfícies flutuantes ancoradas: Wayland Layer Shell, gestão de foco/teclado, namespace, escalonamento e múltiplas saídas.
- Candidato estável para estudar: Smithay Client Toolkit, com Layer Shell, mas integração direta a renderer Slint não está garantida.
- Candidato experimental: layer-shika, tentativa específica de unir Slint a Layer Shell. O próprio projeto alerta que ainda não é recomendado para produção.
- Alternativa de fallback se não houver integração robusta: manter Rust+Slint nos apps e fazer uma ADR para um frontend mínimo que implemente Layer Shell sem sacrificar segurança/performance. Não substituir stack aprovada sem evidência.
Outras substituições pequenas que fazem sentido (ideias para avaliar)
| Possível componente | Reutiliza | Dificuldade | Por que vale |
|---|---|---|---|
| Flowral Screenshot UI | grim + slurp | Baixa–média | overlay de seleção, salvar/copiar, feedback; não reimplementar captura Wayland |
| Flowral Media Controls | MPRIS D-Bus | Baixa | play/pause/faixa/volume direto no painel |
| Flowral Calendar | relógio e calendário local | Baixa | popup compacto de agenda sem serviço permanente |
| Flowral Shortcuts | arquivo de binds do Swirl | Baixa–média | UI pesquisável e conflitos, backup/rollback de config |
| Flowral Night Light Settings | ferramenta de temperatura de cor compatível | Baixa UI / média integração | perfis de horário, manter backend existente |
| Flowral Storage/Mounts | udisks2 + PCManFM | Média | montar/ejetar dispositivos com confirmação |
| Flowral Update Indicator | XBPS query + Flatpak | Baixa–média | indicador/painel sob demanda; sem updater permanente |
| Flowral Archive Actions | ferramentas archive já instaladas | Baixa–média | extrair/comprimir via menu de contexto do PCManFM, sem inventar novo explorador |
| Flowral Session Actions | Swirl IPC | Média | alternar floating/workspace e pin, sem duplicar compositor |
São candidatos, não funcionalidades aprovadas nem obrigatórias para a ISO. Para evitar proliferação de processos, screenshots, mídia, calendário e atalhos devem ser módulos do panel, launcher ou Control Center, não aplicações residentes independentes. O destino de cada um dependerá de benchmarks e compatibilidade real do Swirl.
Ordem de experimentos
- Testar um único layer surface no Swirl exibindo relógio, alimentado por timer local; medir FPS, CPU, PSS, foco e qualidade gráfica.
- Criar OSD de volume e menu de energia com mocks e backend real separáveis.
- Painel sem tray, launcher simples com desktop-entry, notificações com service DBus e fallback.
- Trocar programas um a um, removendo autostart do antigo e medindo ganho/perda.
- Adicionar clipboard, tray e preferências de idle; manter login/lock em upstream até auditoria.
- Considerar greeter, autenticação e portals em projeto separado de risco.
Gates comuns
Funciona em 1366×768 no Edge E430; keyboard-only; foco visível; seis temas; modo redução de movimento; sem apps órfãos; Swirl IPC compatível; start/stop e fallback no caso de crash; boot e RAM medidos com serviços essenciais. Nenhuma estimativa de RAM é garantia. Se o novo app consumir mais que o atual sem vantagem concreta, mantemos o upstream.
Não fazer: reimplementar Swirl/wlroots, NetworkManager, BlueZ, PipeWire, XBPS, PAM, polkit backend, portais ou o gerenciador de sessão só por consistência visual.