feat(hermes): bot Matrix @hermes (env, secret sops, allowlist)

Homeserver matrix.marcpartensky.com, @hermes:matrix.marcpartensky.com, E2EE
required (salles de pont chiffrées), pas de mention requise ni d'auto-thread
dans les salles de pont (3+ membres). Allowlist : @marc + son ghost Signal.
Token dans secrets/hermes-matrix.yml (règle .sops.yaml dédiée, sopsFile
explicite car hors de tower.yml).
This commit is contained in:
Hermes Agent
2026-09-26 18:11:54 -04:00
parent 8bba500743
commit 2149e5f998
3 changed files with 42 additions and 1 deletions
+4
View File
@@ -32,3 +32,7 @@ creation_rules:
key_groups:
- age:
- *tower
- path_regex: secrets/hermes-matrix\.yml$
key_groups:
- age:
- *tower
+16
View File
@@ -0,0 +1,16 @@
hermes_matrix_env: ENC[AES256_GCM,data:fdcMTWP/DkWaQDOsAlkPgLbt0LzgQSFS8cKYLxBYznZlY4PD55uJH5z1Q2w/eHci1lXqMm+nyUfBaszOyQ==,iv:iqOk62SC7RMLbxYC6aXVVFIW6JXq1Q5mgG/Plmj9/00=,tag:yef8OL72fnepeWaU9Zeo0w==,type:str]
sops:
age:
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAwZHNDWE9PUDhwc2lEM1hT
QzU3d3UwYStjTEV1bXF6cFc2aEJFR084d1hZCk5xS2dobnFWVmlkemNLR2kwbVNL
cUhiTWhyMUlvTXZ2OVpydkwyRS9IK1kKLS0tIE56VXJ4NEJBcVRqTlVVLzFheml6
YnExU1FZbFhsMk1kT3daKzVhcHl0NDAKQFX4E6fEbKNai2f7ypvvli3JVDQCmfrH
AnieX1EFYdBhjT11zR0PNSZL1p2SGQEaTpPvl4zYgAGZsOm+bBIYoQ==
-----END AGE ENCRYPTED FILE-----
recipient: age1usm3v0ugducrzcwud60dda7xfnj49fdhecj7kcsfm7dzwzrzeyqq2jc2hm
lastmodified: "2026-09-25T04:25:11Z"
mac: ENC[AES256_GCM,data:akuBPQcQ8nFGMTNvwH3/yS8fWOKKg9QuC96vW6zzECz9tVRQchapXIqZKYtlOmduysx37kE6qatZ/SnD6IQiaqwp5OM44yizr+anLYZukOV2R5h+L9pTiKKBm1OE+9YAyPOeQkArUMwubkxF5dNO1FBTN8F4aC3ycwf5t+MlCqo=,iv:KiFCSqQ29AV2HTlm+4g7agSEGAaXonxgSbfpa4cCCa0=,tag:HbD8tWce0XqOpR4/gk6j9g==,type:str]
unencrypted_suffix: _unencrypted
version: 3.13.3
+22 -1
View File
@@ -17,12 +17,27 @@
# --- service hermes ---
services.hermes-agent = {
enable = true;
environmentFiles = [config.sops.secrets."hermes_env".path];
environmentFiles = [
config.sops.secrets."hermes_env".path
config.sops.secrets."hermes_matrix_env".path
];
addToSystemPackages = true;
# venv nix scellé -> deps mem0 (mem0ai) installées au runtime dans une cible durable
environment.HERMES_LAZY_INSTALL_TARGET = "/var/lib/hermes/.hermes/lazy-python";
# --- Matrix : bot @hermes (Element + ponts mautrix) ---
environment.MATRIX_HOMESERVER = "https://matrix.marcpartensky.com";
environment.MATRIX_USER_ID = "@hermes:matrix.marcpartensky.com";
# salles du pont = chiffrées E2EE (encryption.default=true côté mautrix-signal)
environment.MATRIX_E2EE_MODE = "required";
# salle de pont = 3+ membres (bot du pont inclus) -> pas classée DM :
# réponse sans mention, et pas d'auto-thread (les ponts aplatissent les threads)
environment.MATRIX_REQUIRE_MENTION = "false";
environment.MATRIX_AUTO_THREAD = "false";
# @marc + son ghost Signal (mautrix-signal)
environment.MATRIX_ALLOWED_USERS = "@marc:matrix.marcpartensky.com,@signal_ad927dda-4064-48ff-8652-01a0d71005e4:matrix.marcpartensky.com";
# psycopg2 buildé par nix (évite le wheel manylinux psycopg2-binary)
# numpy : les wheels manylinux cassent sur NixOS (libstdc++.so.6 absent) —
# les deps compilées des lazy-installs doivent venir de nix
@@ -234,6 +249,12 @@
sops.secrets."hermes_env" = {};
# Token Matrix du bot (@hermes) — clé "hermes_matrix_env" du fichier sops,
# valeur = contenu dotenv (MATRIX_ACCESS_TOKEN=...) fusionné dans .env
sops.secrets."hermes_matrix_env" = {
sopsFile = ../../secrets/hermes-matrix.yml;
};
security.sudo.extraRules = [
{
users = ["marc" "hermes"];