n8n >= 2.37.0 demands pnpm >= 11.22.0 via engines.pnpm and serialises
patchedDependencies as plain scalars in pnpm-lock.yaml (same
lockfileVersion '9.0'), which pnpm 10 cannot install. The pinned nixpkgs
only ships pnpm_11 11.17.0, so:
- build with pnpm_11 + fetcherVersion 4 and relax the engines.pnpm gate
in package.json (relaxPnpmEngine) for both fetchPnpmDeps and the main
build; swap pnpm_10 -> pnpm_11 in nativeBuildInputs
- drop the workaround once nixpkgs ships pnpm >= 11.22
update.sh: detect ERR_PNPM_UNSUPPORTED_ENGINE /
ERR_PNPM_LOCKFILE_CONFIG_MISMATCH with actionable hints, sync
tests/n8n-overlay-test.nix expectations (checks were stale at 2.32.6),
guard against leftover fake-hash sentinels, and run from the repo root
so the relative nix --expr paths resolve.
Verified: n8n-overlay check green, full n8n 2.37.9 build green.
Also bumps the buzz input (0.5.18 -> 0.5.20), which pulls rust-overlay
fd2ebb9 where the stdenv.isLinux/isDarwin reads were migrated to
stdenv.hostPlatform — eliminating evaluation warnings.
openspec is now consumed from numtide/llm-agents.nix via the
shared-nixpkgs overlay (pkgs.llm-agents.openspec), which is fresher than
the separately pinned Fission-AI input. Removes the duplicate source of
truth; drops the now-unused flake input.
Primary: /run/agenix/elevenlabs-key (read via 'read -r' which strips
the trailing newline agenix files contain).
Fallback: ELEVENLABS_API_KEY env var (backwards compatible).
No need to export the key in shell environment anymore — if the
agenix secret exists, talk picks it up automatically.
Override path via ELEVENLABS_KEY_FILE env var if needed.
crunch script <type> <time> <script.sh> [args...]
Runs any shell script on schedule. Script stdout is piped to talk
for voice output. Empty stdout = silence (no error thrown).
Enables complex multi-step pipelines:
- Fetch data (basecamp, gh, curl)
- Write reports to disk
- Pipe through pi/opencode for AI summarization
- Final stdout → talk voice notification
Example:
crunch script daily '08:00' ~/scripts/basecamp-daily.sh
The shell '>' redirect creates ACTION_FILE immediately as an empty file.
The poll loop checked [ -f ] (exists) instead of [ -s ] (non-empty),
so it matched on the first 0.2s iteration, found no 'cancel' string,
and broke out of the loop — leaving mpv running with no listener.
[ -s ] only returns true once notify-send writes 'cancel' to the file
(i.e. when the user actually clicks the Abbrechen action).
crunch schedules transient systemd --user timers that fire talk (TTS)
or AI agents (pi/opencode) → talk at specified times.
Commands:
crunch at <time> <message> One-shot
crunch in <duration> <message> One-shot after delay
crunch daily <time> <message> Recurring daily
crunch weekly <day> <time> <message> Recurring weekly
crunch ai <engine> <type> <time> <prompt> AI crunch
crunch list List jobs
crunch cancel <name> Cancel job
crunch purge Clean fired jobs
Supports German and English day names (Montag→Mon, etc).
Adds a guardrails submodule option to coding.agents.pi that:
- Generates ~/.pi/agent/extensions/guardrails.json when enabled
- Automatically injects @aliou/pi-guardrails package into settings.packages
- Provides structured options for policies, pathAccess, and permissionGate
The module generates the JSON config that pi-guardrails reads for
its security hooks (policies, permission-gate, path-access).
Limitations documented in option descriptions:
- Path access checks are lexical (not symlink-safe)
- Local project guardrails.json can override global rule IDs
The previous jq filter grabbed the first non-stable release by creation date,
which incorrectly returned 1.123.38 instead of the latest stable 2.18.5.
Now query the 'stable' tag directly and extract version from its
target_commitish (e.g., 'release/2.18.5' -> '2.18.5'), ensuring we always
get the actual latest stable version.
Also bump version from 2.17.8 to 2.18.5 with updated hashes.
- Remove --pure from nix-shell shebang to allow network access
- Add --flake --system x86_64-linux for proper flake evaluation
- Navigate to nixpkgs root before running nix-update
- Also bump version 2.17.5 -> 2.17.8
- Remove dead overlays/default.nix (flake defines overlays inline)
- Remove orphaned overlays/mods/{beads,n8n}.nix (never imported)
- Remove docs/packages/notesmd-cli.md (package doesn't exist)
- Extract externalSkills submodule to shared-options.nix (eliminates
~100 lines of duplication across opencode/claude-code/pi modules)
- Fix lib output: use nixpkgs.lib directly instead of instantiating
a full nixpkgs just to get lib
- Add lib unit tests to flake checks
- Update stale comment in coding-rules.nix
Skills from flake inputs (e.g. Basecamp) were not being passed to
mkOpencodeSkills for the pi agent, so they never appeared in
~/.pi/agent/skills/. This adds the same externalSkills option that
the opencode agent module already has.