Commit Graph
1033 Commits
Author SHA1 Message Date
Hermes Agent 7655391102 feat(zitadel): secret SMTP + PAT admin lisible par hermes
secrets/zitadel-smtp.yml porte le mot de passe du compte d'envoi pour
le provisioning SMTP par API (v2 ignore la config runtime). Le PAT
admin est materialise en 0400 pour hermes et rotate.
2026-10-19 02:07:32 -04:00
Hermes Agent f859ddb8e5 fix(hermes-pocket): active la porte d'auth du serve headless
dashboard.public_url engage auth_required : la racine ne sert plus le
token de session en clair derriere Pangolin. Le flux client passe par
/auth/password-login puis un ws-ticket a usage unique. nginx annonce
https et la sonde devient /api/status.
2026-10-19 02:07:20 -04:00
Hermes Agent 25a4da39af fix(hermes-webui): OIDC Zitadel a la place du SSO Pangolin
App Zitadel publique en PKCE (client_id 395733475048620332), claim
preferred_username limite a marc@marcpartensky.com, redirect explicite
car nginx reecrit le Host. SSO Pangolin coupe pour eviter le double
login.
2026-10-19 02:07:20 -04:00
Hermes Agent 0d03aa3a83 feat(hermes): DeepSeek v4.1 Flash par defaut, MCP beeper declare
DeepSeek v4.1 Flash devient le modele par defaut ; chaine de secours
DeepSeek puis Nemotron 3 Ultra gratuit ; le salon de Zoe (Matrix) y
passe aussi.
Beeper est declare dans les mcpServers avec le token lu depuis
l'environnement (plus de token en dur dans config.yaml) et l'URL LAN
pour etre cliquable depuis Hermes Desktop. Le timeout du MCP gitea
est complete.
2026-10-19 02:07:19 -04:00
Hermes Agent dbf57bcb74 feat(mcp): Anki headless + acces LAN filtre aux MCP
anki-mcp : Anki sans bureau et addon AnkiMCP, HTTP MCP sur 3141,
connecte a la collection du serveur de sync.
mcp-lan-access republie sur l'adresse LAN de tower les endpoints
loopback (3141, 8710, 6060, 23373), firewall limite au Mac ; l'addon
Anki autorise ce Host (anti DNS-rebinding).
arr-mcp ne publie plus 6060 sur 0.0.0.0. Le module mcp-lan-access
est importe par services/default.nix avec anki-mcp, wise-mcp et
bank-mcp.
2026-10-19 02:07:19 -04:00
Hermes Agent c427110b4b feat(mcp): serveurs MCP Wise et Bank
wise-mcp passe par le CLI officiel, token dans secrets/wise.yml.
bank-mcp lit une config locale 0600 (pas de secret nix).
2026-10-19 02:07:19 -04:00
Hermes Agent 52ff370ea0 chore(sops): creation_rules des nouveaux secrets
Regles pour secrets/monero.yml (tower + deck), stalwart-mcp.yml,
wireguard.yml, zitadel-smtp.yml et wise.yml (recipient tower).
2026-10-19 02:07:19 -04:00
Hermes Agent 161cd8e4d9 feat(hermes-skins): pack Hermes Menagerie pour le Mac
Input brut hermes-menagerie (github:ZakiChair/hermes-catppuccin),
module home-mac/hermes-skins qui installe les palettes dans
~/.hermes/skins, active dans la home de marc@macos.
2026-10-19 02:07:18 -04:00
Hermes Agent 9abcab4e00 perf(deck): 6 threads XMRig et reprise thermique a 84 C 2026-10-19 01:40:11 -04:00
Hermes Agent ecb630ef06 fix(deck): conduit ecoute sur IPv4 loopback 2026-10-19 01:33:48 -04:00
Hermes Agent 76ac59eed0 fix(monero): pool Stratum MoneroOcean et seuil thermique du Deck 2026-10-19 01:31:22 -04:00
Hermes Agent 093cc8dd55 feat(deck): mineur Monero XMRig avec garde thermique 2026-10-19 01:24:50 -04:00
Hermes Agent e1a46621ea Merge remote-tracking branch 'origin/master' 2026-10-18 15:00:19 -04:00
Hermes Agent 0ef3a16fd9 fix(anywhere): upstream les correctifs faits en local sur le VPS
- gerbil-wg0-ensure.nix : supprime wg0 sans adresse avant le demarrage de gerbil, sinon plus aucun trafic ne passe dans le tunnel newt.
- vaultwarden-mcp commente : son secret vit dans secrets/tower.yml, illisible sur anywhere, ce qui cassait setupSecrets a chaque activation.
- zitadel/steps retire : le secret etait chiffre en type:int, refuse par sops-install-secrets ; l'instance est deja initialisee.
2026-10-18 15:00:14 -04:00
Hermes Agent aadebcc0fd feat(winnie): OIDC Zitadel en PKCE via un secret sops oidc_env
- secret oidc_env (secrets/winnie.yml, chiffre pour tower) materialise par le oneshot winnie-oidc-secret dans /var/lib/winnie/oidc.env, requis par winnie-backend (EnvironmentFile non optionnel)
- PKCE : pas de client_secret cote backend
- .sops.yaml : creation_rule pour secrets/winnie.yml
2026-10-17 16:56:17 -04:00
Hermes Agent 5cab1712a7 feat(newt): expose sonarr.marcpartensky.com derriere le SSO Pangolin
Ressource proxy-resources.sonarr -> 127.0.0.1:8006, healthcheck /ping, meme schema que radarr (proxy-resources + protocol, l'ancien schema que comprend le Pangolin du VPS). SSO actif et auth de l'appli coupee : sans SSO l'UI complete et l'API v3 seraient ouvertes a Internet.
2026-10-17 16:56:17 -04:00
Hermes Agent a41dd0b5ff fix(arr): supprime urlbase et coupe l'auth interne derriere le SSO Pangolin
- urlbase = "localhost" (recopie de l'exemple du module nixpkgs) faisait rediriger en 307 TOUT chemin hors base, /api/v3/... compris : les clients API locaux recevaient la page de login. Radarr, Sonarr et Readarr sont servis a la racine du domaine
- settings.auth.method = "External" : l'auth de l'appli ne filtre rien derriere le tunnel newt (les requetes distantes arrivent de 127.0.0.1, donc vues comme locales) et la porte reste le SSO Pangolin. Ni Radarr 6.x ni Sonarr 4.x n'ont d'OIDC natif (arrive dans Sonarr 5)
2026-10-17 16:56:17 -04:00
Hermes Agent 78e340cb91 fix(anywhere): saturation du disque du 12/10 (GC 14j + journald 500M)
Le 12/10/2026 le disque de 46 G est monte a 100 % : pangolin-pre-start a echoue en « No space left on device » et traefik/gerbil sont tombes en cascade (plus rien sur 80/443). --delete-older-than 30d laissait ~18 G de generations et journald montait a 4,1 G (10 % par defaut). 14 j et SystemMaxUse=500M laissent de la marge.
2026-10-17 16:56:17 -04:00
Hermes Agent 96d2e8f05a feat(anywhere): coupe le gateway hermes et cable home-manager marc
- services.hermes.enableAgent = false : le chat est inerte sur le VPS (aucun token Matrix/Discord, modele DirectSDK sans login claude) et tirait claude-code (unfree) dans le build. L'utilisateur hermes, sa cle SSH et le sudo nixos-rebuild restent : c'est par la que tower deploie en remote
- home-manager.users.marc : le profil marc (geminicommit, etc.) est installe sur le VPS
2026-10-17 16:56:17 -04:00
Hermes Agent 2363d673c0 chore(hermes): approbations de commandes en mode off (plus de validation humaine)
Politique du 13/10/2026 : le shell n'attend plus de validation avant d'executer. « off » est un bypass teste AVANT les branches cron / single_query / unattended, donc il coupe aussi les refus par defaut en contexte headless. Restent actifs malgre off : la blocklist hardline code-shippee et les regles approvals.deny (vides ici).
2026-10-17 16:56:15 -04:00
Hermes Agent a43e96d9b5 feat(hermes): option services.hermes.enableAgent (couper le gateway par hote)
Le module melangeait l'acces (utilisateur hermes, cle SSH, sudo nixos-rebuild, python3 systeme pour le probe SSH de Desktop, git safe.directory) et le gateway lui-meme : couper le chat sur un hote ou il est inerte retirait aussi le moyen de s'y connecter et d'y deployer. config passe en lib.mkMerge : le bloc acces s'applique toujours, le gateway (postgres, MCP, claude-code unfree, service hermes-agent) seulement si enableAgent.
2026-10-17 16:56:15 -04:00
Hermes Agent 2ece11d430 feat(llm-steamdeck): serveur llama.cpp Vulkan OpenAI-compatible (Steam Deck)
Module services.llm-steamdeck, desactive par defaut (enable a passer a true dans le profil deck, cf. README) : llama-server en Vulkan sur RADV, GGUF telecharge depuis Hugging Face au premier demarrage, web UI, limites memoire pour les 16 Go unifies. Importe par services/default.nix (donc inerte sur laptop/tower) et par profiles/deck.
2026-10-17 16:56:13 -04:00
Hermes Agent fac87cc291 feat(waydroid): conteneur cage-waydroid + client noVNC Android
- services/cage-waydroid : waydroid dans un cage HEADLESS, expose en VNC standard (wayvnc 5902, auth DES = le seul mode que macOS Screen Sharing negocie), plus un pont noVNC sur 127.0.0.1:6082
- root volontaire : waydroid-net.sh cree le bridge waydroid0 (CAP_NET_ADMIN) et la session waydroid est un SINGLETON global, c'est ce service qui la detient
- tower : virtualisation.waydroid.package = waydroid-nftables, le noyau n'a que nf_tables (le waydroid-net.sh standard sort en « iptables (legacy): can't initialize iptables table nat »)
- newt : ressource android.marcpartensky.com -> 127.0.0.1:6082 derriere le SSO Pangolin
2026-10-17 16:56:12 -04:00
Hermes Agent 8294a123a6 feat(kasmvnc): Chrome CDP visible pour Playwright MCP
- modules/nixos/kasmvnc-chrome-cdp.nix : lance un Chromium dans le desktop KasmVNC avec --remote-debugging-port=9222, profil persistant /home/marc/chrome-cdp-profile
- Le MCP Playwright s'y attache (--cdp-endpoint http://127.0.0.1:9222) : les actions d'automatisation se font dans CETTE fenetre, donc visibles en direct sur le bureau distant (8443 en LAN, kasm.marcpartensky.com)
- CDP reste sur 127.0.0.1 : un port CDP joignable donne le controle total du navigateur par quiconque l'atteint, donc jamais au LAN ni via Pangolin
- newt : healthcheck HTTP sur le vhost local 8288 (KasmVNC repond 200 sur "/" avec disableBasicAuth) ; sans lui la cible sortait du load-balancer
2026-10-17 16:56:10 -04:00
mazex 3e81a2b3b2 Merge branch 'master' of github.com:MarcPartensky/nixos 2026-10-11 21:48:13 -04:00
mazex 038fa010bb feat(deck): add systemd timer for nightly Steam downloads
Wakes the system daily at 01:55 to inhibit sleep for 5h35m,
allowing Steam downloads to complete while the system is asleep.
2026-10-11 21:47:55 -04:00
Hermes Agent 50df23c53c fix(kasmvnc): ExecStartPre purge les instances Xvnc orphelines + ConditionUser=marc
- ExecStartPre tue toute Xvnc sur le display configure puis purge lock et socket avant de demarrer (une session precedente orpheline tenait :20 apres un switch : « A VNC server is already running », exit 29, crash-loop). Le display est passe en ARGUMENT dans la meme commande : en liste, systemd executerait chaque element comme une commande separee.
- ConditionUser=marc : l'unite est installee dans /etc/systemd/user et hermes demarre aussi un user manager linger avec default.target actif ; sans ca il lançait une deuxieme instance sur :20 et son activation utilisateur echouait au switch (rc=4).
2026-10-11 20:07:45 -04:00
Hermes Agent f3e600a471 chore(home): retire warnings d'éval (gtk4, catppuccin, zsh.dotDir, pkgs.system, proton-vpn)
gtk.gtk4.theme = config.gtk.theme;            # GTK4 suit Catppuccin
catppuccin.autoEnable = true;                 # valeur explicite = enable
programs.zsh.dotDir = config.home.homeDirectory; # .zshrc dans ~
pkgs.system -> pkgs.stdenv.hostPlatform.system  # backtest, portfolio-optimizer, option-pricer
protonvpn-gui -> proton-vpn                    # renommé dans nixpkgs
2026-10-11 19:40:55 -04:00
Hermes Agent ce2b91fae4 fix(services): anki healthcheck explicite /health (la cible sortait du load-balancer) 2026-10-11 19:38:42 -04:00
Hermes Agent 35d79ccde9 fix(users): anki + addon MCP via le flake ankimcp/anki-mcp-server-addon
ankiAddons.anki-mcp-server n'existe pas dans nixpkgs, et l'appel à
withAddons sans parenthèses insérait une fonction dans home.packages.
2026-10-11 19:36:40 -04:00
Hermes Agent ca72d76cbd feat(winnie,newt): front Svelte 5 sur 8888 + ressource dioxus-frontend
- winnie-frontend : build Vite (app/dist) servi par static-web-server sur 8888, aligne avec la ressource Pangolin winnie-frontend (un desaccord = 502, port en cache cote newt)
- newt : nouvelle ressource dioxus-frontend (dioxus.marcpartensky.com)
2026-10-11 19:33:30 -04:00
Hermes Agent 0fac189847 fix(hermes,openrouter-mcp): default_model nemotron meme famille partout
La chaine de secours hermes passait de inkling:free a nemotron (meme modele, pas de basculement vers un modele different). openrouter-mcp ecrit aussi le default_model nemotron dans sa config.toml.
2026-10-11 19:33:23 -04:00
Hermes Agent a4cc76163b feat(hinge-auto): auto-like Hinge web (Playwright + Chromium, profil persistant)
Trois binaires dans le profil systeme, patron de services/amazon-mcp :
- hinge-auto-login    chromium visible (telephone + SMS), session persistee dans /var/lib/hermes/hinge-auto/user-data
- hinge-auto-like     boucle de likes headless sur Discover (HINGE_MAX_LIKES defaut 40, detection de fin de flux)
- hinge-auto-calibrate dump des boutons pour affiner les selecteurs

Profil partage hermes <-> marc via ACL tmpfiles. Garde-fous : limite ~8 likes/jour gratuite Hinge, arret sur marqueur de fin.
2026-10-11 19:33:17 -04:00
Hermes Agent 0973d87f41 feat(gotify): OIDC Zitadel + exposition loopback via newt sans SSO Pangolin
- Variables sans underscore (GOTIFY_OIDC_CLIENTID, ...) : les formes snake_case sont ignorees en silence par Gotify 3.x
- LISTENADDR 127.0.0.1 (exposition via newt/Pangolin uniquement), SSO Pangolin desactive : les clients natifs (appli Android, gotify-cli, scripts /message) ne suivent pas de redirection navigateur
- OIDC_LINK_BY_USERNAME + AUTOREGISTER : rattache l'identite Zitadel au compte local renomme
- after/wants newt + StartLimitIntervalSec=0 : le discovery OIDC 503 au boot si le tunnel n'est pas monte
2026-10-11 19:33:07 -04:00
Hermes Agent 841013bbd4 feat(tower): waydroid Android LineageOS en conteneur (test)
Noyau 6.18.54 avec ANDROID_BINDER_IPC/BINDERFS/MEMFD_CREATE : pas de module out-of-tree ni reboot. waydroid-container echoue proprement tant que 'waydroid init' n'a pas ete lance une fois (root, ~1,2 Go d'images).
2026-10-11 19:32:49 -04:00
Hermes Agent d8a993274f feat(kasmvnc): bureau distant Plasma 6 en X11 (startplasma-x11 + look-and-feel, disableBasicAuth)
KasmVNC etant un serveur X, Plasma tourne en session X11 (startplasma-x11) avec une arborescence de donnees isolee (plasmaDataEnv + plasmaConfigDir) exportee uniquement dans l'unite, sans toucher a la session niri locale de marc.

