Flowral Theme Engine — especificação
Implementação aprovada: Rust + Slint para flowral-themes; motor desacoplado e executável também em CLI. Sem serviço permanente obrigatório.
Domínio
ThemeFamily = Sakura | Daisy | Petunia. Appearance = Light | Dark. Seis combinações. AccentOverride opcional, WallpaperSelection, IconPack, UiFont, MonoFont, HighContrast, ReduceMotion.
# Exemplo declarativo, NÃO arquivo de implementação existente
schema_version = 1
family = "petunia"
appearance = "dark"
accent_override = "#C998BB"
wallpaper = "wallpapers/petunia-dark.jpg"
ui_font = "Noto Sans"
mono_font = "Iosevka"
reduce_motion = false
Palette source → semantic tokens → adapter-specific generated configs. Não misturar chaves de aplicativos com a paleta canônica.
Aplicadores
| Destino | Técnica | Resultado mínimo |
|---|---|---|
| Swirl | Config gerada (cores de foco/idle/bordas) + reload compatível | feedback imediato sem reiniciar sessão |
| WezTerm | Módulo Lua dedicado gerado/importado | ANSI 16 + background/foreground/cursor/selection, live reload se suportado |
| Fish | fish_color_*/tema declarado |
sintaxe, autosuggestion, seleção e prompt |
| Neovim | tema Lua + highlight groups/Tree-sitter | cores + Markdown legível |
| Mako | arquivo/CLI conforme versão | notificações coerentes |
| Fuzzel/swaybar | config/estilo adaptado | papel, seleção e tipografia |
| PCManFM GTK | configuração de tema GTK/ícones | aplicar o máximo permitido por GTK/CSD |
| Qt apps | palette/settings Qt conforme integração | sem prometer sobrepor estilos internos |
| Outros terminais/TUIs | ANSI OSC/arquivos de tema quando suportado | fallback para cores ANSI do terminal |
Limite técnico: não há garantia universal de alterar decoração client-side (CSD) nem temas internos de terceiros. A página do app mostra suporte: nativo, adaptador, compatibilidade ou não suportado.
Operação de aplicar tema (transação)
- Carregar paleta declarativa e validar referências de assets/fontes.
- Mostrar preview e lista exata de aplicativos afetados.
- Salvar snapshot de arquivos sob controle do Flowral; detectar modificações manuais e conflitos.
- Gerar arquivos temporários para adapters instalados, validar sintaxe específica.
- Aplicar atomicamente; solicitar reload somente em componentes compatíveis.
- Conferir resultado; se falhar, reverter arquivos, preservar log redigido e avisar usuário.
- Persistir tema efetivo e emitir evento local (sem daemon dedicado).
- Em inicialização de aplicativo Flowral, carregar tema atual via
flowral-themelibrary.
Armazenamento
- Presets versionados em
/usr/share/flowral/themes/(somente leitura). - Preferências do usuário em
$XDG_CONFIG_HOME/flowral/theme.toml. - Estado de transação/backup em
$XDG_STATE_HOME/flowral/themes/. - Cache de wallpapers processados em
$XDG_CACHE_HOME/flowral/. - Nunca instalar assets privados sem verificar direitos.
UI do gerenciador
Grade 3 famílias × 2 modos, preview papel/borda/texto/terminal, opções wallpaper/ícones/fontes, salvar/aplicar/desfazer, indicador por adapter, reset seletivo, import/export de tema sem credenciais.
Testes/aceitação
- Seis variantes aplicáveis sem crash; rollback após falha simulada.
- Contraste e legibilidade das seis, inclusive terminal e seleção.
- Idempotência (aplicar duas vezes gera mesmos arquivos).
- WezTerm, Fish e Neovim recebem tokens reais; nada depende de servidor web.
- Tema permanece após reinício; não altera arquivos do usuário sem snapshot/confirmação.
- Não aumenta consumo de repouso com processo residente.