secrets/switch-keys.yml (prod.keys d'Eden sur le deck, posees dans le home de marc) et secrets/headscale.yml (preauth_key reutilisable, consommee par services/tailscale sur tower, le deck et le VPS). Regles de creation sops associees dans .sops.yaml.
Module services/ygg-mesh : Yggdrasil en réseau privé (mot de passe partagé,
clés publiques épinglées), liens Tor via une instance tor dédiée (onion
service par machine) et lien direct multicast prioritaire sur le LAN.
Chaque machine garde une adresse IPv6 stable et un nom <host>.ygg.
Secret dans secrets/ygg-mesh.yml (règle .sops.yaml dédiée) ; config rendue
à chaud au démarrage (ExecStartPre + credential systemd), le mot de passe
ne touche jamais le store. Identités et clés dans la table `nodes`.
- 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
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.
Gateway hermes-agent dédié (profil discord-bridge) sur 127.0.0.1:8643, API Server
OpenAI-compatible consommée par le cog hermes.py du discord-bot. Unité systemd écrite à
la main (le module NixOS ne gère pas d'instances) et même paquet que le bot Matrix,
donc mêmes groupes de deps (edge-tts, stt-whisper).
Clé d'API dans secrets/discord-hermes-bridge.yml, port jamais ouvert au firewall
(assertion). Côté discord-bot, HERMES_BRIDGE_URL et le nom de rôle viennent d'un
EnvironmentFile, seule la clé est secrète.
Instance gitea sur tower avec base postgres (rôle gitea en peer auth), compte admin
créé une seule fois par un oneshot idempotent avec le mot de passe de
secrets/gitea.yml (sops). Exposition gitea.marcpartensky.com via newt/Pangolin, et
assertion pour que le port HTTP local reste fermé.
Backend hermes-agent en mode dashboard (9120) + nginx host-rewrite (9121),
ressource newt terminal.marcpartensky.com. Ports jamais ouverts au firewall :
/api/pty est un shell.
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).
Adds a new age key for the 'deck' machine to the sops configuration.
Re-encrypts common secrets to include the new recipient.
Also updates .gitignore to ignore all 'result*' files.
Adds a new age key for the laptop to `.sops.yaml` and re-encrypts secrets.
Configures Nextcloud to retrieve credentials via SOPS and use a PostgreSQL Unix socket.
Removes Minio object storage configuration from Nextcloud.
Temporarily disables the dnscrypt service.