Conversation
Pin github:ekala-project/ekapkgs via npins and import it the same way nixpkgs was imported (fetchTarball, overlay for bun 1.4.1). The flake adds ekala-corepkgs.cachix.org beside the existing oss cache. ekapkgs does not yet ship everything this tree needs, so nix/vendor overlays mkShell, the hosted typefaces the default face uses, a chromium-only playwright-driver, ripgrep, npins, and nixpkgs-fmt. Drop each overlay as the pin grows the attribute. ekapkgs-cli is not wired in: it still builds against nixpkgs, is not in the package set, and cannot bootstrap nix develop.
Pin ekapkgs at the add-olai-hosted-fonts PR head so literata, iA Writer and the rest of hosted.json resolve from the package set. Drop nix/vendor/fonts. Retarget the pin to ekala-project/ekapkgs once #5 merges.
srid
added a commit
to srid/ekapkgs
that referenced
this pull request
Sep 5, 2026
These packages are needed by juspay/olai (juspay/olai#527) which is migrating off nixpkgs onto ekapkgs. - literata: init at 3.103 - ia-writer-quattro: init at 0-unstable-2023-06-16 - ia-writer-mono: init at 0-unstable-2023-06-16 - atkinson-hyperlegible-next: init at 2.001-unstable-2025-02-21 - et-book: init at 0-unstable-2015-10-05 - geist-font: init at 1.5.0 - lexend: init at 0.pre+date=2022-09-22 - crimson-pro: init at unstable-2022-08-30 - vollkorn: init at 4.105 - commit-mono: init at 1.143
The pin now includes ekapkgs' flake bump (corepkgs 43f4d743, default nodejs 24.20.0, bun 1.4.0, ripgrep) and lib.mkFlake, with ekapkgs#5 rebased on top. Drop the vendored ripgrep overlay; nodejs_24 aliases to the pin's nodejs. bun 1.4.1 stays overlaid for `bun install --offline`.
Member
Author
|
Pin updated to ekapkgs master |
srid
added a commit
to srid/ekapkgs
that referenced
this pull request
Sep 5, 2026
These packages are needed by juspay/olai (juspay/olai#527) which is migrating off nixpkgs onto ekapkgs. - literata: init at 3.103 - ia-writer-quattro: init at 0-unstable-2023-06-16 - ia-writer-mono: init at 0-unstable-2023-06-16 - atkinson-hyperlegible-next: init at 2.001-unstable-2025-02-21 - et-book: init at 0-unstable-2015-10-05 - geist-font: init at 1.5.0 - lexend: init at 0.pre+date=2022-09-22 - crimson-pro: init at unstable-2022-08-30 - vollkorn: init at 4.105 - commit-mono: init at 1.143
Rebase ekapkgs#5 onto 1bf6fb76 so the pin tracks the author's latest master. Hosted fonts still come from the PR head until #5 merges.
fetch-cargo-vendor still passes withMypyc to charset-normalizer, which python-pkgs does not take. Ignore that argument until corepkgs#172 lands; without it buildNpmPackage (the ACP agent) fails to eval.
srid
marked this pull request as draft
September 5, 2026 15:47
corepkgs#172 is not fixed for ekapkgs: python-packages still shadows charset-normalizer without withMypyc. Pin ekapkgs#5 rebased with python-packages#17 and drop the local overlay.
Member
Author
|
corepkgs#172 is not fixed for ekapkgs consumers: corepkgs' own charset-normalizer already has
|
ekapkgs copies the build to $out/lib/node_modules/${pname}
(olai-acp-agent). postInstall still looked for package.json name
olai-acp, so esbuild bundled the bridge next to an empty tree and
could not resolve @modelcontextprotocol/sdk or typebox. Accept either
layout.
srid
force-pushed
the
migrate-ekapkgs
branch
from
September 5, 2026 16:44
305ef21 to
d7c6f2c
Compare
Same mismatch as the Claude/Pi shim: ekapkgs installs under pname (olai-codex-agent), postInstall looked for package.json name @agentclientprotocol/codex-acp, and `test -f` failed silently.
ekapkgs selects versions as variants on the package (nodejs.v24), not as pkgs.nodejs_24.
ekapkgs already ships mkDevShell. Flatten env vars to derivation
attrs (mkDevShell is mkDerivation, not nixpkgs mkShell's env = {}).
Drop nix/vendor/mk-shell.nix.
The cache job still did `jq .pins.nixpkgs.url`, which is null after the ekapkgs switch, so GHA tried flake:null. attic-client is not in ekapkgs; pin the last nixpkgs SHA this repo used, for the CLI only.
playwright-driver pulled patchelfUnstable, which ekapkgs throws on. Use patchelf. Drop macos from the cache matrix: corepkgs has no stdenv/darwin, so packages.aarch64-darwin dies at kolu.packages.
python-packages#17 and corepkgs#173 landed. The fonts branch now locks those masters, so default bun is 1.4.1 (`bun install --offline`) and charset-normalizer accepts withMypyc. Drop nix/bun.nix.
corepkgs#155 is the intended API (EEP 0001): take the nix build, turn it into a shell. Pin that PR through ekapkgs#5 and drop the standalone mkDevShell.
Member
Author
|
Keeping this as a draft: ekapkgs cannot evaluate on Darwin yet ( |
Keep the ekapkgs pin and hosted-font wording, take master's appearance/outlines paths and remote-check docs, and put Darwin back on the nix-cache matrix now that corepkgs has stdenv/darwin.
srid
added a commit
to srid/ekapkgs
that referenced
this pull request
Sep 10, 2026
These packages are needed by juspay/olai (juspay/olai#527) which is migrating off nixpkgs onto ekapkgs. - literata: init at 3.103 - ia-writer-quattro: init at 0-unstable-2023-06-16 - ia-writer-mono: init at 0-unstable-2023-06-16 - atkinson-hyperlegible-next: init at 2.001-unstable-2025-02-21 - et-book: init at 0-unstable-2015-10-05 - geist-font: init at 1.5.0 - lexend: init at 0.pre+date=2022-09-22 - crimson-pro: init at unstable-2022-08-30 - vollkorn: init at 4.105 - commit-mono: init at 1.143
Rebase ekapkgs#5 onto master and lock corepkgs 8ad3440b (stdenv/darwin, git builds). Drop the corepkgs#155 toDevShell pin — that PR has not been rebased onto Darwin — and use mkDevShell until it lands. oss-olai moves with the pin; cordis ls-remote is empty so it stays.
ekapkgs#5 may not merge, so literata and the rest of hosted.json come back from nix/vendor/fonts. Pin srid/ekapkgs add-olai-tools (ekapkgs#8) for ripgrep, npins and nixpkgs-fmt — those belong in ekapkgs, not corepkgs — and drop the npins source pin. Playwright stays overlaid.
corepkgs#185 hardcodes gyp's CLT version so nodejs-24 builds on CLT-less Darwin (petit has no Xcode receipts).
corepkgs#185 puts cctools.libtool and unixtools.sysctl on the nodejs Darwin build so gyp-mac-tool can archive simdutf.
corepkgs#185 gives rustc-bootstrap a unique libLLVM id so clang-21 does not abort-trap on _LLVMInitializeLanaiAsmParser.
Store settings in the vault (#569).
ripgrep, npins and nixpkgs-fmt now live on ekala-project/ekapkgs master (e1252ca5). Drop the srid/add-olai-tools pin.
The overlay already takes nixpkgs-fmt from the ekapkgs pin. The copied expression was unused.
srid
added a commit
to srid/ekapkgs
that referenced
this pull request
Sep 11, 2026
These packages are needed by juspay/olai (juspay/olai#527) which is migrating off nixpkgs onto ekapkgs. - literata: init at 3.103 - ia-writer-quattro: init at 0-unstable-2023-06-16 - ia-writer-mono: init at 0-unstable-2023-06-16 - atkinson-hyperlegible-next: init at 2.001-unstable-2025-02-21 - et-book: init at 0-unstable-2015-10-05 - geist-font: init at 1.5.0 - lexend: init at 0.pre+date=2022-09-22 - crimson-pro: init at unstable-2022-08-30 - vollkorn: init at 4.105 - commit-mono: init at 1.143
corepkgs defaults __structuredAttrs; mkDevShell then leaves `packages` off PATH, so odu CI's `just install` ran host bun and died at `npm: command not found`.
The timeout string was expanded inside the shell, where the outer env is gone, so every run watched for 15m and SIGINT'd still-running nodes. Interpolate with just env() so the outer ODU_CI_TIMEOUT actually applies.
srid
force-pushed
the
migrate-ekapkgs
branch
from
September 11, 2026 05:50
c268a6c to
626d514
Compare
fmt-check failed on the ekapkgs vendor copies: 15 of 33 Nix files were unformatted.
test[4-of-6] failed on kolu-ci-7: attaches.length was 1 because Schedule.spaced(250ms) could emit the moved grid before the pane attached at 400ms. Publish the second record from a Deferred after the first attach is observed.
test[6-of-6] failed with eight tests timing out at bun's 5s default while still completing in 6–20s. ekapkgs CI shares the box with from-source gcc/nodejs builds, so 5s is too tight.
odu run's own wait settled incomplete in ~3 min with e2e still running. Start the coordinator detached and wait here under ODU_CI_TIMEOUT.
wait --settle without --timeout-ms prints a still_running snapshot and exits 2. Convert ODU_CI_TIMEOUT and actually block.
PIN wrapper-started olai web timed out at 10s waiting for message=serving (log only had the SIGTERM guard). Same hang detector, longer bound.
Bring in search UX (#576) so CI runs on current master.
e2e[3] failed `A missing HTML preview returns with the restored page`: the pane correctly said there is no page, then `there should be no page errors` still saw Chrome for Testing log the iframe src 404.
ekapkgs npins 0.5.1 builds snix from git.snix.dev. That host 504s, so every `nix develop` CI recipe (fmt-check, install, *-deps) failed building olai-shell-env even though e2e shards that already had a shell were green. update-pins uses a caller-PATH npins instead.
#577 moved docs/architecture.md into docs/architecture/. Keep the ekapkgs pin and vendor-fonts wording in overview.md.
Master #577 moved architecture.md; the merge kept nixpkgs in overview.md.
odu must cover petit as well as the kolu fleet. `just ci` was linux-only (`--platform x86_64-linux`).
petit is one aarch64-darwin host. Fanning the whole check graph there dropped odu-runner keep-alive (load 60, nix sqlite busy). Linux still fans across kolu; Darwin runs install then each recipe with --no-deps.
--no-deps made each Darwin recipe a bare snapshot: typecheck then failed with tsc: command not found. Linux was already 6/6 green.
Default stays Linux-only. `just ci macos` adds aarch64-darwin on the same odu run. Drop the serial Darwin recipe loop.
macos-latest-xlarge built libuv 1.52 from source; checkPhase failed udp_multicast_interface / udp_multicast_ttl (multicast not 0 / ENETUNREACH / EPERM). Overlay doCheck=false until the ekapkgs pin skips those checks.
35 commits of master (plugin fold, package-bundle contract, per-plugin default.nix, mail/claude/pi plugins) meet the nixpkgs -> ekapkgs swap. Resolutions: - npins/sources.json: keep ekapkgs *and* master's new pins (fenix, himalaya, pimalaya); keep the nixpkgs pin — master's mail plugin hands it to the himalaya build (`npins.nixpkgs`), which the migration had dropped. - shell.nix: master's shape (mkDevShell attrs, fold-provided OLAI_PLUGIN_INSTALL/EXTERNALS); the marks moved into the fold, so OLAI_*_MARK_DIR and koluMark/oduMark go with master. Kept the ekapkgs-specific tool list (nodejs.v24, no npins). - nix/acp-agent.nix: master moved it into plugin-kit's npm-adapter plus the per-plugin default.nix files; accept the deletion. - docs/architecture/overview.md: master's marks paragraph, the migration's vendored-fonts note.
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
First
just ci macospass against9c98faa19Run
0mu5tbbpt-hr7vusln— both platforms, strict mode, so every leg posted to this PR. Cancelled by hand after ~10 minutes; this is what it had shown:_ci-setup,hm-module,plugin-fold,plugin-checks.kolu-ci-2died mid-install, and its legs went with it:test[2-of-6]::install,typecheck[2-of-6]::install,e2e[2-of-6]::installande2e[2-of-6]::nixerrored,test[2-of-6]/typecheck[2-of-6]/e2e[2-of-6]skipped. The log says it was the host, not the recipe:odu hostsnow reportskolu-ci-2 … down — 'nix build' exited with code 1, and the box does not answer ssh.ignoring untrusted substituter 'https://ekala-corepkgs.cachix.org', you are not a trusted user— so the runners were compiling nodejs/llvm/rustc from source, which is what killed that host.install:building '/nix/store/0s3cwcs…-nodejs-24.20.0.drv', the disk wall in the section below.Merges of master — 2026-09-17
Head is
9c98faa19(Merge origin/master (#615) into the ekapkgs migration). Two merges landed today, both pushed:9c98faa19— masterf9ada10bd(#615, Perfect backlinks). Clean: the commit touches only TypeScript (packages/format/src/imports.ts,ReferrersSection.tsx, backlinks memory), no nix, no conflicts. Everything below stands.d95882fff— master97350f090(#616). WasDIRTY; four conflicting paths resolved as follows (the commit message carries the same detail).npins/sources.json— ekapkgs stays; master's new pins (fenix,himalaya,pimalaya) come in; the branch'soss-olaibump wins. Thenixpkgspin has to come back, which undoes part of this migration: master'spackages/plugins/mail/default.nixcalls the himalaya pin withnixpkgs = "${npins.nixpkgs}", so dropping that pin leavespins.nixpkgsmissing.himalaya's owndefault.niximports a real nixpkgs tree; ekapkgs cannot stand in for it.shell.nix— master's shape wins where the fold replaced shell state:OLAI_PLUGIN_INSTALL/OLAI_PLUGIN_EXTERNALSinstead of the per-pinOLAI_ODU_*, andOLAI_KOLU_MARK_DIR/OLAI_ODU_MARK_DIRare gone (@olai/plugin-kit'smark.nixowns marks now). The migration's half stays:pkgs.mkDevShell,__structuredAttrs = false, and thetoolslist withnodejs.v24and nonpins. Master'senv = {-closing};went with it.nix/acp-agent.nix— deleted on master (its content isplugin-kit/nix/npm-adapter.nixplus the per-plugindefault.nixfiles), so the deletion is accepted. The migration's ekapkgs npm-layout adaptation survives where master kept it:packages/plugins/codex/acp/default.nixkeeps the@agentclientprotocol/codex-acp/$pnamefallback through the merge, and claude/pi pass ashimNameequal to the derivation'spname— the same$out/lib/node_modules/<name>directory under ekapkgs'npmInstallHook.docs/architecture/overview.md— master's marks paragraph, the migration's vendored-fonts note.Evaluation: green on both platforms
Every flake output evaluates, and every
drvPathforces, onx86_64-linux(kolu-ci-9) andaarch64-darwin(petit): 15packages(olai,olai-client,olai-fonts,base,claude-agent,codex-agent,pi-agent,himalaya-bin,odu,odu-bin,kolu-mark,odu-mark,bun2nix,plugin-env), 5checks(hm-module,plugin-fold,plugin-mail-surface,plugin-odu-surface,plugins) and 2devShells(default,e2e).Nothing the merged tree asks for is absent from ekapkgs:
esbuild,procps,woff2,dockerTools,jq,patchelf,fetchpatch,lib.fileset,stdenv.hostPlatform.nodeall resolve.nix build .#olaiat the current head9c98faa19on kolu-ci-9:/nix/store/f4bcg1dh7xjmnsaj6v7hkrvha0lyn0zw-olai, built in 37 s (every input already in that host's store),olai --version→olai v0.1.0,olai --helpprints its usage. The second merge (master#615) is TypeScript-only and changes none of the nix surface.What breaks:
nix build .#olai, and it is the cache and the disk, not the treeNeither cache covers this closure. On petit — where
ciis a trusted user, so the flake'snixConfigapplies under--accept-flake-config— the 16 substituted paths split 15 fromcache.nixos.asia/ossand 1 fromekala-corepkgs.cachix.org.corepkgs'nodejs-24.20.0has no entry in either cache, so it is compiled from source on both platforms; so arecmake,himalaya's rust chain (rust-stable-with-std,cargo-vendor-dir,rustc-1.98.0) and, on Linux,llvm-21.1.8..narinfoforllvm-tblgen-21.1.8.drv,rustc-1.98.0.drvand this tree'solai.drvis 404 onekala-corepkgs.cachix.organd oncache.nixos.asia/oss.ci@petitfails on disk exhaustion, not on the tree — twice.nodejs-24.20.0dies inv8's libtool step:Attempt 1 exited
1with/nix(228 GiB,/dev/disk3s7) at 2.8 GiB free; attempt 2, started once the failed tree was reclaimed and 16 GiB were free, failed the same way with the volume back down to 728 MiB free. Everything the tree itself owns built first, from source, and succeeded:olai-fonts,olai-base(the client bundle —asset: styles-…css,xterm-…js),olai-client,himalaya-2.1.0,cmake-3.31.10,rustc-1.98.0(bootstrap reached stage 2). The derivation that cannot fit is the one no cache holds.Remedy is host-side: free space on petit (
nix-collect-garbage, or a bigger volume). Nothing in the tree needs changing.tooron kolu-ci-9 is still not a trusted user, so the run pays every compile — and still succeeds:nix build --dry-run .#olailisted 44 derivations to build —llvm-tblgen-21.1.8,llvm-21.1.8,rustc-1.98.0,cargo-1.98.0,nodejs-24.20.0,cmake-3.31.10,himalaya-2.1.0,procps-4.0.4,ripgrep-15.2.0,prefetch-npm-deps-0.1.0, plus the tree's ownnpm-deps,olai-acp-claude-0.73.0,olai-acp-pi-0.0.33,olai-base,olai-client,olai-fonts,olai. The run finishedEXIT=0in ~50 min on 32 cores, with zero errors, and the artifact answers:olai --helpprints its usage,olai --versionprintsolai v0.1.0. So on Linux the merged tree — master's plugin fold included, ekapkgs'npmInstallHooklayout and all — builds.The merge makes the compile bigger: master's mail plugin hands
himalaya(npins.himalaya+pimalaya+fenix) to the fold as a knob, so the rust toolchain is now inside theolaiclosure where it previously was not.The nix-cache run for
d95882fff(ubuntu +macos-latest-xlarge) is what would warmoss— andossis a trusted substituter fortoor, which is the fleet's path rather than the ekala cache's. Linux is proven green without it, at the cost of ~50 minutes of compiles; petit cannot get there at all until its/nixhas room (anix-collect-garbageon a ~150 GiB store, or a bigger volume). Warmingossis what would turn both into substitutions.Summary
The package set is ekapkgs, pinned via npins the same way nixpkgs was (
fetchTarball; the only flake input isbun2nix). Import isnix/ekapkgs.nix. Cache: ekala-corepkgs.cachix.org besidecache.nixos.asia/oss.Current pin:
ekala-project/ekapkgsmaster@e1252ca5(sha256AeH2edfOTISToIEr8n+18reILmmrvrbuWM43nibFmKY=), after ekapkgs#8 merged (ripgrep15.2.0,npins0.5.1,nixpkgs-fmt1.3.0) on Darwin-capable corepkgs#185.HEAD:
9c98faa19(merge of master#615, 2026-09-17). Branch:migrate-ekapkgs.Builds
aarch64-darwinci@petit(trusted)nix build .#olai→/nix/store/akg5prgj9rfasnshw9pqkql6yjgq56j6-olai(olai --helpworks)x86_64-linuxtoor@kolu-ci-9nix build .#olai→/nix/store/cy0bn73ingjg0y4rwa4x9jp2lj0qr391-olai(olai --helpworks)aarch64-darwinci@petitd95882fff: FAILS (attempts 1 and 2, both exit1) —nodejs-24.20.0ENOSPC, takingolai-acp-claude-0.73.0andolaidown with it;olai-base/olai-client/olai-fonts/himalaya/rustchad already builtx86_64-linuxtoor@kolu-ci-9d95882fff: GREEN —nix build .#olai→/nix/store/mmhm9b8fxjhcmd9nrn5fqx0zccihcsww-olai,olai --version→olai v0.1.0; 44 drvs built from source, ~50 min on 32 coresPetit git: Apple
/usr/bin/gitis an Xcode stub — use a store git. Clone used:/tmp/olai-eka-darwin. Linux clone:/tmp/olai-eka-linux.Packages / APIs (do not put user tools in corepkgs)
corepkgs is stdenv, compilers, and core APIs. User tools belong in ekapkgs.
ripgrep15.2.0npins0.5.1nixpkgs-fmt1.3.0nix/vendor/nixpkgs-fmt.nixdeleted)nix/vendor/fonts— ekapkgs#5 is mergeable, not pinnedplaywright-driver(chromium-only)nix/vendor/playwright— draft ekapkgs#9drv.toDevShellpkgs.mkDevShellAlready on corepkgs Darwin master:
stdenv-darwin,git. Do not reopen corepkgs#175. Do not restoreripgrepin corepkgs.just ciBlocked on the fleet, not on this tree.
tooris not a trusted Nix user, so flakenixConfigcachix keys are ignored (warning: ignoring untrusted substituter 'https://ekala-corepkgs.cachix.org'). Shards then compile gcc/nodejs/clang from source until the odu-runner keep-alive dies (seen on kolu-ci-5 and kolu-ci-9).Where shards finished: fmt-check, 5/6 test, 5/6 typecheck. Need daemon
substituters/trusted-public-keys(ortoorintrusted-users) so those hosts can use ekala-corepkgs.cachix.org.just cinow doesodu run --no-waitthenodu wait --settle --timeout-msfromODU_CI_TIMEOUT(justenv(), becausenix developdrops the outer env). Default watch is still 15m; useODU_CI_TIMEOUT=6h just ciuntil the cache works.Conventions
pkgs.nodejs.v24. No top-levelpkgs.nodejs_24.pkgs.mkDevShell. corepkgs defaults__structuredAttrs;packagesthen miss PATH undernix develop -c, so this tree sets__structuredAttrs = falseand ashellHookPATH until corepkgs#155 is on Darwin-capable master.nix/bun.nixoverlay is gone.npmInstallHookinstalls under$out/lib/node_modules/${pname}.patchelf, notpatchelfUnstable.nix-cache: linux +macos-latest-xlarge. attic-client from pinned nixpkgs SHAafb4584a80bbf779ce0f691509ff902d188c2b3d.nix/vendor/fonts, converted bypackages/fonts/default.nix. Drop when ekapkgs#5 is on the pin.pkgs.chromium/pkgs.ffmpeg.Upstream
ripgrep,npins,nixpkgs-fmte1252ca5playwright-driver1.61.1charset-normalizerwithMypycdrv.toDevShellClosed without merging: corepkgs#174. Darwin stdenv corepkgs#175 stays closed.
What ekapkgs does not yet ship
nix/overlay.nix/nix/vendorstill overlay:nix/vendor/fonts)playwright-driverTest plan
nix evalofpkgs.stdenvonci@petit(stdenv-darwin)nix eval .#packages.aarch64-darwin.olainix build .#olaionci@petitnix eval .#packages.x86_64-linux.olainix build .#olaion kolu-ci-9just ci/odu run --platform x86_64-linux— blocked on untrusted substitutersjust e2eshard (needs the above)nix build .#olai-fontsalready works from the vendor overlay)