Skip to content

Add slap-notes-bin - #282

Open
Onefailatatime wants to merge 4 commits into
omacom:masterfrom
Onefailatatime:add-slap-notes-bin
Open

Add slap-notes-bin#282
Onefailatatime wants to merge 4 commits into
omacom:masterfrom
Onefailatatime:add-slap-notes-bin

Conversation

@Onefailatatime

Copy link
Copy Markdown

Adds slap-notes-bin — local-first block notes with a wiki-link graph (the
Cluster Brain) and a built-in AI research agent. Electron over a Next.js
server, x86_64 only.

DHH suggested opening this here, so here it is.

How it tracks versions

Not in the AUR — it follows its own GitHub release feed, so it carries an
.omarchy/upstream.sh modelled on t3code-bin. SHA256SUMS is published
beside every release, so the hook reads the tag and the checksum straight from
the feed and nothing has to be downloaded to hash. It returns {} when the
PKGBUILD is already current, and stops with an error rather than pinning a
checksum for an asset that doesn't exist.

.omarchy/package.json is {"source": "local", "release_ring": "fast"}.

Dependencies

Derived from ldd against the shipped binary rather than copied from another
Electron package — the earlier hand-written list named libxss and
libnotify, which it doesn't link, and omitted at-spi2-core, libcups,
libdrm, mesa, libxkbcommon, pango and cairo, which it does. It would
have failed to start on a minimal install.

Worth flagging

It's proprietary and closed-source — the licence is custom:proprietary
and the app source isn't public. Only the built artefacts and the installer
are. I see cursor-bin and lmstudio-bin are in the same position, but say
the word if that's a problem for the OPR and I'll take it elsewhere.

The app is free to use and needs no account. AI Research is bring-your-own-key
(Anthropic, OpenAI, Google, Groq or OpenRouter) — nothing is proxied, keys stay
on the device, and every other feature works without one.

Checks

  • upstream.sh tested both ways: {} when current, and correct pkgver +
    sha256sums when a newer release exists, matching the published SHA256SUMS
  • All 26 dependencies resolve in the Arch repos
  • sha256sums in the PKGBUILD matches the published 0.2.2 tarball
  • The app's own 64-test QA sweep passes against the packaged build

Jessyka Mathews and others added 3 commits September 2, 2026 23:40
Local-first block notes with a wiki-link graph and a built-in AI research
agent. Electron over a Next.js server, x86_64.

Not in the AUR - it follows its own GitHub release feed, so it carries an
.omarchy/upstream.sh that reads the tag and checksum from SHA256SUMS
published beside each release. Nothing has to be downloaded to hash.

Dependencies are derived from ldd against the shipped binary.
The package symlinked /usr/bin/slap-notes straight at the Electron binary and
installed upstream's desktop entry verbatim, whose Exec pointed into /opt. Both
paths left Chromium's own Ozone detection to decide the platform, and it falls
back to XWayland often enough that the window is blurry on every scaled
display. A launcher asks for Wayland directly, the way t3code-bin and
perplexity do, and reads ~/.config/slap-notes-flags.conf; the desktop entry's
Exec is rewritten to go through it.

.omarchy/upstream.sh reported its checksum under the "x86_64" key while the
PKGBUILD carried a single unsuffixed sha256sums, so bin/sync-upstream looked
for a sha256sums_x86_64 that was not there and failed the whole run:

  ✗ Expected exactly one sha256sums_x86_64 assignment in .../PKGBUILD
  ✗ Upstream sync completed with failures

Every six-hourly sync would have failed that way. The vendor tarball now lives
in source_x86_64/sha256sums_x86_64, which is both what the hook reports and
what keeps the launcher's own checksum out of the array being rewritten.

libnotify and libsecret are opened by name at runtime rather than linked, so
nothing else in depends pulled them in -- notifications and Electron's
encrypted storage were relying on them happening to be installed.

The sandbox helper is set 4755 in package(), as Arch ships Chromium's and
Electron's, instead of having post_install probe for user namespaces and chmod
the file out from under pacman's manifest. That leaves the install script with
its first-run message, and drops the AppArmor profile handling: it was carried
over from the Debian package and Arch does not enable AppArmor.

url= pointed at slapnotes.com, whose apex serves no HTTPS, and now points at
the repository the release feed is read from.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
0.2.3 is the first release whose in-app updater leaves a packaged install to
the package manager. Earlier builds downloaded the release's own package and
ran pkexec pacman -U on it, which on a machine tracking this repository would
have put down an artifact the repository never built and left the local version
ahead of the channel.

The release no longer attaches a built package either, so the tarball this
PKGBUILD compiles is the only thing it can be.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@Onefailatatime

Copy link
Copy Markdown
Author

Worth flagging for review, since a bundled self-updater is a fair thing to ask about.

Through 0.2.2 the app's own updater would download the release's package and pkexec pacman -U it, regardless of how the app had been installed. On a machine tracking this repository that would have replaced your build with one you didn't make, under the same version string, and left the local package ahead of the channel — at which point pacman reports it as newer and stops updating it.

As of 0.2.3 a copy under /opt or /usr reports "update through your package manager" and never touches the network; the banner offers the release page instead of an install. Only the direct-download tree and the AppImage still self-update, which are the ones the user owns. The release also no longer attaches a prebuilt .pkg.tar.zst, so the tarball this PKGBUILD compiles is the only artifact of a given version.

The PKGBUILD now pins 0.2.3, and .omarchy/upstream.sh reports it cleanly against the live feed.

The apex serves HTTPS now; it was on a parking IP with 443 closed when this
was opened, so the homepage hung and the repository URL stood in.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant