···7676 imports = [
7777 self.inputs.hermes-agent.nixosModules.default
7878 ../../configs/hermes-mail-vars.nix
7979+ # Phone-approved ssh for the agent: the phonetpm user service runs in the
8080+ # hermes user manager (the module sets linger), see SSH_AUTH_SOCK below.
8181+ ../../configs/phonetpm.nix
7982 ];
80838184 # Hermes Agent (Nous Research) — autonomous agent run as a native systemd
···117120 # CalDAV (calendar skill below) is plain HTTP; curl is not otherwise on
118121 # the gateway PATH.
119122 pkgs.curl
123123+ # ssh through the phonetpm agent (SSH_AUTH_SOCK below).
124124+ pkgs.openssh
120125 ];
121126122127 settings.model = {
···467472 # binary the agent is pointed at.
468473 # The module hardens the unit with NoNewPrivileges = true, hence mkForce.
469474 systemd.services.hermes-agent.serviceConfig.NoNewPrivileges = lib.mkForce false;
475475+476476+ # ssh as hermes signs with the phone key (keys/ssh/phonetpm_massulus.pub,
477477+ # authorized on all hosts): every login asks for a fingerprint on the phone.
478478+ # The daemon only starts once paired:
479479+ # sudo -u hermes phonetpm pair <endpoint id>
480480+ # systemctl --user -M hermes@ start phonetpm
481481+ # %U is the hermes uid, so this is the user manager's %t/phonetpm/agent.sock.
482482+ systemd.services.hermes-agent.environment.SSH_AUTH_SOCK = "/run/user/%U/phonetpm/agent.sock";
470483471484 # Boot-race guard. matrix.lassul.us is IPv6-only; on this desktop
472485 # network-online.target can fire before v6 DNS is ready, so the gateway's