Commit Graph
1026 Commits
Author SHA1 Message Date
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
Hermes Agent 9180562410 fix(nextcloud): retirer password.txt (mdp en clair, repo public) + rotation forcée
services/nextcloud/password.txt était committé en clair ("nextcloudpassword")
depuis le 25/11/2025, jamais référencé dans la config, exposé publiquement
sur github/codeberg depuis. Supprimé.

adminpassFile ne fixe le mot de passe QUE lors de l'install initiale (occ
maintenance:install) : sur une instance déjà installée il est ignoré, donc
juste changer le secret sops n'aurait pas suffi. Ajout d'un ExecStartPost
sur nextcloud-setup qui force le mot de passe du compte root à la valeur
sops à chaque activation (self-healing).

Vérifié sur tower : ancien mot de passe "nextcloudpassword" -> 401 après
le switch, hash oc_users.password changé.
2026-09-29 19:49:09 -04:00
Hermes Agent 605c355d3a wip(remote-desktop): scaffold gateway rustguac + kasmvnc + rustdesk + vault (dev)
Modules NixOS pour une gateway d'accès distant multi-protocole : rustguac
(remplacement Guacamole, OIDC, audit, enregistrement), kasmvnc (bureau
Wayland LXQt), rustdesk (relais P2P hbbs/hbbr), vault-rustguac (Vault en
mode dev pour stocker les identifiants de connexion des deux premiers),
plus les vhosts nginx associés.

Importés dans services/default.nix mais NON activés sur aucun profil
(enable reste false partout) : domaines (guac.example.com, auth.example.com),
token Vault dev et secret OIDC sont encore des placeholders TODO dans les
modules, à finir avant tout services.*.enable = true.
2026-09-27 23:59:36 -04:00
Hermes Agent 79032ac0ab docs(readme): traduire le README en anglais 2026-09-27 23:59:36 -04:00
Hermes Agent bfd1a3c865 fix(hermes): pointer hermes_api_server_env sur la clé réelle du secret (hermes_discord_bridge_env)
Le fichier secrets/discord-hermes-bridge.yml n'a pas (encore) été rekeyé côté
sops (hermes ne peut pas déchiffrer/réécrire un secret existant : pas de clé
age privée). Utilise key= pour lire la clé qui existe réellement, TODO pour
marc de renommer proprement plus tard.

Trouvé en testant le build réel (nixos-rebuild build) : sops-install-secrets
échouait avec 'the key hermes_api_server_env cannot be found'.
2026-09-27 21:27:18 -04:00
Hermes Agent a2e20bc376 chore(secrets): rotation admin_password gitea 2026-09-27 21:24:55 -04:00
Hermes Agent 97fe5aa462 chore(secrets): secret hermes-discord.yml (token bot Discord natif hermes) 2026-09-27 21:24:55 -04:00
Hermes Agent 40f0b407a8 feat(hermes): plugin desktop vim-bindings (déclaratif, désactivé)
tmpfiles crée le dossier /var/lib/hermes/.hermes/desktop-plugins/vim-bindings ;
le service qui l'active est commenté (heredoc JS mal géré par nix pour le moment).
2026-09-27 21:24:44 -04:00