Skip to content

About

Transforme o Fedora Everything em uma instalação completa podendo escolher entre 3 interfaces gráficas mondernas como: Inir, Noctalia ou DankLinux junto com compositores Wayland: Niri e Umbriel

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

41 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🌌 Fedora Multi-Shell: Ambientes Wayland Modernos

Google Antigravity Gemini 3.8 Flash Google Free Tier Agentic Workflow

Transforme o Fedora Everything em uma instalação completa e com interface gráfica moderna.

💡 Transparência Técnica & Engenharia: Este projeto foi concebido e homologado pelo autor utilizando o Antigravity IDE e o modelo Gemini 3.8 Flash (plano gratuito da Google) em fluxo agêntico autônomo.

📋 Documento de Arquitetura Base: Todo o projeto foi planejado e executado com base no Plano de Implementação e Especificação Técnica. Esse arquivo contém todas as diretrizes de arquitetura em camadas, tratamento defensivo do PAM/Keyring, suporte a máquinas virtuais e decisões de projeto utilizadas pela IA para construir o instalador.

Consulte o Catálogo de Pacotes e Dependências para ver a listagem completa e detalhada de tudo o que é provisionado pelo sistema e as Diretrizes de Arquitetura e Boas Práticas para os padrões de engenharia e regras de programação defensiva adotadas.

Instalador modular, em camadas e automatizado para transformar uma instalação mínima do Fedora Everything Netinstall em uma workstation gráfica moderna com suporte à seleção exclusiva de Interface Gráfica (Desktop Shell) e Compositor Wayland:

  • Interfaces Gráficas (Desktop Interfaces):
    • iNiR Shell: Interface moderna baseada em Quickshell, C++/Qt e theming dinâmico Material You via COPR errornointernet/quickshell (utiliza exclusivamente o compositor Niri).
    • Noctalia Shell: Interface gráfica desktop nativa em C++/Qt via pacote nativo Fedora (permite escolher entre o compositor Niri ou Umbriel).
    • Dux Shell / DMS (Dux Labs): Interface gráfica e ambiente completo da Dux Labs (a antiga DankLinux/DankMaterialShell, renomeada no release 2.0) via COPR avengemedia/danklinux e o instalador oficial headless install.duxlabs.dev (utiliza Niri, terminal Kitty, dms-greeter, danksearch e dankcalendar).
  • Compositores Wayland de Alta Performance:
    • Niri: Scrollable tiling Wayland compositor com rolagem horizontal contínua de colunas via COPR yalter/niri.
    • Umbriel: Compositor Wayland dinâmico via Repositório Terra do Fyra Labs, com suporte à rolagem contínua de janelas (horizontal e vertical), além de múltiplos modos de exibição dinâmicos (Dwindle e Master).
  • Display Manager / Gerenciador de Login: SDDM nativo ou Greetd (noctalia-greeter / dms-greeter) com integração e desbloqueio silencioso do PAM GNOME Keyring.
  • Emulador de Terminal & CLI: Kitty (acelerado por GPU) + fastfetch (resumo de hardware).
  • Compatibilidade X11: xwayland-satellite (rootless isolado).
  • Navegador Web: Brave Origin (sem telemetria, IA ou criptomoedas).
  • Loja de Apps: GNOME Software (Loja gráfica nativa com integração ao Flathub e atualizações de sistema).
  • Reprodutor de Vídeo: Cine (io.github.diegopvlk.Cine via Flatpak).
  • Documentação Técnica: Consulte o Plano de Implementação e Especificação Técnica.

📸 Prévia Visual das Interfaces

Amostras reais do visual de cada Desktop Shell (Fedora Linux 44), para você escolher com base no estilo de cada interface antes de instalar:

iNiR Shell

Usa exclusivamente o compositor Niri.

Central de configurações com a família de painéis iRiS ativa — barra superior, dock e theming dinâmico Material You:

Prévia da iNiR Shell (Niri) com a família de painéis iRiS

Noctalia Shell

Permite escolher entre os compositores Niri e Umbriel.

Painel de Acesso Rápido (Quick Access) com widgets de sistema, mídia, energia e rede — captura abaixo mostrando o Noctalia sobre o compositor Umbriel:

Prévia da Noctalia Shell (Umbriel) com o painel de Acesso Rápido


🏗️ Arquitetura em Camadas (Layered Architecture)

O projeto adota os princípios de Separação de Preocupações (SoC), Idempotência, Infraestrutura como Código (IaC) e Padrão Strategy para despachar submódulos de compositores e interfaces gráficas. Os pacotes de usuário (fontes, terminal Kitty e codecs) são instalados no Módulo 03, garantindo ambiente pronto antes de subir a stack visual:

