From d84c720e6007e4ccafdc7223f77c85f3d7f26d84 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Sun, 27 Sep 2026 12:17:41 -0700 Subject: [PATCH] Drop elsewhen now that the world clock ships with Omarchy Elsewhen moved into the Omarchy shell as omarchy.elsewhen (basecamp/omarchy#13429), and a migration there removes the installed package. Nothing else in the repo references it. Co-Authored-By: Claude Opus 5.5 --- pkgbuilds/elsewhen/.omarchy/README.md | 17 ------- pkgbuilds/elsewhen/.omarchy/package.json | 11 ----- pkgbuilds/elsewhen/PKGBUILD | 63 ------------------------ 3 files changed, 91 deletions(-) delete mode 100644 pkgbuilds/elsewhen/.omarchy/README.md delete mode 100644 pkgbuilds/elsewhen/.omarchy/package.json delete mode 100644 pkgbuilds/elsewhen/PKGBUILD diff --git a/pkgbuilds/elsewhen/.omarchy/README.md b/pkgbuilds/elsewhen/.omarchy/README.md deleted file mode 100644 index 9195490..0000000 --- a/pkgbuilds/elsewhen/.omarchy/README.md +++ /dev/null @@ -1,17 +0,0 @@ -# elsewhen - -Installs the Elsewhen world clock plugin from the `v{pkgver}` GitHub tag archive into `/usr/share/omarchy/shell/plugins/omacom.elsewhen/` (the directory name is the plugin id the shell scans for, not the package name), plus `LICENSE` under `/usr/share/licenses/elsewhen/` and the upstream `README.md` under `/usr/share/doc/elsewhen/`. The shell scans this directory alongside its bundled plugins. - -`package()` copies an explicit allow-list (`manifest.json`, every `*.qml` and `*.js`, `cities.json`, `world.json`, `worldclock-data.py`), so `tests/`, `.github/` and `.gitignore` never ship, and it fails the build if `manifest.json` is missing, does not declare `omacom.elsewhen`, or does not name a present `Panel.qml` as the entry point. An upstream release that adds a runtime file outside those patterns needs the allow-list extended here; the sync only moves versions and checksums. Every file is 0644: `Panel.qml` runs the script as `python3 /worldclock-data.py`, so it needs no execute bit. No install hook: Omarchy restarts the shell after `omarchy update`, and nothing here may write into a user home. The script's only writes go to `$XDG_CACHE_HOME/omacom-elsewhen/`, which it creates itself at runtime. - -Dependencies, cited as `file: tool` in the upstream tree: - -- `omarchy`: `ArcText.qml`, `Chip.qml`, `EarthRow.qml`, `Globe.qml`, `MiniGlobe.qml`, `MoonDot.qml`, `Panel.qml: import qs.Commons`; `EarthRow.qml`, `Globe.qml`, `Panel.qml: import qs.Ui`. Owns `/usr/share/omarchy` and the shell plugin directory. -- `quickshell`: `Globe.qml`, `Panel.qml: import Quickshell`; `Globe.qml`, `MiniGlobe.qml`, `Panel.qml: import Quickshell.Io` (`Process`, `FileView`, `StdioCollector`). -- `python`: `Panel.qml: python3 /worldclock-data.py` (the facts process). `worldclock-data.py` imports only `json`, `os`, `sys`, `time`, `urllib`. -- Left implicit as members of `base`, per Arch convention: `bash` (`Panel.qml`, `Globe.qml: bash -c` wraps every probe), `coreutils` (`Panel.qml`, `Globe.qml: date`, one probe per refresh), `systemd` (`Panel.qml: timedatectl show`, `timedatectl list-timezones`, each with a fallback: `/etc/localtime` for the home zone and `find /usr/share/zoneinfo` for the catalog), `sed` and `grep` (`Panel.qml`: the symlink target of `/etc/localtime` and the zoneinfo catalog filter), `findutils` and `tzdata` (that fallback; `worldclock-data.py: /usr/share/zoneinfo/zone1970.tab`). `omarchy` cannot run without any of them either. -- Not a dependency: `iso-codes`. Only `tests/currency_check.py` reads `/usr/share/iso-codes/json`, to validate the currency table before a release; the runtime never touches it. - -Release tracking: `bin/sync-upstream` follows `omacom/elsewhen` through the `upstream.watch.github` provider, which reads the GitHub Releases feed (drafts and prereleases excluded; a tag with no published Release is not seen) and matches exactly `vX.Y.Z`, the grammar upstream's `scripts/set-version.sh` enforces. A newer release rewrites `pkgver`, resets `pkgrel` to 1, fetches `archive/refs/tags/v{pkgver}.tar.gz` again and rewrites `sha256sums` from the download. The Release's `published_at` is what lets `min_release_age: 24h` hold a fresh release for a day; `release_ring: fast` builds it straight to rc and stable as well as edge. - -The watch only moves on a version increase, so the first release's digest is filled in by hand (`curl -fsSL | sha256sum`), which is why the recipe carries a placeholder until the `v0.1.0` tag exists. Until upstream has published at least one Release, the watch finds nothing and fails the scheduled `sync-upstream` run for every package in the batch, so this recipe stays a draft until then. diff --git a/pkgbuilds/elsewhen/.omarchy/package.json b/pkgbuilds/elsewhen/.omarchy/package.json deleted file mode 100644 index b1e7e71..0000000 --- a/pkgbuilds/elsewhen/.omarchy/package.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "source": "local", - "release_ring": "fast", - "min_release_age": "24h", - "upstream": { - "watch": { - "github": "omacom/elsewhen", - "pattern": "v(?P[0-9]+\\.[0-9]+\\.[0-9]+)" - } - } -} diff --git a/pkgbuilds/elsewhen/PKGBUILD b/pkgbuilds/elsewhen/PKGBUILD deleted file mode 100644 index 93639b1..0000000 --- a/pkgbuilds/elsewhen/PKGBUILD +++ /dev/null @@ -1,63 +0,0 @@ -# Maintainer: Spencer Bull - -pkgname=elsewhen -pkgver=1.0.0 -pkgrel=2 -pkgdesc='World clock plugin for the Omarchy shell' -arch=('any') -url='https://github.com/omacom/elsewhen' -license=('MIT') - -# What the plugin needs to load and run. It also shells out to bash, date -# (coreutils) and timedatectl (systemd) and reads /usr/share/zoneinfo -# (tzdata); those are members of the base group and stay implicit, per Arch -# convention. The citations for each entry are in .omarchy/README.md. -depends=( - 'omarchy' - 'python' - 'quickshell' -) - -options=('!debug') - -source=("$pkgname-$pkgver.tar.gz::$url/archive/refs/tags/v$pkgver.tar.gz") -sha256sums=('3124f0c0a19ebc1b158bcf04151cddd6c733ceeead88052186b6a54c46bee263') - -package() { - # Install alongside the bundled plugins in the shell's plugin directory. - local plugin="$pkgdir/usr/share/omarchy/shell/plugins/omacom.elsewhen" - cd "$srcdir/$pkgname-$pkgver" || return 1 - - # The shell loads the entry point each manifest declares. A tree without - # either would install cleanly and never load, so fail the build instead of - # shipping it. - [[ -f manifest.json ]] || { - echo "release tree is missing manifest.json" >&2 - return 1 - } - grep -Eq '"id"[[:space:]]*:[[:space:]]*"omacom\.elsewhen"' manifest.json || { - echo "manifest.json does not declare the plugin id omacom.elsewhen" >&2 - return 1 - } - grep -Eq '"barWidget"[[:space:]]*:[[:space:]]*"Panel\.qml"' manifest.json || { - echo "manifest.json does not name Panel.qml as the bar widget entry point" >&2 - return 1 - } - [[ -f Panel.qml ]] || { - echo "release tree is missing the entry point Panel.qml" >&2 - return 1 - } - - # An explicit allow-list of runtime files, so tests/, .github/ and the rest - # of the repository never reach the package. Directories end up 0755 and - # every file 0644: worldclock-data.py runs as `python3 ` and needs no - # execute bit. An unmatched glob is left literal and fails install, which - # is the right outcome for a release tree missing its QML or JS. - local file - for file in manifest.json cities.json world.json worldclock-data.py *.qml *.js; do - install -Dm644 "$file" "$plugin/$file" - done - - install -Dm644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE" - install -Dm644 README.md "$pkgdir/usr/share/doc/$pkgname/README.md" -}