Adds the maestro flake as an input and imports its Home Manager module.
yolo enables both user services; web binds 0.0.0.0:8081 because aoe-web
already holds 8080 on this host.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Shells set TMUX_TMPDIR to the runtime dir; the unit did not, so the
daemon ran a second tmux server under /tmp. Every boot resumed duplicate
agents there, the dashboard diverged from the TUI, and polling the
invisible sessions fired an error push per session. Same fix pr-daemon
got.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Fork carries two patches on v1.14.1+: worktree_info on plain add
(grouping) and reaping agent processes that survive tmux teardown.
Also brings upstream the settings drift the mutable-file guard caught:
fable model, secret-guard hook chain, verbose, confirm_delete.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Guest samba share of /home/naps62 on yolo, limited to the private
nets via hosts allow. arrakis and konishi mount it with the same
lazy automount used for the NAS media share.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Global config keeps bash at "ask", which stalls every unattended opencode
session on git and grep. yolo runs the PR daemon's reviewers, so the prompt
is a deadlock there rather than a gate.
Merges like claude-settings.json: home/yolo/opencode.json holds only the
override, so agents, commands and skills still come from common. Reviewers
run on branches under review, so this drops that prompt too.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
pr-daemon, hourlog and week-review are defined by the agent-skills
home-manager module now, next to the scripts they run; this host just
enables them.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Agent tmux sessions the daemon starts live in its cgroup; a restart was
killing every session it had created.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The XF86 binds survived the noctalia -> eww switch, but the popup they
drew did not, so volume and brightness changed with no feedback. swayosd
replaces it: swayosd-client both applies the change and draws the OSD.
Also fixes two binds that pointed at binaries no host installs any more:
XF86AudioMicMute called volumectl (avizo, removed) and the brightness
keys called brightnessctl, which only arrakis has.
Commands are referenced by store path because Hyprland execs binds with
the PATH the session was started with.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Watches GitHub and Gitea PRs and routes them to aoe sessions. Lives here
rather than in agent-skills' nix module for the same reason the timers
do: it belongs to one box.
Config and tokens are outside the store, so the unit refuses to start
without them.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
opencode has no @file imports, so the shared home-manager module
concatenates the claude-md fragments into .config/opencode/AGENTS.md
(the screenshots line moved there as a fragment) and links commands/
into place. Keeps only the opencode-specific agents, commands and
skills here.
Two dokploy MCP tools declare ttl with the draft-04 "exclusiveMinimum":
true. Synthetic validates tool schemas against draft-2020 and rejects the
whole request, so every session died on a bodiless 500. Deny those two.
Haiku moves to GLM Flash: Qwen3.6-27B rejects Claude Code multi-block
system prompt.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Binds the opus/sonnet/haiku aliases to Kimi K3, GLM-5.2 and Qwen3.6 so
they can be swapped mid-session, and registers the wrapper as an aoe agent.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
noctalia publishes no binary cache, so `flake update` means a local Qt/QML
build every time. quickshell comes from nixpkgs and is cached, so the
nixpkgs follows stays; only the noctalia ref is pinned.
Pinned to the rev already locked, so this rebuilds nothing.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Packages the prebuilt pi release binary and puts it on PATH alongside
Claude Code, Codex and opencode.
pi has no `@file` imports in context files, so the shared agent-skills
fragments are concatenated into ~/.pi/agent/AGENTS.md. Skills need no
wiring: pi already reads ~/.agents/skills.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
gpg-agent is the ssh agent here, and signing blocks forever on a pinentry
prompt with no TTY, so git push hung right after "Server accepts key".
The key file has no passphrase, so read it directly instead.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
yolo's desktop is only ever seen through a Moonlight window, so its cursor
needs to be tellable apart from the client's at a glance. Bibata-Modern-Amber
differs in both colour and silhouette from Nordzy.
Threads the theme through an option rather than setting it in one place: it
was hardcoded in cursor.nix, in hl.env, in the setcursor autostart, and twice
more in darkman's mode scripts, which re-set it on every light/dark switch and
would have reverted the override.
Also drops a stale hl.env pointing HYPRCURSOR_THEME at rose-pine-hyprcursor,
which no host installs.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
virtio-gpu exposes no NVENC/VAAPI, so sunshine software-encodes. Measured
x264 (superfast+zerolatency) on the 8 vCPUs: 73fps at 2160p against 135fps
at 1440p, so a 60fps client keeps roughly 20% margin.
Also brings the drifted agent-of-empires config upstream, which the
mutableFiles guard required before switching.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
hardware.uinput, enabled by services.sunshine, sets /dev/uinput to
root:uinput 0660 and adds no members to the group. Sunshine runs as a
user service, so it failed to create the virtual mouse, keyboard and
gamepads and the stream carried no input.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Text paste went through `kitty @ send-text`, which has no bracketed
paste, so multi-line clipboard text ran line by line in a shell. Route
text through `kitty @ action paste_from_clipboard` instead and keep
send-text for the image path only.
Over SSH the typed path pointed at the local /tmp and the remote process
could not read it. Read the focused window's foreground processes from
`kitty @ ls`, and when one of them is an ssh client, scp the image to
that host and type the remote path. Nothing is typed into the focused
app but a path, so this still works when the target is a TUI rather than
a shell. The real ssh process is preferred over the `kitten ssh`
wrapper, whose long options the argument parser does not understand.
Also: mktemp instead of a timestamp that collides within a second,
a prune of clip files older than a day, image/png preferred over
whatever format the source advertises first, and the clipboard tools
pinned so the script does not depend on kitty's inherited PATH.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>