feat(hermes): partager l'état avec les sessions hermes lancées par marc
Les sessions hermes ouvertes dans un pane herdr tournent sous marc, pas sous le compte de service : HERMES_HOME=/var/lib/hermes/.hermes (users/marc/home.nix) pour qu'elles lisent et écrivent le même état (sessions, mémoire, lazy-python) que le service hermes-agent. Accès : groupe secondaire hermes pour marc (users.nix) et ACL tmpfiles sur /var/lib/hermes (traversée) puis .hermes et .hermes/plugins (rwx + défauts ACL), pour que les fichiers créés par marc restent lisibles côté service. C'est ce qui rend le plugin herdr-agent-state utilisable : il parle au socket herdr de marc.
This commit is contained in:
@@ -26,7 +26,18 @@
|
||||
# users/marc/home.nix) : elles ecrivent dans /var/lib/hermes/.hermes. Le
|
||||
# groupe hermes (users.nix) plus les chmod g+rw du module hermes couvrent
|
||||
# l'existant ; ces ACL garantissent la traversee de /var/lib/hermes (2770) et
|
||||
# que les fichiers crees par marc restent lisiblc sort en "No output found" et
|
||||
# que les fichiers crees par marc restent lisibles par le service.
|
||||
# Pattern repris de services/firefox-mcp et amazon-mcp.
|
||||
systemd.tmpfiles.rules = [
|
||||
"a /var/lib/hermes - - - - u:marc:--x,m::rwx"
|
||||
"a /var/lib/hermes/.hermes - - - - u:marc:rwx,d:u:marc:rwx,m::rwx,d:m::rwx"
|
||||
"a /var/lib/hermes/.hermes/plugins - - - - u:marc:rwx,d:u:marc:rwx,m::rwx,d:m::rwx"
|
||||
];
|
||||
|
||||
boot.kernelParams = ["panic=10"]; # reboot 10 s après un kernel panic, le dump reste dans pstore
|
||||
systemd.settings.Manager.RuntimeWatchdogSec = "30s"; # reboot si la machine gèle (si `sudo wdctl` trouve un watchdog)
|
||||
# vkms = écran virtuel. Sans écran branché (DP-1/DP-2/HDMI-A-1 en disconnected sur
|
||||
# le Renoir), niri n'a AUCUNE sortie vidéo : wayvnc sort en "No output found" et
|
||||
# il n'y a rien à afficher en VNC. vkms crée une sortie virtuelle que niri adopte.
|
||||
boot.kernelModules = ["vkms"];
|
||||
# boot.initrd.clevis.enable = true;
|
||||
@@ -50,17 +61,5 @@
|
||||
# (user@host = hermes@tower, auth par clé, pas de mot de passe).
|
||||
# Déclaratif exprès : /var/lib/hermes est en 2770 (écriture groupe, requis par
|
||||
# le partage hermes/marc) et sshd (StrictModes, cf services/hermes) ignore
|
||||
# alors %h/.ssh/authorized_keys. Cette option écrit /etc/ssh/authorized_keys.d/
|
||||
# hermes en root 444, qui passe le contrôle, et survit aux rebuilds.
|
||||
users.users.hermes.openssh.authorizedKeys.keys = lib.mkAfter [
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMdX5m7b8xWL/9ZUeFRxahB4YY0v2rAV5CCFv8xTOlUh marc@Air-de-Marc"
|
||||
];
|
||||
|
||||
networking.hostName = "tower";
|
||||
sops.defaultSopsFile = lib.mkForce ../../secrets/tower.yml;
|
||||
|
||||
# Token Matrix du bot @hermes : seul tower est destinataire du fichier sops
|
||||
# (secrets/hermes-matrix.yml). Les autres hôtes qui importent services/hermes
|
||||
# (laptop, anywhere) ne doivent PAS le déclarer. Voir services/hermes.
|
||||
services.hermes.enableMatrixToken = true;
|
||||
# alors %h/.ssh/authorized_keys. Cette option écrit /etc/ssxToken = true;
|
||||
}
|
||||
|
||||
@@ -26,6 +26,10 @@
|
||||
"network"
|
||||
"manager"
|
||||
"ydotool"
|
||||
# sessions hermes lancees par marc dans les panes herdr : elles
|
||||
# partagent le state dir /var/lib/hermes/.hermes du service (cf
|
||||
# HERMES_HOME dans users/marc/home.nix), donc acces groupe hermes.
|
||||
"hermes"
|
||||
];
|
||||
# openssh.authorizedKeys.keys =
|
||||
shell = pkgs.zsh;
|
||||
|
||||
+9
-1
@@ -91,7 +91,15 @@
|
||||
home.sessionVariables = {
|
||||
EDITOR = "nvim";
|
||||
VISUAL = "nvim";
|
||||
GSETTINGS_SCHEMA_DIR = "${pkgs.gsettings-desktop-schemas}/share/gsettings-schemas/${pkgs.gsettings-desktop-schemas.name}";
|
||||
# Sessions hermes lancees par marc (panes herdr) : partager l'etat du
|
||||
# service au lieu de /home/marc/.hermes. C'est ce qui rend l'integration
|
||||
# herdr utilisable : hermes tourne alors sous marc, meme utilisateur que le
|
||||
# serveur herdr, donc HERDR_ENV/HERDR_PANE_ID survivent et le socket
|
||||
# ~/.config/herdr/herdr.sock est accessible.
|
||||
# Acces au state dir : groupe hermes (users.nix) + ACL declarees dans
|
||||
# profiles/tower/configuration.nix.
|
||||
HERMES_HOME = "/var/lib/hermes/.hermes";
|
||||
GSETTINGS_SCHEMA_DIR = "${pkgs.gsettings-desktop-schemas}/share/gsettings-schemas/${pkgs.gsettings-desktop-schemas.name}";
|
||||
DEFAULT_BROWSER = "${inputs.zen-browser.packages.${pkgs.stdenv.hostPlatform.system}.default}/bin/zen";
|
||||
BROWSER = "${inputs.zen-browser.packages.${pkgs.stdenv.hostPlatform.system}.default}/bin/zen";
|
||||
ELECTRON_OZONE_PLATFORM_HINT = "wayland";
|
||||
|
||||
Reference in New Issue
Block a user