Commits
- wrapperModules/claude-code: declarative options for skills, commands,
agents, mcpServers, hooks, permissions, settings, and claudeMd
- Assembles a plugin directory (--plugin-dir) and settings.json
(--settings) injected into every claude-code invocation
- claudeMd lines are fuzzy-merged into ~/.claude/CLAUDE.md using
Levenshtein distance (only adds, never removes user content)
- 5pkgs/levenshtein: small C tool for edit distance, threshold check,
and line-level file merge
- tools/claude: rewritten to consume the new wrapper module
Use pinentry-rofi on linux and pinentry_mac on darwin directly,
removing the now-unused pinentry-auto wrapper.
Directory names like "Searching (2018)" broke the space-separated
inotifywait output parsing, causing file events inside those
directories to be silently dropped.
Replace watch_new_dir (which spawned a redundant background inotifywait
per directory and silently lost files) with a synchronous scan_new_dir
that immediately finds and adds all files. The main recursive watcher
already handles future events in new subdirectories.
The grep patterns (',.*S' and '-v ,.*S') matched Dovecot's size
metadata (,S=7520) instead of the actual Maildir Seen flag after :2,.
This prevented read status from propagating from notmuch to IMAP.
Replace grep-based filtering with case statements that check the
flags field after :2, correctly.
pinentry-auto uses pinentry-tty when a TTY is available, falls back to
pinentry-rofi otherwise. Set once in rbw config so the agent stays
unlocked across calls (changing pinentry config restarts the agent,
which was dropping the unlocked state).
HedgeDoc was OOMing at 6GB due to a Node.js memory leak.
- MemoryMax=1G: systemd kills and restarts if it exceeds 1GB
- NODE_OPTIONS --max-old-space-size=512: limits V8 heap
- Restart=always: ensures it comes back after OOM kills
Remove separate games user. Add hidraw udev rule for
gamepad support in Wine/Proton.
- mod+w: flatten all workspace windows into tabbed layout
- mod+Tab: cycle focus through leaf windows in tree order
- Remove split bindings (mod+b/v) to avoid accidental sub-containers
- Remove autotiling (replaced by explicit layout control)
Teaches the agent how to:
- Use ghidra-analyzeHeadless for static analysis and decompilation
- Write custom Ghidra scripts for targeted analysis
- Use GDB in batch mode to debug running processes
- Combine both for full reverse engineering workflows
Create window with first tab URL directly instead of creating
a blank window and trying to clean up the new tab afterwards.
- Auto-joins rooms when invited
- Detects IMDb and TMDB links, requests media via Jellyseerr
- Resolves IMDb IDs through Radarr/Sonarr
- Checks if media already exists and replies with direct flax.lassul.us link
- Webhook listener for Radarr/Sonarr download notifications
- Tracks requests and notifies rooms when downloads complete
- Uses LoadCredential for secrets (matrix token, API keys)
- Daemon: only tracks workspace/directory, emits events, persists tabs
- Remove on_create/on_enter/on_leave hooks, tmux management, restore flag
- Firefox extension: saves tabs to ~/workspaces/<name>.json via daemon
- Firefox extension: anchor window keeps Firefox alive, hidden in scratchpad
- Daemon registers sway for_window rule before Firefox starts
- Firefox service: Restart=always, starts after workspace-manager
- Native host: passes tab save/load through daemon (single writer)
- Workspace menu: simplified to restore tabs, close, edit, delete
- Remove workspace-on-new.sh (no longer needed)
- NixOS module: only directory option remains
Adapted to upstream rename in NixOS/nixpkgs#475836.
- Add workspace-menu (mod4+space): save layout, restore, close, edit, delete
- Add workspace-on-new: prompt to restore or start fresh on new workspace
- Pass restore flag through daemon -> native host -> Firefox extension
- Skip prompt for workspaces that already have windows
- Move NixOS module from 3modules/ to tools/ as wrapperModule
- Declare flake.wrapperModules option for multi-module merging
- swayidle was calling plain 'systemctl suspend' instead of suspend-then-hibernate
- add explicit SuspendMode/SuspendState to sleep.conf
- Add amdgpu.dcdebugmask=0x10 to prevent GPU hang when gaming with external display
- Add configurationLimit=10 to prevent /boot from filling up
- wrapperModules/claude-code: declarative options for skills, commands,
agents, mcpServers, hooks, permissions, settings, and claudeMd
- Assembles a plugin directory (--plugin-dir) and settings.json
(--settings) injected into every claude-code invocation
- claudeMd lines are fuzzy-merged into ~/.claude/CLAUDE.md using
Levenshtein distance (only adds, never removes user content)
- 5pkgs/levenshtein: small C tool for edit distance, threshold check,
and line-level file merge
- tools/claude: rewritten to consume the new wrapper module
- Auto-joins rooms when invited
- Detects IMDb and TMDB links, requests media via Jellyseerr
- Resolves IMDb IDs through Radarr/Sonarr
- Checks if media already exists and replies with direct flax.lassul.us link
- Webhook listener for Radarr/Sonarr download notifications
- Tracks requests and notifies rooms when downloads complete
- Uses LoadCredential for secrets (matrix token, API keys)
- Daemon: only tracks workspace/directory, emits events, persists tabs
- Remove on_create/on_enter/on_leave hooks, tmux management, restore flag
- Firefox extension: saves tabs to ~/workspaces/<name>.json via daemon
- Firefox extension: anchor window keeps Firefox alive, hidden in scratchpad
- Daemon registers sway for_window rule before Firefox starts
- Firefox service: Restart=always, starts after workspace-manager
- Native host: passes tab save/load through daemon (single writer)
- Workspace menu: simplified to restore tabs, close, edit, delete
- Remove workspace-on-new.sh (no longer needed)
- NixOS module: only directory option remains
- Add workspace-menu (mod4+space): save layout, restore, close, edit, delete
- Add workspace-on-new: prompt to restore or start fresh on new workspace
- Pass restore flag through daemon -> native host -> Firefox extension
- Skip prompt for workspaces that already have windows
- Move NixOS module from 3modules/ to tools/ as wrapperModule
- Declare flake.wrapperModules option for multi-module merging