Updates the Kitty terminal configuration to use the Catppuccin Mocha color scheme.
This includes changes to background, foreground, cursor, selection, URL colors,
and adds the full set of ANSI color definitions.
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.
nginx sur 0.0.0.0:8092, root /var/lib/hermes-files (répertoire dédié : le
stateDir /var/lib/hermes est en 0770, nginx ne peut pas le traverser).
Autoindex, aucune auth : rien de sensible dedans, jamais routé via Pangolin.
- services/matrix : synapse 1.160, listener 127.0.0.1:8008, DB postgres,
registration_shared_secret généré (hermes ne peut pas poser de secret sops
root-only)
- matrix-discord/matrix-meta : ponts mautrix ; fix matrix-meta : synapse
rejoint le groupe mautrix-meta-registration (sinon il ne peut pas lire
meta-registration.yaml, tout le homeserver refuse de démarrer)
- matrix-dumps : dump périodique + clés pickle des ponts (déchiffrement megolm)
- matrix-hermes (mxc) : compte admin @hermes-admin auto-provisionné depuis le
registration_shared_secret, token utilisable par l'agent pour l'admin API
Synapse (fabriquer un token pour n'importe quel compte local)
Clé hermes@tower déclarée en authorizedKeys : sur hermes lui-même (accès aux
hôtes qui importent services/hermes), en root déclaratif sur anywhere (le
bloc était commenté), et compte système hermes complet + sudo NOPASSWD
nixos-rebuild sur deck (qui n'importe pas services/hermes).
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).
commonServiceConfig posait NoNewPrivileges=true sur hermes-agent.service et
hermes-backend.service : le noyau ignore alors le bit setuid, donc sudo/su
refusaient net dans toute session lancée depuis Matrix ou le terminal web,
rendant la règle NOPASSWD nixos-rebuild inopérante. mkForce false sur les deux
unités ; sudo reste borné à la liste de commandes déjà déclarée.
- défaut : claude-sonnet-5 (DirectSDK, abonnement Pro/Max) au lieu de DeepSeek
via OpenRouter ; consomme le quota à chaque message, surveiller l'usure
- fallback_providers réordonné : gratuits OpenRouter (inkling, nemotron ultra)
puis DeepSeek Flash en tout dernier recours (payant mais bon marché)
- agent.reasoning_overrides : le niveau de reasoning suit le modèle actif
(DeepSeek Flash/Sonnet 5 -> high, Opus 5 -> max)
- settings.platforms.matrix.channel_overrides : 3 salons épinglés sur Opus 5
ou Sonnet 5 (abonnement), le reste reste sur le défaut
package.python.pkgs suit désormais la famille python du venv (nix/pythonLock.nix,
3.14) au lieu de la nixpkgs figée du flake hermes-agent (hermesPkgs, 3.12) qui
filtrait silencieusement les paquets. Ajoute extraDependencyGroups = matrix +
edge-tts (résolus par uv dans le venv scellé, préparant le bot Matrix et le TTS
Edge).
Add mautrix-linkedin, mautrix-meta (Instagram, Messenger), and mautrix-telegram (initial setup).
Enable E2EE by default for mautrix-discord and mautrix-signal, ensuring stable pickle_key generation.
Update matrix-synapse dependencies for new bridges.
Deuxième voie d'accès VNC, indépendante de la session niri :
backend headless de wlroots, donc aucun besoin de vkms ni d'écran branché,
et rien qui touche la session locale. Service system, démarre au boot sans
login. Exposé en noVNC sur 6081, wayvnc reste sur loopback 5901.
Points de mise au point validés au banc d'essai :
- la sortie headless n'annonce que 1280x720 mais accepte tout via
wlr-randr --custom-mode, posé AVANT wayvnc qui fige la taille à sa connexion
- cage démarre son propre XWayland, une appli X11 marche aussi
- firefox exige que le dossier de profil existe déjà, sinon Profile Missing
- profil dédié dans /var/lib/cage-firefox/profile, séparé de celui de marc
Introduces a dedicated PostgreSQL database and schema for music data,
including playlists, tracks, and various analytical views. This service
is designed for importing Spotify playlists into YouTube Music.
Updates the codeberg-mcp dependency hash to SRI format. Refactors
home-manager package names for prettier and neovim-node-client.
VKMS expose une liste de modes dont 1920x1080, donc pas de mode custom :
on déclare le mode de la sortie Virtual-1 via programs.niri.settings.outputs.
Niri relit sa config à chaud, un just home suffit, pas de relogin.
Résolution paramétrable par virtualWidth / virtualHeight en tête du module.
Update nixpkgs and nix-darwin to 26.05.
Enable vkms kernel module for the tower profile to provide a virtual display.
Configure mautrix-signal and mautrix-discord services.
Update matrix-synapse dependencies to wait for new bridges.
services.hermes-agent.extraPackages était défini une fois pour claude-code et une
seconde fois pour nodejs_22 (MCP GitHub), ce qui cassait l'évaluation de
nixosConfigurations.tower : "attribute 'services.hermes-agent.extraPackages'
already defined". Les deux paquets sont maintenant dans une seule liste.
Un input "path:" relatif laisse un noeud non verrouillé dans flake.lock, que les
nix anciens (<= 2.20) refusent ("lock file contains mutable lock") : c'est ce qui
cassait `just mac` sur le Mac. Le sous-flake ./protonmail-mcp est maintenant appelé
directement (import de son flake.nix, inputs passés explicitement) et sa dépendance
externe proton-mail-bridge-client devient un input github normal, donc verrouillé.
Même rev qu'avant (811be5d) : aucun changement de version du paquet.
Integrates new Model Context Protocol (MCP) servers for Codeberg and GitHub.
The Codeberg MCP server is a new service definition.
The GitHub MCP server is added to the Hermes agent configuration and requires
Node.js 22 as an extra package for `npx`.
Refactors the wayvnc startup mechanism. It is now launched directly by niri
using `spawn-at-startup` instead of a systemd user service. This change
resolves an issue where wayvnc could not find the Wayland display due to
missing `WAYLAND_DISPLAY` in the systemd service environment.
Configure websockify to listen on 0.0.0.0:6080 and open port 6080 in the firewall,
allowing direct LAN access to the noVNC web client. Update access documentation.
Switch the default AI model for Hermes from Claude Sonnet to DeepSeek V4.1 Flash
(OpenRouter) and adjust the fallback provider chain.
Integrates noVNC with websockify to provide a web-based VNC client
for wayvnc, accessible via SSH tunnel on port 6080.
Adds a new Headscale ACL policy for the personal tailnet, enabling
full mesh connectivity between all nodes on all ports.
Set kernel panic to reboot after 10 seconds.
Enable systemd watchdog for automatic reboot on freeze.
Add ZFS root key to initrd secrets.
Enable the Roku service.
This introduces a new `hermes-agent` MCP server for Roku TVs, allowing control over key presses, brightness, app launching, and status queries via the Roku ECP API.
- input hermes-agent 0.21.2 -> 0.21.4 (requis par le plugin directsdk)
- claude-code 2.1.223 : extraPackages du service + systemPackages
- provider par défaut : claude-subscription-directsdk-experimental (claude-sonnet-5)
- vision auxiliaire épinglée sur kimi pour préserver le quota Claude Pro
Integrates the `duaragha/amazon-shopping-mcp` server.
Uses Playwright/Chromium for Amazon interactions.
Configured as a `hermes-agent` subprocess.
Includes `amazon-mcp-login` helper for manual session setup.
Introduces the Matrix homeserver (Synapse) and the mautrix-whatsapp bridge.
Configures Synapse with PostgreSQL, including specific collation requirements.
Sets up secret generation for both services and manages their startup order.
The `nextcloud-setup` service now forces a re-run and executes `occ upgrade` to ensure all app tables are created. This resolves 500 errors for CalDAV due to missing calendar tables.
Also, temporarily disable the `kanidm` service and re-encrypt the `hermes_env` secret.
The container needs to access Nextcloud on the host's 127.0.0.1.
Without host networking, 127.0.0.1 inside the container does not point
to the host, leading to Nextcloud 400 errors due to trusted_domains.