🏡 index : quine-global/quine-manifest.git

# Where every Quine repo lives, on GitHub and on Forgejo.
# `python3.14 quine-repos.py` shows drift; `--apply` fixes it. See README.md.

forgejo_url = "https://forge.in.quineglobal.com"

# Renovate (petersweb-infra's nixos/renovate.nix): dependency update PRs on
# the forge. For each repo it covers, the script makes its `user` a
# collaborator with write access and adds the webhook that wakes it; Renovate
# finds those repos itself and opens a "Configure Renovate" PR in each new one
# (its renovate.json, extending renovate/default.json here). By default it
# covers our own repos in these buckets, not forks of other projects (whose
# dependencies come with upstream merges) or mirrors; a repo's
# `renovate = true|false` overrides that.
[renovate]
user = "renovate"
buckets = ["main", "labs"]
webhook = "http://10.89.0.1:9055/hooks/renovate" # the forge VM, as Forgejo's container sees it

# A bucket is a pair of orgs, one per host. Moving a repo between buckets
# transfers it on both sides. The boneyard is where retired repos go; they
# stay unarchived and mirrored like everything else.
#
# mirror_token_file: GitHub fine-grained token (resource owner = the bucket's
# GitHub org, Contents + Workflows read/write) that Forgejo push mirrors use.
[buckets.main]
github = "quine-global"
forgejo = "quine-global"
mirror_token_file = "~/.config/forgejo/github-mirror-token" # expires 2027-10-12

[buckets.labs]
github = "quine-global-labs"
forgejo = "quine-global-labs"
mirror_token_file = "~/.config/forgejo/github-mirror-token-labs" # expires 2026-11-10

[buckets.boneyard]
github = "quine-global-boneyard"
forgejo = "quine-global-boneyard"
archived = false # unarchive anything that lands here
mirror_token_file = "~/.config/forgejo/github-mirror-token-boneyard" # expires 2027-01-09

# Per-repo keys (all optional except bucket):
#   primary = "forgejo" (default): Forgejo is canonical, push-mirrored to GitHub
#           | "github": GitHub is canonical, Forgejo holds a pull mirror
#   github  = false     Forgejo-only repo, nothing on GitHub
#   import  = "full" (default: issues, PRs, releases, wiki) | "code" (git only).
#             Use "code" for repos with big release assets: full imports that
#             take over ~60s die at nginx's proxy timeout and leave the repo
#             stuck "migrating".
#   archived = true|false  archive / unarchive on both sides. Unset: leave it, but
#             report repos that are archived on GitHub (never unarchived silently).
#   renovate = true|false  Renovate on / off ([renovate] above). Unset: on for
#             our own repos in its buckets, off for forks (forked_from) and
#             mirrors.
#   actions = true|false  Forgejo Actions on / off. Unset: off for upstream
#             mirrors (they carry upstream's CI, which would sit "waiting" for
#             runners we don't have), left alone for everything else.
#   forked_from = "owner/repo" (GitHub) or a URL: Forgejo's description says
#             "(Forked from …)". GitHub descriptions of Forgejo-primary repos
#             always say "(Mirror of <Forgejo URL>)" instead.
#   upstream = "<url>"  third-party source: Forgejo pull-mirrors it and push-mirrors on to GitHub
#   description = "…"  the repo's description on both hosts (before the
#             Forked from / Mirror of note). Unset: keep whatever the hosts
#             have, copying one side's to an empty other.

# ── main ─────────────────────────────────────────────────────────────────────
[repos.quintodrome]
bucket = "main"
forked_from = "navidrome/navidrome"
renovate = true # its renovate.json leaves Navidrome's own go.mod to upstream merges
import = "code" # ~3.3 GB of release assets on GitHub, left there

[repos.hyper]
bucket = "main"
forked_from = "vercel/hyper"
primary = "github"
import = "code" # ~20 GB of release assets on GitHub

[repos."quintodrome.quineglobal.com"]
bucket = "main"
description = "Website and auto-update feed servers for Quintodrome and Quine Hyper"
forked_from = "quine-global/hyper.quineglobal.com"

[repos."hyper.quineglobal.com"]
bucket = "main"
description = "Website and auto-update feed server for Quine Hyper"

