Packaging
O projeto GNARUS é organizado em vários repositórios na organização gnarus-sh do GitHub:
- gnarus: configuração do desktop (config, bin/gnarus-setup, share).
- gnarus-session: launchers de sessão e a entrada de sessão Wayland.
- gnarus-appearance: wallpapers e fontes empacotadas compartilhados.
- gnarus-storage: o programa Rust que alimenta o módulo Waybar de armazenamento removível.
- gnarus-calendar: o programa Rust que alimenta o popup de calendário da Waybar.
- gnarus-greeter: integração com o greeter greetd.
- gnarus-pkgbuild: os PKGBUILDs do desktop e dos pacotes de componentes.
- packages: o repositório de pacotes binários servido em
https://gnarus-sh.github.io/packages/. - site-src: a fonte deste site (Astro).
- gnarus-sh.github.io: o site publicado.
Os manifests Arch ficam em arch/ no gnarus-pkgbuild: arch/gnarus/PKGBUILD, arch/gnarus-session/PKGBUILD, arch/gnarus-appearance/PKGBUILD, arch/gnarus-storage/PKGBUILD, arch/gnarus-calendar/PKGBUILD e arch/gnarus-greeter/PKGBUILD. As dependências vendored (pwvucontrol, snappy-switcher e wlogout) ficam em vendors/.
Empacotamento
Seção intitulada “Empacotamento”O GNARUS é empacotado como um spin de Hyprland para Arch Linux, dividido em pacotes de componentes focados.
A instalação dos pacotes é somente-sistema: instala defaults somente leitura em /usr/share/, comandos em /usr/bin/ e a entrada de sessão em /usr/share/wayland-sessions/. Nada é escrito em $HOME durante a instalação.
Layout instalado
Seção intitulada “Layout instalado”O pacote gnarus instala:
/usr/bin/gnarus-setup/usr/share/gnarus/O gnarus-session instala os entrypoints de sessão:
/usr/bin/gnarus-session/usr/bin/gnarus-start/usr/bin/gnarus-tty/usr/share/wayland-sessions/gnarus.desktopO gnarus-appearance instala os ativos compartilhados:
/usr/share/backgrounds/gnarus//usr/share/fonts/O gnarus-storage é empacotado separadamente. Ele instala /usr/bin/gnarus-storage, a configuração padrão em /etc/gnarus-storage/ e a licença em /usr/share/licenses/gnarus-storage/. Veja a página Armazenamento Removível para uso e configuração.
O gnarus-calendar é empacotado separadamente. Ele instala /usr/bin/gnarus-calendar, os defaults em /etc/gnarus-calendar/ e a unit systemd de usuário em /usr/lib/systemd/user/gnarus-calendar.service. Veja a página Calendário para uso e configuração.
O pacote gnarus depende de gnarus-appearance, gnarus-calendar, gnarus-greeter, gnarus-session e gnarus-storage, então instalar o GNARUS resolve-os do mesmo repositório.
Configuração do usuário
Seção intitulada “Configuração do usuário”O GNARUS não copia dotfiles para $HOME antes de o desktop poder iniciar. Os entrypoints de runtime leem os padrões empacotados de /usr/share/gnarus e os overrides do usuário de ~/.config, com a sessão adicionando /usr/share/gnarus ao $XDG_CONFIG_DIRS.
O gnarus-setup é um helper opcional. Ele copia /usr/share/gnarus/<app> para ~/.config/<app> sob demanda (--copy <app> ou --copy-all), substituindo um destino existente apenas com --force, que faz backup do diretório atual como ~/.config/<app>.bak-<timestamp>. Depois de copiados, os arquivos são overrides do usuário que upgrades de pacote nunca substituem.
O gnarus-tty fornece suporte a login por TTY sem display manager. Ele registra uma sessão logind, inicia o D-Bus, define variáveis de ambiente e inicia o Hyprland quando o usuário executa gnarus-tty manualmente após logar em um TTY. O pacote não instala um script profile.d de auto-start; um profile opt-in é empacotado em /usr/share/gnarus/gnarus/profile e o auto-start por TTY é uma escolha explícita do usuário.
Algumas dependências de runtime que antes exigiam o AUR, incluindo pwvucontrol, snappy-switcher e wlogout, são vendored e publicadas no mesmo repositório que o GNARUS:
sudo pacman -Syu gnarusVersionamento
Seção intitulada “Versionamento”Os pacotes de componentes fixam seus repositórios por tag:
ENV_VER=0.3.34 # arch/gnarus/PKGBUILDpkgver=0.1.4 # arch/gnarus-storage/PKGBUILDpkgver=0.2.2 # arch/gnarus-calendar/PKGBUILDA versão do pacote é atualizada com make version <X.Y.Z> no repositório gnarus-pkgbuild. Mantenha ENV_VER alinhado com a tag do gnarus e atualize os PKGBUILDs dos componentes quando seus repositórios publicarem novas tags.
Publicação
Seção intitulada “Publicação”O workflow Build and publish Arch packages (.github/workflows/build-and-publish.yml) no repositório gnarus-pkgbuild constrói todos os PKGBUILDs descobertos, incluindo o gnarus e seus pacotes de componentes, assina os pacotes e bancos pacman com a chave GPG do GNARUS, monta o banco com repo-add e publica os pacotes no branch main de packages sob public/arch/.
O layout do repositório packages:
packages public/arch/gnarus.conf public/arch/gnarus.gpg public/arch/x86_64/gnarus.db public/arch/x86_64/gnarus.db.sig public/arch/x86_64/*.pkg.tar.zst public/arch/x86_64/*.pkg.tar.zst.sig public/debian/ public/rpm/O workflow de deploy do site (no repositório site-src) constrói o site com Astro e espelha o dist/ em gnarus-sh.github.io. Ele não armazena pacotes binários.
Para publicar os pacotes no repositório packages são necessários os secrets PACKAGES_REPO_TOKEN (um token de acesso pessoal de escopo restrito com contents: write no repositório packages) e GPG_PRIVATE_KEY (a chave privada ASCII-armored usada apenas dentro do GitHub Actions). GPG_PASSPHRASE é opcional quando a chave privada tiver senha.