refactor(herdr): config posée par home-manager, HM de marc activée sur tower

herdr n'a ni option NixOS ni module home-manager dans l'input épinglé : sa config
(sidebar qui affiche le modèle hermes de chaque pane) passe par xdg.configFile dans
modules/home/herdr, importé par users/marc/home.nix. force = true car le premier
switch remplace le symlink posé avant par systemd.tmpfiles, que check-link-targets
ne reconnaît pas comme un fichier home-manager-files (activation en status 1 sinon).

tower active home-manager.users.marc = users/marc/home.nix, le même profil que
`HM=marc just home` : herdr et le reste des dotfiles arrivent avec `just nixos`.
backupFileExtension = hm-backup pour la première bascule. Entre `just nixos` et
`just home`, c'est le dernier switch qui écrit les liens.
This commit is contained in:
Hermes Agent
2026-09-27 13:00:55 -04:00
parent c47f60a129
commit 3c05597360
5 changed files with 67 additions and 35 deletions
@@ -1,6 +1,8 @@
# Config herdr (multiplexeur d'agents, github:ogulcancelik/herdr).
# But : voir le modele Hermes de chaque pane dans la sidebar, sans rien taper.
# Declaree dans modules/home/herdr/default.nix (xdg.configFile), donc posee par
# home-manager : ne pas editer ~/.config/herdr/config.toml a la main.
#
# But : voir le modele Hermes de chaque pane dans la sidebar, sans rien taper.
# Principe : le TUI hermes ecrit son titre OSC sous la forme
# <etat> <session> . <modele> . <cwd> (⚠ bloqué, ⏳ travaille, ✓ idle)
# herdr lit ce titre (il s'en sert deja pour l'etat blocked/working/done, cf
+29
View File
@@ -0,0 +1,29 @@
{
config,
lib,
...
}: {
# --- herdr : config de marc, posee par home-manager ---
# herdr (multiplexeur d'agents, github:ogulcancelik/herdr) n'a pas d'option
# NixOS et le module `programs.herdr` n'existe pas encore dans le
# home-manager epingle (verifie : pas de modules/programs/herdr.nix dans
# l'input), donc le fichier est declare ici et pose par xdg.configFile.
#
# Contenu : voir modules/home/herdr/config.toml (rows de sidebar qui
# affichent le modele hermes de chaque pane, via le titre OSC ecrit par le
# TUI ; cote hermes, cela suppose display.interface = "tui", cf
# services/hermes/default.nix).
#
# Application a chaud apres un switch : `herdr server reload-config`
# (ou menu global -> reload config). Un client deja lance garde son ancienne
# config jusqu'au reload.
# `force = true` : la 1re activation du HM systeme bute sinon sur l'ancien
# symlink /home/marc/.config/herdr/config.toml laisse par la version
# systemd.tmpfiles (il ne ressemble pas a un fichier home-manager-files, donc
# check-link-targets le declare "would be clobbered" et l'activation echoue
# en status=1). force saute ce controle et remplace le lien.
xdg.configFile."herdr/config.toml" = {
force = true;
text = builtins.readFile ./config.toml;
};
}
-26
View File
@@ -1,26 +0,0 @@
{
config,
pkgs,
lib,
...
}: {
# --- herdr : config de marc posee par le systeme ---
# herdr (multiplexeur d'agents) n'a pas d'option NixOS ; sa config vit dans
# ~/.config/herdr/config.toml et sert a afficher le MODELE hermes de chaque
# pane dans la sidebar (cf modules/nixos/herdr/config.toml).
#
# Marc est en home-manager STANDALONE (users/marc/home.nix, `HM=marc just home`,
# que hermes n'active pas) : on pose donc le fichier cote systeme, sous forme de
# symlink vers le store, exactement ce que ferait xdg.configFile. Un `just nixos`
# suffit, sans attendre une generation home-manager.
# (Le module home-manager `programs.herdr` n'existe pas dans le home-manager
# epingle : xdg.configFile serait la seule alternative, meme mecanisme.)
#
# Effet a chaud : `herdr server reload-config` (ou relance du client). Le fichier
# est en lecture seule (store) : une edition manuelle de ~/.config/herdr/config.toml
# ne tient pas, c'est ce fichier-ci qui fait foi.
systemd.tmpfiles.rules = [
"d /home/marc/.config/herdr 0755 marc users -"
"L+ /home/marc/.config/herdr/config.toml - - - - ${./config.toml}"
];
}
+33 -7
View File
@@ -7,15 +7,26 @@
imports = [
../../hosts/tower/disko.nix
../../hosts/laptop/hardware-configuration.nix
# config herdr de marc (~/.config/herdr/config.toml) : affiche le modele
# hermes de chaque pane dans la sidebar. Voir modules/nixos/herdr/.
../../modules/nixos/herdr
];
boot.kernelParams = ["panic=10"]; # reboot 10 s après un kernel panic, le dump reste dans pstore
systemd.settings.Manager.RuntimeWatchdogSec = "30s"; # reboot si la machine gèle (si `sudo wdctl` trouve un watchdog)
# vkms = écran virtuel. Sans écran branché (DP-1/DP-2/HDMI-A-1 en disconnected sur
# le Renoir), niri n'a AUCUNE sortie vidéo : wayvnc sort en "No output found" et
# Profil home-manager de marc pilote par le SYSTEME sur tower : `just nixos`
# active ses dotfiles, dont ~/.config/herdr/config.toml (modules/home/herdr)
# qui fait afficher le modele hermes de chaque pane dans la sidebar herdr.
# Meme fichier que `HM=marc just home` : ne plus melanger les deux ici, le
# dernier switch ecrit les liens. Scope tower volontairement (le laptop n'est
# pas activable depuis ici) ; deplacer dans profiles/common pour l'etendre.
home-manager.users.marc = ../../users/marc/home.nix;
# 1re bascule standalone -> HM systeme : les fichiers presents qui ne sont pas
# des liens home-manager-files (ex. ancien symlink systemd.tmpfiles) sont
# deplaces en .hm-backup au lieu de faire echouer l'activation
# (check-link-targets sort sinon en exit 1).
home-manager.backupFileExtension = "hm-backup";
# Sessions hermes lancees par marc (panes herdr, HERMES_HOME partage, cf
# users/marc/home.nix) : elles ecrivent dans /var/lib/hermes/.hermes. Le
# groupe hermes (users.nix) plus les chmod g+rw du module hermes couvrent
# l'existant ; ces ACL garantissent la traversee de /var/lib/hermes (2770) et
# que les fichiers crees par marc restent lisiblc sort en "No output found" et
# il n'y a rien à afficher en VNC. vkms crée une sortie virtuelle que niri adopte.
boot.kernelModules = ["vkms"];
# boot.initrd.clevis.enable = true;
@@ -35,6 +46,21 @@
];
};
# Clé ed25519 du Mac de marc : connexion Hermes Desktop de type SSH
# (user@host = hermes@tower, auth par clé, pas de mot de passe).
# Déclaratif exprès : /var/lib/hermes est en 2770 (écriture groupe, requis par
# le partage hermes/marc) et sshd (StrictModes, cf services/hermes) ignore
# alors %h/.ssh/authorized_keys. Cette option écrit /etc/ssh/authorized_keys.d/
# hermes en root 444, qui passe le contrôle, et survit aux rebuilds.
users.users.hermes.openssh.authorizedKeys.keys = lib.mkAfter [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMdX5m7b8xWL/9ZUeFRxahB4YY0v2rAV5CCFv8xTOlUh marc@Air-de-Marc"
];
networking.hostName = "tower";
sops.defaultSopsFile = lib.mkForce ../../secrets/tower.yml;
# Token Matrix du bot @hermes : seul tower est destinataire du fichier sops
# (secrets/hermes-matrix.yml). Les autres hôtes qui importent services/hermes
# (laptop, anywhere) ne doivent PAS le déclarer. Voir services/hermes.
services.hermes.enableMatrixToken = true;
}
+2 -1
View File
@@ -66,6 +66,7 @@
../../modules/home/yt-collate
../../modules/home/youtube-music-cli
../../modules/home/geminicommit
../../modules/home/herdr
../../modules/home/backtest
../../modules/home/portfolio-optimizer
@@ -90,7 +91,7 @@
home.sessionVariables = {
EDITOR = "nvim";
VISUAL = "nvim";
GSETTINGS_SCHEMA_DIR = "${pkgs.gsettings-desktop-schemas}/share/gsettings-schemas/${pkgs.gsettings-desktop-schemas.name}";
GSETTINGS_SCHEMA_DIR = "${pkgs.gsettings-desktop-schemas}/share/gsettings-schemas/${pkgs.gsettings-desktop-schemas.name}";
DEFAULT_BROWSER = "${inputs.zen-browser.packages.${pkgs.stdenv.hostPlatform.system}.default}/bin/zen";
BROWSER = "${inputs.zen-browser.packages.${pkgs.stdenv.hostPlatform.system}.default}/bin/zen";
ELECTRON_OZONE_PLATFORM_HINT = "wayland";