Files
nixos-config/home/yolo/default.nix
T
Miguel Palhas 9b4a2b44dc
CI / lint (push) Successful in 29s
CI / eval (push) Successful in 2m1s
feat(opencode): allow bash on yolo only
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>
2026-08-20 11:25:08 +01:00

105 lines
3.7 KiB
Nix

{
lib,
pkgs,
...
}:
let
claudeSettings = "home/yolo/claude-settings.json";
# ./claude-settings.json holds only what yolo overrides; everything else is
# inherited so common changes reach this host. Attrsets merge key-by-key,
# lists are replaced whole (permissions.allow is yolo's, not a union).
mergedClaudeSettings = (pkgs.formats.json { }).generate "claude-settings.json" (
lib.recursiveUpdate (lib.importJSON ../common/programs/claude/settings.json) (
lib.importJSON ./claude-settings.json
)
);
# Same merge, same reason: ./opencode.json holds only yolo's overrides so
# agents, commands and skills keep coming from common.
mergedOpencodeConfig = (pkgs.formats.json { }).generate "opencode.json" (
lib.recursiveUpdate (lib.importJSON ../common/programs/opencode/opencode.json) (
lib.importJSON ./opencode.json
)
);
in
{
imports = [
../common/programs/default.nix
../common/programs/desktop
../common/programs/hyprland
../common/programs/kitty
../common/programs/gpg.nix
../common/programs/aoe
../common/features/xdg.nix
./monitors.nix
./services.nix
./ssh.nix
];
# Host-local, like the aoe config below: bash goes from "ask" to
# "allow" so unattended opencode sessions stop stalling on every git and grep.
# It also drops the prompt on branches under review, which is the tradeoff.
xdg.configFile."opencode/opencode.json".source = lib.mkForce mergedOpencodeConfig;
custom.hyprland.cursorSize = 32;
# Amber, and a different silhouette to Nordzy — this desktop is only ever seen
# inside a Moonlight window, so the cursor has to be tellable at a glance from
# the client's own. Same theme in both modes; darkman would otherwise swap it.
custom.hyprland.cursorPackage = pkgs.bibata-cursors;
custom.hyprland.cursorTheme = {
dark = "Bibata-Modern-Amber";
light = "Bibata-Modern-Amber";
};
home = {
# Headless browser driver the agent tooling shells out to. Was a global npm
# install on the ubuntu box.
packages = [ pkgs.agent-browser ];
# Both default to ~/projects/nixos-config in common/programs; this clone
# lives under ~/tea. nh.flake sets NH_FLAKE, so without it `nh home switch`
# with no argument resolves to a path that does not exist.
mutableFilesRepoPath = "/home/naps62/tea/nixos-config";
mutableFiles = {
# Host-local, not shared: this sets yolo_mode_default = true, which starts
# aoe sessions with permission checks skipped. Only correct on this box.
".config/agent-of-empires/config.toml".source = ./aoe-config.toml;
# Likewise host-local: carries skipDangerousModePermissionPrompt and the
# rev hook paths, neither of which belong on a workstation.
".claude/settings.json" = {
source = lib.mkForce mergedClaudeSettings;
upstreamPath = claudeSettings;
};
};
};
# This is the one box that runs the agent-skills units; each starts a session,
# so a second machine enabling them would run the same job twice.
programs.agentSkills = {
machine = "yolo";
prDaemon.enable = true;
hourlog.enable = true;
weekReview.enable = true;
};
programs.nh.flake = "/home/naps62/tea/nixos-config";
# Idle lock and dpms-off blank the virtual output: Sunshine then captures a
# flat frame and Moonlight goes black, with no console to unlock from.
services.hypridle.enable = lib.mkForce false;
# Blur and shadow cost a fullscreen pass per frame, and every frame here is
# also x264-encoded for the stream — on a virtio-gpu with no VirGL, in software.
wayland.windowManager.hyprland.extraConfig = ''
hl.config({
decoration = {
blur = { enabled = false },
shadow = { enabled = false },
},
})
'';
}