fedora-multishell/
├── install.sh                       # Ponto de entrada: validações, menu interativo pt-BR e orquestrador
├── docs/
│   ├── PLANO_DE_IMPLEMENTAÇÃO_E_ESPECIFICAÇÃO_TÉCNICA.md # Especificação técnica completa
│   ├── CATALOGO_DE_PACOTES.md       # Catálogo detalhado e mapeamento de dependências
│   ├── DIRETRIZES_DE_ARQUITETURA_E_BOAS_PRATICAS.md # Regras de engenharia e boas práticas
│   └── preview/                     # Capturas de prévia visual das Desktop Shells (iNiR, Noctalia)
├── config/
│   ├── settings.conf                # Variáveis globais, repositórios e flags padrão
│   ├── packages/                    # Manifestos declarativos de pacotes (DNF / Flatpak)
│   │   ├── apps.conf                # Aplicações universais de usuário (Kitty, Nautilus, Codecs)
│   │   ├── base.conf                # Infraestrutura base do sistema (Hardware, Som, Rede, VM)
│   │   ├── brave.conf               # Manifesto de instalação do navegador Brave Browser
│   │   ├── flatpak.conf             # Lista declarativa de aplicativos Flatpak do Flathub (com overrides)
│   │   ├── greetd.conf              # Daemons base do Display Manager Greetd
│   │   ├── inir.conf                # Dependências, runtimes e shaders do iNiR / Iris / Quickshell
│   │   ├── mesa.conf                # Pilha gráfica aberta Mesa (DRI/Vulkan/VA-API/PRIME)
│   │   ├── niri.conf                # Pacotes do compositor Niri, xwayland-satellite e portais
│   │   ├── noctalia.conf            # Pacotes nativos da interface Noctalia e Greeter
│   │   ├── nvidia.conf              # Pilha proprietária de drivers e módulos NVIDIA (akmods)
│   │   ├── sddm.conf                # Pacotes base do Display Manager SDDM
│   │   └── umbriel.conf             # Pacotes do compositor Umbriel Nightly e portais
│   ├── desktop/                     # Configurações declarativas de interface do usuário (~/.config)
│   │   ├── niri/
│   │   │   └── config.kdl           # Configuração com atalhos 1:1 equivalentes em sintaxe KDL
│   │   └── umbriel/
│   │       ├── config.toml          # Configuração personalizada (atalhos, mouse, teclas Fn)
│   │       └── noctalia.toml        # Include opcional intencionalmente vazio para customizações locais
│   └── system/                      # Modelos declarativos do sistema operacional (/etc)
│       ├── greetd.toml.template     # Modelo de configuração do Greetd
│       ├── pam_greetd.template      # Modelo de autenticação PAM para o Greetd
│       └── pam_sddm.template        # Modelo de autenticação PAM para o SDDM
├── lib/
│   ├── ui.sh                        # Renderização ANSI: banner dinâmico (TARGET_FEDORA_VERSION), caixas temáticas e prompts validados (ui_ask_choice/ui_ask_yn)
│   ├── logger.sh                    # Registro em $XDG_STATE_HOME/fedora-multi-shell/install.log (fora de /tmp) e traps de erro
│   └── utils.sh                     # Validação de não-root, resolução segura via getent, install_packages_from_conf e cleanup do sudoers
└── modules/
    ├── 00_repos.sh                  # Repositórios (RPM Fusion, Brave, Flathub, COPRs condicionais, Terra e Dux Labs)
    ├── 01_system_hardware.sh        # Firmware, microcódigo de CPU, PipeWire, som e energia (Tuned)
    ├── 02_gpu_drivers.sh            # Drivers Mesa abertos (via mesa.conf) ou NVIDIA com akmods
    ├── 03_desktop_apps.sh           # Camada de Usuário: Kitty, fontes, codecs, Brave Origin e Flatpaks
    ├── 04_display_stack.sh          # Camada de Display Manager: SDDM ou Greetd (Noctalia/DMS) e integração PAM Keyring
    ├── 05_compositor.sh             # Roteador de Compositor (Padrão Strategy)
    ├── 06_desktop_interface.sh      # Roteador de Interface Gráfica (Padrão Strategy)
    ├── 07_post_install.sh           # Autostart/config da interface, VM flags, ativação DM e validações
    ├── compositors/
    │   ├── niri.sh                  # Niri (alacritty filtrado por nome), remoção defensiva, xwayland-satellite e portais
    │   └── umbriel.sh               # Umbriel Nightly, xwayland-satellite e portais Umbriel/GTK
    └── interfaces/
        ├── inir.sh                  # Deno (sha256/arquitetura), clone e ./setup install -y sob o usuário real
        ├── noctalia.sh              # Pacote nativo 'noctalia' e 'noctalia-greeter' via DNF
        └── duxshell.sh              # Instalador oficial headless do Dux Shell (DMS)

