Configure all NixOS machines to use the internal harmonia binary cache:
- Add nix-cache.johnogle.info as substituter
- Add harmonia signing public key to trusted-public-keys
- Enable fallback for local builds when cache unreachable
- Set 5s connect-timeout for faster fallback
Refs: x-qdkuu
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add separate nixpkgs input for qt5webengine-dependent packages like
jellyfin-media-player. This input updates on a separate Renovate
schedule from main nixpkgs to avoid massive qt5webengine rebuilds
when updating other packages.
- Add nixpkgs-qt input pinned to nixos-25.11
- Create pkgs.qt-pinned overlay namespace
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Allows KDE Connect discovery and pairing to work when logged in as
the kodi user on the media center.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
beads:
- Pin to commit 93965b4a (last before Go 1.25.6 requirement)
- Build locally with corrected vendorHash (upstream default.nix is stale)
- Enables dolt server mode support (gt-1mf.3)
claude-code: 2.1.19 → 2.1.30
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Update gastown-fix-agent-bead-address-title.patch line numbers (326→315)
for current upstream gastown source
- Remove obsolete gastown patches (rig-prefix, copydir-symlinks) that are
now handled upstream
- Pin beads to 55e733c (v0.47.2) which uses Go 1.24.0 - newer versions
require Go 1.25.6 which isn't in nixpkgs-unstable yet
- Remove beads-search-query-optimization.patch as it targets newer code
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Updates nix-doom-emacs-unstraightened from Jan 25 to Jan 31 release,
which fixes the stale doom-intermediates.drv reference that was causing
nixosConfigurations.live-usb to fail flake check.
Closes: x-0cf
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Regenerated patch with correct hunk headers against locked rev 177094a2.
Root cause was malformed patch format, not a flake.lock issue.
Closes: hq-0h1p9m, x-bwld
The patch file had malformed hunk headers with incorrect line numbers
and counts, causing it to fail to apply against the locked gastown rev
(177094a2). This was NOT a flake.lock issue - gastown source was properly
locked.
Changes:
- Regenerated patch from scratch against locked gastown revision
- Re-enabled the patch in default.nix (was commented out with TODO)
- Updated comment to accurately describe the optimization
The optimization skips expensive beads queries for detached tmux sessions
and caches status line output with a 10-second TTL, reducing Dolt CPU
usage from ~70% to ~20%.
Closes: hq-0h1p9m
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Remove 'index 0000000..1111111' lines that made patches appear as new files
- Fix hunk line counts in several patches
- Add missing leading spaces to blank context lines
- Temporarily disable statusline optimization patch (needs regenerating)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Replace inline postPatch substituteInPlace calls with proper unified
diff patch files, following the pattern established by beads.
This improves maintainability:
- Each patch is in its own file with clear naming
- Patches use proper unified diff format
- Easier to review, update, and track individual fixes
- Default.nix is cleaner (237 lines of substituteInPlace -> 15 lines)
Patches included:
- gastown-fix-validate-recipient.patch
- gastown-fix-agent-bead-address-title.patch
- gastown-fix-agent-bead-rig-prefix.patch
- gastown-fix-role-home-paths.patch
- gastown-fix-town-root-detection.patch
- gastown-fix-copydir-symlinks.patch
- gastown-statusline-optimization.patch
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The Dolt backend's SearchIssues was using a two-phase query:
1. SELECT id FROM issues WHERE ... -> collect all IDs
2. SELECT * FROM issues WHERE id IN (id1, id2, ... id8000+)
With 8000+ issues, this second query with 8000+ placeholders hammers
Dolt CPU at 100%+. The fix changes SearchIssues to select all columns
directly in the first query and scan results inline.
See: hq-ihwsj
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Complete the statusline optimization by adding cache writes to all
output functions. The existing patch added cache functions and cache
reads, but never wrote to the cache.
Changes:
- Add early-return for detached sessions (return static "○ |")
- Add cache read check for attached sessions
- Add setStatusLineCache() calls in all 5 output functions:
- runWorkerStatusLine
- runMayorStatusLine
- runDeaconStatusLine
- runWitnessStatusLine
- runRefineryStatusLine
This should reduce Dolt CPU from ~70% to ~20% when agents are idle,
as tmux status lines will use cached results instead of spawning
beads queries every 5 seconds.
Testing: Run `nix switch` then monitor Dolt CPU with `top`
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add title-based lookup for hq- prefixed beads (uses title as address if contains "/")
- Add rig-specific prefix handling to parse IDs like j-java-crew-americano → java/crew/americano
- Handles crew, polecat, witness, refinery role patterns
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Fix mail router normalization in validateRecipient
- Fix agentBeadToAddress to use title field for hq- prefixed beads
- Fix crew/polecat home paths (remove incorrect /rig suffix)
- Fix town root detection (RoleUnknown instead of RoleMayor)
- Fix copyDir symlink handling
- Pin to gastown commit 177094a matching jt flake
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Fix mail router normalization in validateRecipient
- Fix agentBeadToAddress to use title field for hq- prefixed beads
- Fix crew/polecat home paths (remove incorrect /rig suffix)
- Fix town root detection (RoleUnknown instead of RoleMayor)
- Fix copyDir symlink handling
- Pin to gastown commit 177094a matching jt flake
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Monitor /System/Volumes/Data instead of / since root is a read-only
APFS snapshot with minimal usage. Also fix inverted formula that was
calculating 100-used instead of just using the capacity value directly.
Pivoted to Docker container approach for agent sandboxing instead of
Tart VMs due to networking issues with Cloudflare WARP.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Enable desktop role with wayland/sway
- Use greetd for passwordless auto-login to sway
- Add video/input groups to agent user
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
NixOS configuration for running LLM agents in isolated Tart VMs on
Apple Silicon. Includes:
- Headless server setup with SSH access
- Agent user with passwordless sudo
- Docker support
- Dev tools for cloning large repos
- Git config optimized for large repositories
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add a new system-level role for mounting WebDAV filesystems via rclone.
Includes rclone-torbox-setup helper script that uses rbw to bootstrap
credentials from Bitwarden.
Key features:
- Configurable WebDAV URL, username, mount point
- VFS cache mode and buffer size tuning for media streaming
- RequiresMountsFor option for ZFS pool dependencies
- Obscured password storage via environment file
Enable on john-endesktop for TorBox WebDAV access by rdt-client and
Jellyfin. Mount waits for /media ZFS pool before starting.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Inverts the df output to show percentage used, matching the other
resource monitors (CPU, memory).
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add optional no-error parameter to my/get-rbw-password that returns nil
instead of signaling an error when rbw isn't installed or the entry is
missing. Use this for gptel API key so config loads without errors in
environments without rbw configured.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The gastown build now requires BuiltProperly=1 to be set via ldflags,
otherwise gt errors with "This binary was built with 'go build' directly".
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Sync state confusion was causing org-caldav to want to delete all
calendar entries. Setting to 'never' prevents accidental data loss.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
org-caldav needs percent mappings for all todo states. Added mappings
for TODO, IN-PROGRESS, WAIT, DONE, and KILL to prevent sync errors.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
DEADLINE doesn't limit recurring event display - agenda skip function
handles that now. Simplified advice to only store CALDAV_UNTIL property.
Also made debug logging unconditional to diagnose why some events
don't get the property.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
DEADLINE doesn't actually limit recurring event display in org-agenda.
Instead, use org-agenda-skip-function-global to filter entries where
today's date is past the CALDAV_UNTIL property.
The skip function:
- Checks for CALDAV_UNTIL property (set by caldav sync advice)
- Parses YYYYMMDD format
- Skips entry if today > UNTIL date
This properly hides expired recurring events from the agenda.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
mu4e message links in todo.org can't be resolved during iCalendar export,
causing sync to abort. Setting org-export-with-broken-links to 'mark'
allows export to continue (broken links get marked in output).
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
assq uses eq for key comparison, which can fail if the key symbols aren't
identical objects. assoc uses equal, which is what org-caldav itself uses
for rrule-props lookups (e.g., INTERVAL, FREQ).
This fixes DEADLINEs not being added to recurring events with UNTIL dates.
Also adds debug logging to help diagnose any remaining issues - will be
removed once verified working.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Implements advice around org-caldav-insert-org-event-or-todo that:
- Extracts UNTIL from rrule-props
- Adds DEADLINE without repeater (Org 9.7+ treats as recurrence end)
- Stores :CALDAV_UNTIL: property for reference
Also fixes sync command to work before org is opened by requiring
org explicitly in the sync wrapper.
Closes: x-uv5f.1