From 02f63ae1f2975aa606310f8fb26651a49be8ab9a Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Fri, 11 Sep 2026 12:17:23 +0200 Subject: [PATCH] Add omarchy-billboard-generator, the animated domain video maker Packages llstrk/omarchy-billboard-generator from its GitHub release archive: the runtime tree plus locked production npm dependencies under /usr/lib, entry-point symlinks in /usr/bin, a desktop entry whose WM class matches the Chromium app-mode window, and the fonts and provenance notices the project bundles. Chromium and ffmpeg are runtime dependencies found on PATH rather than downloaded, which is how the project itself works. The desktop entry is written from the PKGBUILD rather than shipped as a second source because sync-upstream rewrites the checksum array wholesale from the release manifest. The catalog checks pin the data directories to empty scratch paths so the build reads bundled data rather than a synced snapshot in the builder's home. Co-Authored-By: Claude Fable 5.1 Co-Authored-By: Codex XHigh --- .../.omarchy/package.json | 12 +++ .../omarchy-billboard-generator/PKGBUILD | 82 +++++++++++++++++++ 2 files changed, 94 insertions(+) create mode 100644 pkgbuilds/omarchy-billboard-generator/.omarchy/package.json create mode 100644 pkgbuilds/omarchy-billboard-generator/PKGBUILD diff --git a/pkgbuilds/omarchy-billboard-generator/.omarchy/package.json b/pkgbuilds/omarchy-billboard-generator/.omarchy/package.json new file mode 100644 index 00000000..d9c0d058 --- /dev/null +++ b/pkgbuilds/omarchy-billboard-generator/.omarchy/package.json @@ -0,0 +1,12 @@ +{ + "source": "local", + "release_ring": "fast", + "min_release_age": "24h", + "upstream": { + "github": "llstrk/omarchy-billboard-generator", + "checksums": "SHA256SUMS", + "assets": { + "any": "omarchy-billboard-generator.tar.gz" + } + } +} diff --git a/pkgbuilds/omarchy-billboard-generator/PKGBUILD b/pkgbuilds/omarchy-billboard-generator/PKGBUILD new file mode 100644 index 00000000..11e8fc79 --- /dev/null +++ b/pkgbuilds/omarchy-billboard-generator/PKGBUILD @@ -0,0 +1,82 @@ +# Maintainer: David Heinemeier Hansson + +# Upstream ships a release archive plus a SHA256SUMS manifest, which is what +# the upstream feed in .omarchy/package.json follows. Chromium and ffmpeg are +# runtime dependencies found on PATH, never downloaded. + +pkgname=omarchy-billboard-generator +pkgver=0.1.1 +pkgrel=1 +pkgdesc='Desktop app and CLI that renders animated OMARCHY domain videos' +arch=('any') +url='https://github.com/llstrk/omarchy-billboard-generator' +# MIT covers the project's own code and Apache-2.0 and 0BSD the vendored npm +# dependencies. The Omarchy wordmark, website palettes, taglines and the ttfx +# animation runtime are Omarchy's own material carried over from omarchy-site, +# and PROVENANCE.md says which file is which. +license=('MIT' 'Apache-2.0' '0BSD' 'OFL-1.1' 'LicenseRef-Omarchy') +depends=('nodejs>=22' 'chromium' 'ffmpeg' 'xdg-utils') +makedepends=('npm') +source=("${pkgname}-${pkgver}.tar.gz::${url}/releases/download/v${pkgver}/${pkgname}.tar.gz") +sha256sums=('b5edb7f975c46d29a7b492a009cf826a04dc19daf4962a7b2ae4774643555df6') +# Pure JavaScript and WebAssembly; nothing here is an ELF to strip. +options=('!strip' '!debug') + +_appdir="/usr/lib/${pkgname}" + +build() { + cd "${srcdir}/${pkgname}" + # The same install the upstream release installer performs: locked production + # dependencies, no lifecycle scripts. + npm ci --omit=dev --ignore-scripts --cache "${srcdir}/npm-cache" +} + +check() { + cd "${srcdir}/${pkgname}" + # The catalogs prefer a synced snapshot in the user data directory, so point + # them at an empty one: the build must read the bundled data, not whatever + # the builder's home happens to hold. + export BILLBOARD_DATA_DIR="${srcdir}/data-home" BILLBOARD_CACHE_DIR="${srcdir}/cache-home" + # Upstream's own startup check, plus the catalogs that load the bundled data. + node bin/omarchy-billboard --help >/dev/null + node bin/omarchy-billboard --list-themes >/dev/null + node bin/omarchy-billboard --list-languages >/dev/null + node bin/omarchy-billboard --list-animations >/dev/null + node bin/omarchy-billboard-app --help >/dev/null +} + +package() { + cd "${srcdir}/${pkgname}" + + install -dm755 "${pkgdir}${_appdir}" + # Only what runs: no tests, release scripts, CI, or the curl|bash installer. + cp -a bin src app web assets data examples node_modules package.json "${pkgdir}${_appdir}/" + + # The entry points resolve their sources through the real path of the + # script, so a symlink is enough and keeps the launcher's node on PATH. + install -dm755 "${pkgdir}/usr/bin" + ln -s "${_appdir}/bin/omarchy-billboard" "${pkgdir}/usr/bin/omarchy-billboard" + ln -s "${_appdir}/bin/omarchy-billboard-app" "${pkgdir}/usr/bin/omarchy-billboard-app" + + # Written here rather than shipped as a second source: sync-upstream rewrites + # sha256sums wholesale from the release manifest, so a local file's checksum + # would not survive the first version bump. The WM class is what Chromium + # derives for this app-mode window, so the launcher's icon follows it. + install -dm755 "${pkgdir}/usr/share/applications" + cat > "${pkgdir}/usr/share/applications/${pkgname}.desktop" <<'DESKTOP' +[Desktop Entry] +Version=1.0 +Type=Application +Name=Omarchy Billboard Generator +Comment=Create animated Omarchy domain videos locally +Exec=omarchy-billboard-app +Icon=omarchy-billboard-generator +Terminal=false +Categories=AudioVideo;Video; +StartupWMClass=chrome-127.0.0.1__omarchy-billboard-Default +DESKTOP + install -Dm644 app/icon.svg "${pkgdir}/usr/share/icons/hicolor/scalable/apps/${pkgname}.svg" + + install -Dm644 -t "${pkgdir}/usr/share/doc/${pkgname}" README.md THEMES.md PROVENANCE.md + install -Dm644 -t "${pkgdir}/usr/share/licenses/${pkgname}" LICENSE PROVENANCE.md assets/fonts/*-OFL.txt +}