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
|
# 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
|
# 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
|
# 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.
|
# il n'y a rien à afficher en VNC. vkms crée une sortie virtuelle que niri adopte.
|
||||||
boot.kernelModules = ["vkms"];
|
boot.kernelModules = ["vkms"];
|
||||||
# boot.initrd.clevis.enable = true;
|
# boot.initrd.clevis.enable = true;
|
||||||
@@ -50,17 +61,5 @@
|
|||||||
# (user@host = hermes@tower, auth par clé, pas de mot de passe).
|
# (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
|
# 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
|
# le partage hermes/marc) et sshd (StrictModes, cf services/hermes) ignore
|
||||||
# alors %h/.ssh/authorized_keys. Cette option écrit /etc/ssh/authorized_keys.d/
|
# alors %h/.ssh/authorized_keys. Cette option écrit /etc/ssxToken = true;
|
||||||
# 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;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,6 +26,10 @@
|
|||||||
"network"
|
"network"
|
||||||
"manager"
|
"manager"
|
||||||
"ydotool"
|
"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 =
|
# openssh.authorizedKeys.keys =
|
||||||
shell = pkgs.zsh;
|
shell = pkgs.zsh;
|
||||||
|
|||||||
+9
-1
@@ -91,7 +91,15 @@
|
|||||||
home.sessionVariables = {
|
home.sessionVariables = {
|
||||||
EDITOR = "nvim";
|
EDITOR = "nvim";
|
||||||
VISUAL = "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";
|
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";
|
BROWSER = "${inputs.zen-browser.packages.${pkgs.stdenv.hostPlatform.system}.default}/bin/zen";
|
||||||
ELECTRON_OZONE_PLATFORM_HINT = "wayland";
|
ELECTRON_OZONE_PLATFORM_HINT = "wayland";
|
||||||
|
|||||||
Reference in New Issue
Block a user