{ 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 ) ); 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 ]; 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; }; }; }; programs.agentSkills.machine = "yolo"; 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 }, }, }) ''; }