- desktop = "plasma" : xstartup startplasma-x11, look-and-feel org.hermes.kasm.desktop (konsole + LibreWolf epingues)
- disableBasicAuth : le SSO Pangolin gate deja kasm.marcpartensky.com, fin du double login kasmvncpasswd
- setxkbmap ajoute au PATH (kded6 configure les claviers via ce binaire)
2026-10-11 19:32:46 -04:00
Hermes Agent 9ec071dd67 fix(services): anki page de statut + proxy nginx (interface navigateur sur le domaine) 2026-10-09 17:59:00 -04:00
Hermes Agent 917ebe40d3 feat(services): serveur de sync Anki auto-hébergé (anki.marcpartensky.com) 2026-10-09 17:38:38 -04:00
Hermes Agent 727dd5ad31 chore(zitadel-mcp): versionner package-lock.json (cp dans le build npm) 2026-10-06 23:04:32 -04:00
Hermes Agent a4fc37ee93 fix(tower): wg-quick conditionnel (mkIf false) + overlay ankimcp + port 8080 + hermes journal-access 2026-10-06 21:42:36 -04:00
Hermes Agent 2c660d8b5d feat(zitadel-mcp): upstream npm zitadel-mcp-server 34 tools ; nginx-matrix + matrix-conduit modules 2026-10-06 21:42:11 -04:00
Hermes Agent 1ecafcba6a feat(users): anki + ssh deck/tower-rack alias ; secrets tower rotation 2026-10-06 21:42:11 -04:00
Hermes Agent cd78889870 feat(hermes): claude-code 2.1.223 -> manifest 2.1.280, model mappings (opus-5-5 / deepseek-v4.1-flash) + bridge url 2026-10-06 21:42:11 -04:00
Hermes Agent 667a76799b feat(services): healthchecks + noms de ressources alignes (audiobookshelf, gotify, jellyfin, radarr, gitea, hermes-*) 2026-10-06 21:42:04 -04:00
Hermes Agent 8fa2497391 chore(services): import defaults (matrix-marc-agent, winnie, openrouter, reactive-resume ; desactivation temp discord-hermes-bridge + zitadel-mcp) 2026-10-06 21:42:04 -04:00
Hermes Agent 3fb37e9ca5 feat(winnie+openrouter+reactive-resume): nouveaux services et flake inputs (ankimcp, reactive-resume, openrouter-mcp) 2026-10-06 21:41:54 -04:00
Hermes Agent 10ceeb3310 feat(deck): conduit + nginx-matrix (conduit remplace synapse) 2026-10-06 21:41:54 -04:00
Hermes Agent 2edce1cd20 feat(tower): remote-desktop (rustguac, kasmvnc, rustdesk) + acl 777 access journal
Rustguac : guacd en loopback (tls=false) + vhost guac.marcpartensky.com
(sans ACME, TLS par Pangolin). KasmVNC : display :20 (pas :1, session X
existe deja), desktop lxqt (lxqt-wayland refuse), mot de passe regeneré
par empreinte sops, auth HTTP 200/401 testee. Rustdesk : ports reels 1.1.16,
hbbs/hbbr corriges; nginx guac/kasm en loopback. Vault/rustguac secrets
lues par le bon user (vault, rustguac, marc) au lieu de root. WireGuard
client sur wg1 (10.100.0.3/32, endpoint VPS 104.129.12.158:443) desactive
tant que le secret sops wireguard/tower_private_key n'existe pas (evite
le blocage sops-nix sur tout le build). hermes.extraGroups += systemd-journal.
2026-10-06 21:41:47 -04:00
Hermes Agent 1ea50aa6ab feat(matrix): appservice marc-agent pour un token E2EE sur @marc
Stub HTTP + registration synapse + login unique. Registration sous
/var/lib/matrix-marc-agent-as (StateDirectory) : sous /var/lib/hermes/.matrix
(0700) synapse ne pouvait pas la lire, et ReadWritePaths sur un dossier absent
faisait echouer l'unite en 226/NAMESPACE, ce qui bloquait le switch.
2026-10-06 21:39:48 -04:00
Hermes Agent 3d2c987b96 fix(secrets): régénérer discord-hermes-bridge.yml (fichier illisible, MAC cassé)
sops-install-secrets échouait sur ce fichier ('Could not decrypt with
AES_GCM: cipher: message authentication failed'), ce qui bloquait TOUT
nixos-rebuild switch sur tower (pas seulement les services concernés).
Recréé avec une nouvelle valeur aléatoire pour les deux clés partagées
(hermes_discord_bridge_env, discord_bot_hermes_bridge_env) : secret
purement interne (loopback 127.0.0.1, jamais exposé), la rotation ne
casse rien côté consommateurs (discord-bot, hermes-discord-bridge, API
server par défaut) puisqu'ils relisent tous la même valeur au prochain
switch.
2026-09-29 19:49:09 -04:00