🎯 Matriz de Combinações Suportadas

Opção de Interface Gráfica Compositor Wayland Características Principais
iNiR Shell Niri (Fixo) Estética moderna com cores dinâmicas Material You, widgets e rolagem horizontal de janelas contínua.
Noctalia Shell Niri Shell nativa em C++/Qt com painel clássico/moderno sobre o motor de rolagem horizontal contínua do Niri.
Noctalia Shell Umbriel Shell nativa em C++/Qt sobre Umbriel, compositor Wayland dinâmico com rolagem contínua de janelas (horizontal e vertical), além de múltiplos modos de janelas (Dwindle e Master).
Dux Shell (DMS) Niri (Fixo) Ambiente Dux Labs com painéis Material You, dms-greeter (Greetd), danksearch, dankcalendar e terminal Kitty fixado.

🚀 Guia de Instalação Passo a Passo

1. Preparação da Mídia (Fedora Everything Netinstall)

  1. Baixe a imagem ISO do Fedora Everything no site oficial do Fedora.
  2. Na tela de Seleção de Programas (Software Selection) do instalador Anaconda:
    • Selecione Minimal Install (Instalação Mínima).
  3. Crie o seu usuário comum e marque a opção para torná-lo administrador.

2. Executando o Instalador

Após reiniciar no console TTY com seu usuário comum:

# 1. Instale o git para clonar o repositório
sudo dnf install -y git

# 2. Clone o instalador
git clone https://github.com/danieldemoura/fedora-multishell.git
cd fedora-multishell

# 3. Dê permissão de execução
chmod -R +x install.sh modules/

# 4. Inicie o instalador como USUÁRIO COMUM (NÃO execute com sudo!)
./install.sh

📋 Interface CLI Padronizada (pt-BR)

O instalador conta com um menu interativo sem poluição visual:

  • Prompts numéricos utilizam a sintaxe direta: Escolha uma opção: (pressionar Enter assume 1).
  • Prompts booleanos adotam a convenção Unix de letra maiúscula para a opção padrão:
    • Deseja instalar os drivers proprietários da NVIDIA? [s/N]: (Enter assume N).
    • Deseja iniciar a instalação com estas definições? [S/n]: (Enter assume S).
    • Deseja reiniciar o sistema agora? [S/n]: (Enter assume S e executa reinicialização imediata com sudo reboot).

🛡️ Tabela Formal de Decisões de Engenharia Defensiva

