Clone this repository
For self-hosted knots, clone URLs may differ based on your setup.
The thread unread badge in RoomViewHeader only recomputed on
ThreadEvent.New/Update/NewReply. Marking a thread read emits
RoomEvent.Receipt / RoomEvent.UnreadNotifications instead, so the badge
kept a stale count until unrelated thread activity fired a recompute -
the notification appeared persistent and laggy. Subscribe the badge
effect to those receipt events too.
Assisted-by: Claude Code (claude-opus-4-8[1m])
Its fetchPnpmDeps used fetcherVersion=2, removed in nixpkgs 26.11, breaking
`nix flake check`. Drop the package and its unused (un-imported) service module.
Assisted-by: Claude Code (claude-opus-4-8[1m])
nixpkgs 26.11 systemd.nix now reads environment.variables.SYSTEMD_XKB_DIRECTORY
and config.i18n.imperativeLocale, but extra-container's minimal module set
omits the modules that declare them, breaking the container-virtulus eval in
`nix flake check`. Add dummy options to the existing workaround block.
Assisted-by: Claude Code (claude-opus-4-8[1m])
bitwarden-desktop pulls electron_39, which nixpkgs now marks insecure
(EOL), failing `nix flake check` (eval-xerxes). secureify it via overlay
rather than nixpkgs.config.permittedInsecurePackages, matching the
existing olm fix in mautrix-telegram (lib/secureify.nix).
Assisted-by: Claude Code (claude-opus-4-8[1m])
orange's autoswitch was failing activation: the git service's
mkdir /var/lib/git hit a symlink loop (a stale dangling
`state/git -> ../../var/state/git` link that loops because the container
bind-mounts both /var/lib and /var/state to the same state dir).
cgit is being retired, so remove the services/git import entirely. This
also unblocks orange's autoswitch (it no longer touches /var/lib/git).
Assisted-by: Claude Code (claude-opus-4-8[1m])
A transient GitHub 5xx while resolving the flake at boot used to leave a
container's autoswitch in a failed oneshot state with no retry, silently
running stale config (observed on yellow: the disk-space guard never
updated to the 100 GiB threshold).
Add Restart=on-failure with RestartSec=120s. Since RestartSec is well
above the default StartLimitIntervalSec, the restart rate limiter never
trips, so a transient failure keeps retrying every 2 min and self-heals
once GitHub recovers.
Assisted-by: Claude Code (claude-opus-4-8[1m])
ollama is no longer used here; removing it frees ~4G.
Prepare a fresh libvirt guest for riot on a dedicated public IP
(95.217.192.52, separate MAC) bridged directly onto ext-br. Because the
bridge is unmanaged, libvirt installs no iptables rules for it, avoiding
the nat-chain race that forced the old restart-iptables hack in hfos.nix.
- physical.nix: enable the ext-br bridge, enslave enp35s0, host IP on bridge
- config.nix: enable libvirtd, add riot login user, FORWARD accept for the VM IP
Bridge cutover applies at the next reboot window; the VM is created
imperatively afterwards.
Assisted-by: Claude Code (claude-opus-4-8[1m])
Cinny has no thread overview UI, which makes the Zulip bridge's stream rooms
(one Matrix thread per Zulip topic) hard to navigate. Carry smokku's
"threads-ui" thread drawer/browser (PR cinnyapp/cinny#2787, closed only
because Cinny froze PRs during their SDK rewrite) as a patch over the
packaged v4.12.2 release and serve it at the matrix.lassul.us root.
The patch is the squashed feature diff resolved against v4.12.2; the only
conflict was RoomViewHeader.tsx (additive, alongside the call button). The
lockfile is unchanged so nixpkgs' npmDepsHash still applies. Re-resolve the
patch against the new tag on each cinny bump.
Assisted-by: Claude Code (claude-opus-4-8[1m])
Bridge Matrix to Zulip via GearKite/MatrixZulipBridge (packaged in nixpkgs
as matrix-zulip-bridge). No upstream NixOS module exists, so the systemd
service mirrors the heisenbridge module it is forked from: generate the
registration, merge in the tokens, and wire it into Synapse. Zulip orgs
(e.g. zulip.geninf.io) are configured at runtime via the bridge admin room.
Assisted-by: Claude Code (claude-opus-4-8[1m])