Elsewhen, Omarchy’s world clock, learns real places, where “here” is and who lives in each city
Ryan Hughes’ update to Jason Fried’s world clock panel searches towns through Open-Meteo’s geocoder, moves the system clock when you say you’re somewhere else, and puts GitHub faces under each city.
Image: Ryan Hughes (X)
Elsewhen, the world clock panel in the Omarchy bar, is getting three things it was missing: towns that aren’t time zones, a way to tell it where you actually are, and the people behind each city. Omarchy maintainer Ryan Hughes opened and merged his own pull request into the quattro branch on October 20, 2026. The v4.0.6 tag carries neither the Elsewhen plugin nor its install migration, so this is coming in the next version.
A quick refresher, since Elsewhen has never been covered here. It’s a globe in the bar that opens a panel with one row per city, each with its weather, a daylight strip, and a spinnable globe behind the list. It started as its own repo and package, and DHH’s PR #13429 moved it into the Omarchy shell tree as omarchy.elsewhen on September 27, 2026, next to the clock and weather widgets. According to the manual on the quattro branch, it sits in the center of the default bar, and Super + Ctrl + Alt + E summons it. Ryan Hughes described it on X on October 20, 2026 as “the world clock @jasonfried created for @omarchy”, and Jason Fried replied the same day: “Nice update! Had something like that in an earlier build but it was more specific to work and overlap so I pulled it. I like your solution.”
The problem Ryan ran into is spelled out in the PR: “Elsewhen thinks in time zones, and a time zone isn’t a place.” Someone in Fort Lauderdale couldn’t find Fort Lauderdale, so they got “here in New York”, New York’s weather, and a home pin a thousand miles north. Now the + Add a city search and the globe’s Jump to a city box also ask Open-Meteo’s geocoder, the same keyless service the weather already uses. Lookups start after three letters and a 300 ms pause, one at a time, and are cached for the session. The offline zone matches still come first, so three letters and Return pick what they always did, and a city added this way keeps its coordinates so it is never geocoded by name again. Two towns sharing a name and zone are now listed separately, the second one named with its region, like Springfield (Missouri).
The second piece is Set here. Clicking the “here in …” header, or pressing w, opens a Where are you? search over any place. Pick somewhere on your current zone and the header, the globe’s home pin and the row that stood for the old “here” all move together, with that row renamed in place and keeping its position and its people. Pick somewhere on another zone and Elsewhen also moves the system clock, through the same passwordless sudo timedatectl set-timezone rule the timezone menu uses. It runs with sudo -n, so where that rule is missing the change fails and sends a notification instead of waiting on a password prompt nobody can see. “Here” is saved only after the change succeeds, and the home row stays on the list while you’re away. According to the PR, the choice is stored together with its zone and only counts while the machine is on that zone; if the clock moves some other way, “here” falls back to that zone’s own city.
The third is People, the part Ryan led with on X: “A big challenge for me is always remembering who is in a region. So I made it easy to add people. That small visual reference alone is a game changer.” Hover a row and click the person button beside the ×, or press p, then type something like Ann, @octocat. Plain names get a monogram; a GitHub handle brings the profile’s name and avatar, fetched with curl, read with jq, and cached in ~/.cache/omarchy/elsewhen/people/ for a week. Up to four faces overlap on a line under the city name, and the names elide. Each handle is asked about once per session.
The PR cites a security review and Greptile for how those untrusted answers are handled. The GitHub API’s avatar_url is ignored and avatars come from avatars.githubusercontent.com by numeric id, curl is limited to HTTPS including redirects, handles are validated against GitHub’s username rule and passed as arguments rather than script text, the cache directory is private, downloads go to mktemp files renamed into place under a per-handle flock, and geocoder results must be a real list capped at 10 so a malformed answer can’t lock up the shell.
Under the hood, the stored list moves from the old zones string, which had no room for coordinates or people, to a cities array of { name, zone, lat, lon, region, people }. There’s no migration step: zones is read while cities is unset, and the first change writes cities. The design notes in docs/elsewhen.md were expanded to document all of it, and elsewhen-model-test.sh gains 156 lines covering storage, place merging, “here”, people and dragging rows of different heights.
Two honest caveats from the PR itself: “The clock change wasn’t run on a live machine” (the author confirmed with sudo -n -l that the sudoers rule allows it without a prompt), and “Clicks weren’t driven in that run”, with the header and person button exercised through the same functions from IPC and keys. What was checked in a running shell: “here in Fort Lauderdale” with its own weather, 23°C where New York was 11°C, a “portland” search listing Oregon, Maine, Indiana, Texas and England, and avatars and monograms on rows with people. Ryan calls it “one of MANY fantastic features shipping soon” in the next Omarchy, and for anyone who keeps a world clock because of the people in it, this is the update that makes the rows mean something.
