-
Notifications
You must be signed in to change notification settings - Fork 17
Architecture
cosmic-overlay/
├── cosmic-base/ # Primary category: COSMIC DE apps + Pop!_OS components
├── cosmic-extra/ # Community add-ons layered on top of COSMIC (e.g. cutecosmic)
├── cosmic-utils/ # Packages from the community github.com/cosmic-utils org
├── acct-group/ # System groups needed by daemons (e.g. cosmic-greeter)
├── acct-user/ # System users needed by daemons (e.g. cosmic-greeter)
├── virtual/ # Virtual packages
├── x11-themes/ # Theming packages (e.g. adw-gtk3)
├── dev-lang/, dev-util/ # Toolchain packages COSMIC/tooling needs (dart, buf, dart-sass...)
├── eclass/ # Shared build logic (see below)
├── scripts/ # Maintainer automation (see [[Bumping Ebuilds]], [[QA and Testing]])
├── profiles/ # Gentoo repo profile data
└── metadata/layout.conf # masters = gentoo, thin-manifests = true
cosmic-base used to be cosmic-de; packages were migrated in 05.2025 via pkgmove. Users on the old category need to sync once to get the automatic move.
Every COSMIC package ebuild inherits exactly one of two top-level eclasses, which both in turn inherit cosmic-common (plus cargo, xdg, llvm-r1):
-
cosmic-de-r2.eclass— for tagged/versioned ebuilds. Rust build profile handling (RUST_MIN_VER), USE flags, cargo invocation. -
cosmic-live.eclass— the same, for-9999live ebuilds tracking upstreammaster; additionally inheritsgit-r3. -
cosmic-common.eclass— shared helpers both of the above pull in (install helpers likecosmic-common_install_metainfo, target dir handling, etc). Not inherited directly by package ebuilds.
Because nearly every package in cosmic-base inherits one of these (directly inherit cosmic-de-r2 or inherit cosmic-live, both usually combined with desktop and sometimes systemd/pam/tmpfiles), an eclass change has repo-wide blast radius — see the eclass note in Maintainer Guide.
-
debug—cargo build --profile debug -
debug-line-tables-only— addsprofile.$profile_name.debug="line-tables-only", useful for stack traces regardless of profile -
max-opt— injectedrelease-maximum-optimizationprofile (1 codegen unit, opt-level=3); mutually exclusive withdebug
-
Tagged/stable ebuilds track upstream release tags from
pop-os/cosmic-epoch, e.g.epoch-1.4.0. The overlay version drops theepoch-prefix (cosmic-comp-1.4.0.ebuild). -
Live ebuilds (
-9999) track upstreammasterdirectly and are keyword-masked by default (masked via missing keywords, not~arch). -
Revisions (
-r1,-r2, ...) are reserved for overlay-side patch bumps (backports, ebuild fixes) — not for upstream source changes.PVRwas deliberately dropped fromSRC_URIfor this reason (an upstream re-tag should mean a newPV, not a revision bump).
Non-live ebuilds don't build against the live network — dependency crates are pre-vendored:
-
cargo vendor --lockedis run against the upstream tag to produce a vendored dependency set. - That's compressed with
zstdand uploaded as a GitHub release asset in this repo (not upstream), tagged to match the ebuild version. - The ebuild's
ManifestrecordsDISTentries withBLAKE2B/SHA512hashes for both the upstream source tarball and the vendor tarball.
iced/libcosmic system libraries were tried at one point and dropped (see commit fec5043) — Rust's static linking model makes unbundling not worth the effort here.
Two workflows in .github/workflows/:
-
qa-check.yml— runspkgcheck scan+pkgdev manifestinside a Gentoo Docker container, on push/PR tomainand weekly (Sundays 06:00 UTC). Comments QA summaries on PRs, uploads HTML/Markdown/JSON reports as artifacts. -
deploy-pages.yml— publishes the QA reports frommainto GitHub Pages athttps://fsvm88.github.io/cosmic-overlay/qa-reports/.
pkgcheck config lives in scripts/pkgcheck.conf (amd64/arm64 only, RequiredUseDefaults/RedundantVersion warnings disabled as not relevant to an overlay).