The eigent package directory was deleted in 96f5d7f (which was titled
"chore: update n8n, openwork, vibetyper") but the callPackage reference
in pkgs/default.nix and the row in docs/packages/README.md were left
behind. As a result `nix build .#eigent` and `nix flake check` failed
with "undefined variable" errors when the eigent attribute was forced.
Drop both references so the package set evaluates cleanly.
- overlays/mods/n8n.nix: add passthru.updateScript pointing to ./update.sh
- overlays/mods/update.sh: self-contained updater that fetches the latest
stable n8n-io/n8n release, recomputes both src and pnpmDeps hashes
(src via nix-prefetch-url with --name workaround for the `@` in the tag,
pnpmDeps via the lib.fakeHash mismatch trick)
- .gitea/workflows/nix-update.yml: discover and run overlays/mods/*/update.sh
after the pkgs/ loop; verify step skips overlay/* entries (covered by flake check)
The test suite (tests/n8n-overlay-test.nix) forbids exporting a local n8n
package, so the overlay cannot be exposed via pkgs/n8n/ — the workflow gets
an explicit overlay-discovery block instead.
- vibetyper/msty-studio: unversioned AppImage URLs → HEAD/Last-Modified
check via custom update.sh, refreshes sha256 when upstream binary changes
- zellij-ps: switch to branch-tracking (master tip via Gitea API) since
helper-scripts repo has no tags
- all three expose passthru.updateScript so the existing CI workflow
discovers them via is_custom_update_script
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).