[repos."linux.quineglobal.com"] # private for now
bucket = "main"
github = false

[repos.site-image] # the build-and-bump action the *.quineglobal.com sites use
bucket = "main"
github = false

# Our fork of rgit, the read-only git web frontend behind
# git.quinefoundation.com; its deploy workflow pins the image in
# petersweb-infra, like the websites'.
[repos.rgit]
bucket = "main"
github = false
forked_from = "w4/rgit"

# The container image the forge's ubuntu-latest jobs run in: official
# node:24-bookworm plus a few tools, in place of catthehacker's image. Its
# deploy workflow pins the image in petersweb-infra's nixos/linux.nix.
[repos.ci-image]
bucket = "main"
github = false

# Our fork of git-sync, with --exechook-path (the hook only for commits that
# change given paths); petersweb-infra builds it as a patch on upstream's
# release (nixos/git-sync/). Actions off: it carries upstream's CI, which
# builds in upstream's Docker images and fails on our runners.
[repos.git-sync]
bucket = "main"
github = false
forked_from = "kubernetes/git-sync"
actions = false

# Public, so other repos' workflows can load it (`uses:`); it holds the
# action and build scripts only, no secrets. (OK'd 2026-11-03.)
[repos.app-build] # the RPM build action our in-house apps use
bucket = "main"
github = false

[repos.guix-builds]
bucket = "main"

[repos.quine-core]
bucket = "main"

[repos.electron-link]
bucket = "main"
forked_from = "atom/electron-link"

[repos.ava]
bucket = "main"
forked_from = "avajs/ava"

[repos.ava-typescript]
bucket = "main"
forked_from = "avajs/typescript"

[repos.electron-drag-click]
bucket = "main"
forked_from = "gerhardberger/electron-drag-click"

[repos.ncdu]
bucket = "main"
upstream = "https://code.blicky.net/yorhel/ncdu.git" # pull-mirrored, then pushed to GitHub

[repos.webdriverio]
bucket = "main"
forked_from = "webdriverio/webdriverio"

[repos.recast]
bucket = "main"
forked_from = "benjamn/recast"

[repos."quine-global.github.io"]
bucket = "main"
description = "Quine Global's GitHub Pages site"

[repos.homebrew-tap]
bucket = "main"

[repos.quine-anaconda-webui]
bucket = "main"
description = "Quine Linux's installer: our copy of Anaconda's web UI (rhinstaller/anaconda-webui)"

[repos.taproom]
bucket = "main"

[repos.quine-manifest] # this repo
bucket = "main"

# ── boneyard ─────────────────────────────────────────────────────────────────
[repos.action-gh-release]
bucket = "boneyard"
forked_from = "softprops/action-gh-release"
import = "code"

[repos.electron-builder]
bucket = "boneyard"
forked_from = "electron-userland/electron-builder"
import = "code"

# ── labs ─────────────────────────────────────────────────────────────────────
[repos.layer-wizard]
bucket = "labs"

[repos.quple]
bucket = "labs"
description = "Call someone by their Quine username: a Tauri desktop app on Jitsi Meet"

[repos.quine-linux]
bucket = "labs"
description = "Quine Linux: a bootc image built on our Aurora build (Universal Blue)"

[repos.quine-os]
bucket = "labs"
description = "Build and CI guidelines for Quine OS's apps"

[repos.swap-watchdog]
bucket = "labs"

[repos.usbscan]
bucket = "labs"
description = "Finds failing USB ports: lsusb, sysfs hub ports and kernel faults in one table"

[repos.dnf-package-store]
bucket = "labs"
description = "Flutter app for browsing DNF packages and trying them with transient installs"

[repos.ktoolbox]
bucket = "labs"

[repos.flathub-ladybird]
bucket = "labs"

[repos.quine-RideRN]
bucket = "labs"

[repos.mozsync]
bucket = "labs"
description = "Signs in to Firefox Sync and imports your bookmarks into Chromium or Falkon"

[repos.charter] # empty so far: no commits, no description
bucket = "labs"

[repos.bazaar]
bucket = "labs"

[repos.libreoffice-js]
bucket = "labs"
description = "Tauri + React word processor modelled on LibreOffice Writer"

[repos.nugitea]
bucket = "labs"