Decisão Arquitetural / Defensiva Justificativa Técnica e Prevenção de Falhas
Autorização do Noctalia Greeter (passwordless-sync) O diretório /var/lib/noctalia-greeter com posse de greetd:greetd e a execução de noctalia-greeter passwordless-sync enable autorizam formalmente via Polkit a sincronização bidirecional do papel de parede e temas do desktop com a tela de login sem exigir senha administrativa.
Desativação preventiva de GDM / LightDM / Greetd Evita conflitos de display manager caso o script seja reexecutado ou utilizado sobre Fedora Workstation/Spins que contenham outros gerenciadores pré-instalados. Previne dois daemons disputando o mesmo dispositivo DRM/KMS.
Execução de sudo -v antecipado em interfaces/inir.sh Em etapas anteriores demoradas (como o download de aplicativos e codecs no Módulo 03), o timestamp padrão do sudo pode expirar. Atualizar o timestamp explicitamente antes de acionar ./setup install -y impede que o instalador do iNiR trave esperando senha de administrador em background.
Isolamento e verificação SHA-256 do download do Deno na Home (${REAL_HOME}) Em sistemas Fedora modernos, /tmp é montado como tmpfs em memória RAM. Em máquinas virtuais com 2GB-4GB de memória, arquivos temporários podem esgotar inodes/espaço (curl: (23) Failure writing output to destination). Utilizar a Home garante armazenamento persistente em disco. Além disso, a arquitetura do binário é detectada por uname -m e o pacote é confrontado com o checksum SHA-256 oficial da release antes de ser instalado em /usr/local/bin.
Instalação antecipada de aplicativos no Módulo 03 Instalar Kitty, fontes Google Noto e codecs antes da configuração do compositor e da shell garante que todas as dependências visuais e ferramentas de terminal já estejam no disco antes de a interface gráfica ser compilada, configurada ou validada.
Templates Declarativos vs /usr/share/doc A adoção de templates próprios na pasta do instalador elimina a dependência de arquivos de exemplo do sistema operacional (que sofrem com caminhos versionados no Fedora e causavam o erro de atalhos vazios not bound), garantindo que tanto o Niri quanto o Umbriel iniciem com mapeamento completo de atalhos, mouse e teclas Fn.
Injeção Dinâmica de Variáveis de VM vs Templates Limpos Os arquivos em config/desktop/ são mantidos intencionalmente limpos e otimizados para Máquinas Físicas (Bare Metal). A injeção das variáveis de ambiente (LIBGL_ALWAYS_SOFTWARE=1, WLR_NO_HARDWARE_CURSORS=1 e hardware_cursor = false) ocorre em tempo de execução via 07_post_install.sh somente se IS_VM=true, protegida por guarda de idempotência (grep -qF). Isso previne que computadores reais com GPU dedicada tenham sua aceleração desativada, ao mesmo tempo em que blinda máquinas virtuais contra telas pretas e fechamentos inesperados (crashes) do QtQuick.
Isolamento de Templates por Shell A cópia dos templates do Umbriel e Niri ocorre estritamente quando SELECTED_SHELL="noctalia", preservando a autonomia e configuração gerada pelo instalador nativo do iNiR quando este for o escolhido.
Autostart e VM Flags do iNiR no Niri O instalador nativo do iNiR copia seus arquivos para ~/.config/quickshell/inir, mas não registra a inicialização automática. O Módulo 07 vincula a shell como serviço de usuário systemd (inir.service ligado a niri.service por wants link — caminho canônico upstream e pré-requisito das trocas de família de painéis em runtime, como o iRiS), pré-ativa a família iRiS no config operativo da shell (~/.config/illogical-impulse/config.json, caminho que o Directories.qml lê em runtime, semeado a partir do default instalado em ~/.config/inir/config.json e espelhado nele) e injeta o bloco environment de software rendering para VM no config.kdl. O spawn-at-startup "inir" "run" permanece apenas como contingência quando a unidade de usuário do Niri não existe, prevenindo tela cinza vazia após o login no SDDM.
Exclusão e Remoção Defensiva do Alacritty (compositors/niri.sh) O pacote upstream do Niri pode trazer o Alacritty como dependência recomendada ou fraca. A exclusão nominal de alacritty (filtrado localmente antes do dnf, pois o dnf5 rejeita argumentos combinados com --exclude) aliada à remoção defensiva subsequente garante que apenas o Kitty permaneça como emulador de terminal oficial do sistema, sem quebrar as outras dependências normais e fracas do Niri.
Autorização Administrativa Temporária no Sudoers (validada via visudo) A criação do drop-in /etc/sudoers.d/99-fedora-installer-temp com trap de autodestruição (EXIT HUP INT TERM) elimina o timeout de credenciais do sudo (5 minutos) durante etapas demoradas não-interativas. O fluxo é endurecido: a regra é montada em mktemp, validada com sudo visudo -cf antes de tocar /etc/sudoers, instalada com install -m 0440 e precedida da remoção de drop-in órfão de execuções anteriormente interrompidas, sem deixar resquícios NOPASSWD.

⌨️ Atalhos de Teclado Nativos e Controle

Niri

Atalhos extraídos diretamente de config/desktop/niri/config.kdl (Mod = Super).

Atalho Ação
Super + Return Abre o Terminal GPU (kitty)
Super + Space Abre o lançador de aplicativos (launcher do Noctalia)
Super + Q Fecha a janela em foco
Super + H ou ← Foca a coluna anterior (rolagem horizontal)
Super + → Foca a coluna próxima
Super + J / K ou ↓ / ↑ Foca a janela inferior / superior dentro da coluna
Super + Shift + ← / → Move a coluna atual para a esquerda / direita
Super + Shift + ↑ / ↓ Move a janela dentro da coluna
Super + L Bloqueia a sessão (noctalia msg session lock)
Super + Esc Encerra a sessão (logout)

Umbriel

Atalho Ação
Super + Return Abre o Terminal GPU (kitty)
Super + Q Fecha a janela em foco
Super + Navegação de Janelas Rolagem contínua bidirecional e comutação de layouts (Dwindle e Master)

Dux Shell (DMS)

⚠️ Os atalhos do DMS são definidos pelos padrões upstream do Dux Shell e do Niri (instalados pelo instalador da Dux Labs), não por templates deste instalador. A tabela abaixo é ilustrativa — confira o painel/atalhos oficiais do DMS após a instalação.

Atalho Ação
Super + T Abre o Terminal GPU (kitty)
Super + Q Fecha a janela em foco
Super + Space / D Lança o menu de aplicativos / busca (danksearch)
Super + H / L ou ← / → Foca a coluna anterior / próxima no compositor Niri
Super + Shift + H / L Move a coluna atual para a esquerda / direita
Controles DMS / Niri Gestão de painéis, notificações e widgets integrados do Dux Shell

About

Transforme o Fedora Everything em uma instalação completa podendo escolher entre 3 interfaces gráficas mondernas como: Inir, Noctalia ou DankLinux junto com compositores Wayland: Niri e Umbriel

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages