Pular para o conteúdo

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/.

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.

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.desktop

O 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.

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:

Terminal window
sudo pacman -Syu gnarus

Os pacotes de componentes fixam seus repositórios por tag:

Terminal window
ENV_VER=0.3.34 # arch/gnarus/PKGBUILD
pkgver=0.1.4 # arch/gnarus-storage/PKGBUILD
pkgver=0.2.2 # arch/gnarus-calendar/PKGBUILD

A 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.

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.