# Quine Linux's stage 0: our Aurora build, published to the forge's registry
# (.forgejo/workflows/build.yml). Not on GitHub: a copy there would run
# upstream's .github/workflows.
[repos.aurora]
bucket = "labs"
github = false
forked_from = "ublue-os/aurora"

# Pull mirrors the aurora and quine-linux builds read instead of GitHub and
# code.forgejo.org. Forgejo-only: no point copying them back to GitHub.
# Actions off (the default for `upstream` repos): their upstream CI never runs here.
# mirror-ublue-os-aurora syncs hourly (set by hand); the rest every 8h.
[repos.mirror-ublue-os-aurora]
bucket = "labs"
github = false
upstream = "https://github.com/ublue-os/aurora.git"

[repos.mirror-actions-checkout]
bucket = "labs"
github = false
upstream = "https://code.forgejo.org/actions/checkout.git"

[repos.mirror-rcaloras-bash-preexec]
bucket = "labs"
github = false
upstream = "https://github.com/rcaloras/bash-preexec.git"

[repos.mirror-coreos-fedora-coreos-config]
bucket = "labs"
github = false
upstream = "https://github.com/coreos/fedora-coreos-config.git"

[repos.mirror-ublue-os-countme]
bucket = "labs"
github = false
upstream = "https://github.com/ublue-os/countme.git"

[repos.mirror-ublue-os-akmods]
bucket = "labs"
github = false
upstream = "https://github.com/ublue-os/akmods.git"

# Aurora's wallpapers, logos and shared files; its build copies them from
# the ghcr.io/get-aurora-dev/common image this repo builds.
[repos.mirror-get-aurora-dev-common]
bucket = "labs"
github = false
upstream = "https://github.com/get-aurora-dev/common.git"

# Homebrew integration, copied into Aurora from its image.
[repos.mirror-ublue-os-brew]
bucket = "labs"
github = false
upstream = "https://github.com/ublue-os/brew.git"

# Sources of the ublue-os/packages COPR RPMs Aurora installs.
[repos.mirror-ublue-os-packages]
bucket = "labs"
github = false
upstream = "https://github.com/ublue-os/packages.git"

# Fedora's definition of Kinoite, Aurora's base.
[repos.mirror-fedora-workstation-ostree-config]
bucket = "labs"
github = false
upstream = "https://pagure.io/workstation-ostree-config.git"

# The image rechunker Aurora pins.
[repos.mirror-coreos-chunkah]
bucket = "labs"
github = false
upstream = "https://github.com/coreos/chunkah.git"

# Anaconda-webui's npm packages (quine-linux's installer build).
[repos.mirror-rhinstaller-node-cache]
bucket = "labs"
github = false
upstream = "https://github.com/rhinstaller/node-cache.git"

# Anaconda-webui's build takes pkg/lib from it.
[repos.mirror-cockpit-project-cockpit]
bucket = "labs"
github = false
upstream = "https://github.com/cockpit-project/cockpit.git"

# Quine-linux's live/titanoboa-build-iso.sh comes from here.
[repos.mirror-ublue-os-titanoboa]
bucket = "labs"
github = false
upstream = "https://github.com/ublue-os/titanoboa.git"

# Aurora's live ISO, which quine-linux's live/ is adapted from.
[repos.mirror-get-aurora-dev-iso]
bucket = "labs"
github = false
upstream = "https://github.com/get-aurora-dev/iso.git"

# KDE's wallpapers (Autumn and others), packaged by Fedora as plasma-workspace-wallpapers.
[repos.mirror-kde-plasma-workspace-wallpapers]
bucket = "labs"
github = false
upstream = "https://invent.kde.org/plasma/plasma-workspace-wallpapers.git"

# KDE's plasma-desktop: the mirror, and our fork of it, whose quine-v<version>
# branches carry Quine Linux's changes (Kickoff's update bar); quine-linux
# builds Kickoff from them. The fork's default branch, quine, holds its
# README and the workflow that makes a branch for each new Plasma release.
[repos.mirror-kde-plasma-desktop]
bucket = "labs"
github = false
upstream = "https://invent.kde.org/plasma/plasma-desktop.git"

[repos.plasma-desktop]
bucket = "labs"
github = false
forked_from = "https://invent.kde.org/plasma/plasma-desktop"