Compare commits

9 Commits
Author SHA1 Message Date
Pierre MartinandSans.pub c4676f88e4 Activer SSH (1987) et mosh
mosh s'établit d'abord en SSH (TCP 1987) puis bascule en UDP
60000-61000, plage fixe imposée par mosh, non paramétrable.

Le mot de passe de session reste utilisable (PasswordAuthentication
par défaut à true), pratique sur le réseau local.

*Rédaction assistée par IA (Gemini 3 Pro)*

Co-Authored-By: Gemini 3 Pro
2026-10-30 08:16:58 +01:00
Pierre MartinandSans.pub ecf42da629 Plafonner la taille du journal systemd à 500 Mo
Le journal occupait 470 M et ne pouvait que croître. Un plafond évite
la croissance, même s'il ne libère rien immédiatement : c'est
journalctl --vacuum-size qui vide l'existant.

services.journald.extraConfig est supprimée dans nixpkgs 26.11
(mkRemovedOptionModule dans nixos/modules/system/boot/systemd/journald.nix),
d'où le recours à services.journald.settings.Journal, aligné sur le
bloc systemd.coredump du même fichier.

*Rédaction assistée par IA (LM-Code)*

Co-Authored-By: LM-Code
2026-10-30 08:16:58 +01:00
Pierre MartinandSans.pub ad123cd12c Libérer de l'espace disque Nix automatiquement
Le store Nix pesait 115 G sur un disque rempli à 94 %. Trois leviers :

- Supprimer keep-outputs / keep-derivations : ces options retenaient les
  .drv et leurs inputs de build dans le store, ce qui annulait une grande
  partie du garbage collection. Les environnements direnv ne risquent
  rien : nix-direnv crée un gcroot par projet (_nix_add_gcroot), et un
  chemin protégé n'est jamais purgé.
- activer auto-optimise-store : déduplique le store par hardlinks, ce qui
  vise les 26 G occupés par /nix/store/.links (fichiers dupliqués).
- programmer un garbage collection hebdomadaire, qui supprime les
  générations de plus de 14 jours.

`make gc` est aligné sur la même politique de rétention, au lieu de
purger toutes les générations système, ce qui rendait tout rollback
impossible.

*Rédaction assistée par IA (LM-Code)*

Co-Authored-By: LM-Code
2026-10-30 08:16:58 +01:00
Pierre Martin 3bbc04c1c8 suppression vmux 2026-10-30 08:16:58 +01:00
Pierre MartinandClaude Opus 5 42f9c76675 chore(secrets): sort files/.npmrc du versionné
files/.npmrc contient des jetons npm en clair (GitLab Blackswift et
Lundi Matin). Retiré de l'index git et ajouté à .gitignore, comme
files/.aider.conf.yml.

Le fichier reste sur disque : home.nix:41 (home.file.".npmrc".source)
et `make apply` continuent de fonctionner. Attention : les jetons sont
toujours dans l'historique git ; si le dépôt est partagé publiquement,
il faut les révoquer côté GitLab.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-10-30 08:16:58 +01:00
Pierre MartinandClaude Opus 5 7048bef534 docs(dotfiles): aligne la doc sur make apply
La section « Appliquer les changements » de CLAUDE.md citait
`sudo nixos-rebuild switch` en direct alors que le Makefile expose
`make apply`. On pointe la cible make pour que la doc reste alignée
avec les commandes réellement utilisées.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-10-30 08:16:58 +01:00
Pierre MartinandClaude Opus 5 ffd3f77322 docs(ai): documente la source de vérité des modèles
Note en tête du bloc passerele : interroger GET /v1/model/info
avant toute bascule/édition de modèles, avec la commande jq prête à
l'emploi. Motivé par l'écart constaté le 28/09/2026 (qwen3.8-flash-next
annoncé en 64k out, réel 32 768) : les annonces internes ne suffisent
pas, seule la passerelle fait foi.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-10-30 08:16:58 +01:00
Pierre MartinandClaude Opus 5 9aee9fb349 chore(ai): bascule LM-Code vers Mimo Pro 2.6
LM-Code route désormais vers mimo-v2.6-pro (remplace GLM 5.3,
annoncé plus rapide à qualité équivalente). L'alias LM-Code est
stable : lmc() (zsh.nix) n'a rien à changer.

Vérifié le 28/09/2026 sur la passerelle (/v1/model/info et tests
/v1/messages) :
- contexte 500k et 128k out inchangés, désormais confirmés côté
  passerelle et non plus seulement annoncés
- vision fonctionnelle sous Mimo
- blocs thinking toujours sans signature : allowEmptySignature requis

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-10-30 08:16:58 +01:00
Pierre MartinandClaude Opus 5 6c0f4c8882 fix(ai): plafonne qwen3.8-flash-next en 32k out
Le models.json déclarait 64k puis 128k en maxTokens pour
qwen3.8-flash-next, alors que la passerelle LiteLLM plafonne à
32 768 (max_output_tokens sur /v1/model/info, vérifié 28/09/2026).
Risque d'erreur 400 en fin de réponse longue.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-10-30 08:16:58 +01:00
7 changed files with 58 additions and 35 deletions
+2
View File
@@ -1,5 +1,7 @@
# Secrets # Secrets
files/.aider.conf.yml files/.aider.conf.yml
# Jetons npm en clair (GitLab Blackswift / Lundi Matin)
files/.npmrc
*.conf *.conf
# Nix # Nix
+1 -1
View File
@@ -32,7 +32,7 @@ Formatter Nix : `nixfmt`.
Après modification des fichiers nix, appliquer avec : Après modification des fichiers nix, appliquer avec :
```bash ```bash
sudo nixos-rebuild switch make apply # = sudo nixos-rebuild switch
``` ```
Cette commande applique à la fois la config système (`nixos/`) et home-manager (`home.nix`, `packages.nix`, `programs/`). Un redémarrage n'est pas nécessaire sauf changement kernel/bootloader. Cette commande applique à la fois la config système (`nixos/`) et home-manager (`home.nix`, `packages.nix`, `programs/`). Un redémarrage n'est pas nécessaire sauf changement kernel/bootloader.
+2 -1
View File
@@ -37,6 +37,7 @@ update:
$(MAKE) gc $(MAKE) gc
# Nettoyage Nix (générations > 14 jours + garbage collect) # Nettoyage Nix (générations > 14 jours + garbage collect)
# Même politique que nix.gc.automatic dans nixos/configuration.nix.
gc: gc:
@echo "=== Générations utilisateur ===" @echo "=== Générations utilisateur ==="
nix-env --list-generations nix-env --list-generations
@@ -51,7 +52,7 @@ gc:
sudo nix-env --delete-generations 14d --profile /nix/var/nix/profiles/system sudo nix-env --delete-generations 14d --profile /nix/var/nix/profiles/system
@echo "" @echo ""
@echo "=== Garbage collection ===" @echo "=== Garbage collection ==="
sudo nix-collect-garbage sudo nix-collect-garbage --delete-older-than 14d
@echo "" @echo ""
@echo "=== Espace disque /nix/store ===" @echo "=== Espace disque /nix/store ==="
du -sh /nix/store du -sh /nix/store
-1
View File
@@ -1 +0,0 @@
prefix = ${HOME}/.npm
+26 -9
View File
@@ -29,7 +29,7 @@
# Enable networking # Enable networking
networking.networkmanager.enable = true; networking.networkmanager.enable = true;
networking.extraHosts = "109.238.11.111 nuage-v1.une-frouzins.fr"; networking.extraHosts = "";
# Wildcard *.dev.local → 127.0.0.1, requis par gezy-local (Traefik route les # Wildcard *.dev.local → 127.0.0.1, requis par gezy-local (Traefik route les
# sous-domaines clients). systemd-resolved ne sait pas répondre en wildcard : # sous-domaines clients). systemd-resolved ne sait pas répondre en wildcard :
@@ -125,6 +125,9 @@
]; ];
virtualisation.docker.enable = true; virtualisation.docker.enable = true;
# Conteneurs rootless (Yuto tourne dans Podman, cf. INSTALL-PODMAN.txt)
virtualisation.podman.enable = true;
# Some programs need SUID wrappers, can be configured further or are # Some programs need SUID wrappers, can be configured further or are
# started in user sessions. # started in user sessions.
# programs.mtr.enable = true; # programs.mtr.enable = true;
@@ -197,24 +200,38 @@
}; };
}; };
# Enable the OpenSSH daemon. services.journald.settings.Journal = {
# services.openssh.enable = true; SystemMaxUse = "500M";
};
# Accès distant SSH + mosh (session interactive résistante aux coupures réseau).
# mosh s'établit d'abord en SSH (TCP 1987) puis bascule en UDP 60000-61000.
services.openssh = {
enable = true;
ports = [ 1987 ];
openFirewall = true;
};
programs.mosh.enable = true; # ouvre UDP 60000-61000
# Open ports in the firewall. # Open ports in the firewall.
# Ports: 9003 - Xdebug # Ports: 9003 - Xdebug, 1987 - SSH (mosh), 60000-61000 - mosh UDP
networking.firewall.allowedTCPPorts = [ 9003 ]; networking.firewall.allowedTCPPorts = [ 9003 ];
networking.firewall.allowedUDPPorts = [ 9003 ]; networking.firewall.allowedUDPPorts = [ 9003 ];
# Or disable the firewall altogether. # Or disable the firewall altogether.
# networking.firewall.enable = false; # networking.firewall.enable = false;
# https://github.com/nix-community/nix-direnv/
nix.extraOptions = ''
keep-outputs = true
keep-derivations = true
'';
nix.settings.extra-experimental-features = [ nix.settings.extra-experimental-features = [
"nix-command" "nix-command"
"flakes" "flakes"
]; ];
nix.settings.auto-optimise-store = true;
# Les environnements direnv sont protégés par leurs propres gcroots
# (nix-direnv "_nix_add_gcroot"), inutile de garder outputs/derivations.
nix.gc = {
automatic = true;
dates = "weekly";
options = "--delete-older-than 14d";
};
# Cache binaire de https://github.com/lukasl-dev/pi.nix (cf. programs/pi.nix) # Cache binaire de https://github.com/lukasl-dev/pi.nix (cf. programs/pi.nix)
nix.settings.extra-substituters = [ "https://pi.cachix.org" ]; nix.settings.extra-substituters = [ "https://pi.cachix.org" ];
-10
View File
@@ -87,16 +87,6 @@
{ {
statusCommand = "i3status"; statusCommand = "i3status";
} }
{
id = "vmux";
position = "top";
statusCommand = "/home/pierre/Code/vibe/vmux/vmux i3bar";
workspaceButtons = false;
trayOutput = "none";
colors = {
background = "#0d0d0d";
};
}
]; ];
startup = [ startup = [
+27 -13
View File
@@ -11,9 +11,21 @@ let
# Mise à jour : remplacer le rev par le dernier de https://github.com/lukasl-dev/pi.nix # Mise à jour : remplacer le rev par le dernier de https://github.com/lukasl-dev/pi.nix
pi = builtins.getFlake "github:lukasl-dev/pi.nix/1d37b58675b763ae6c9dc05d62321109066a4126"; pi = builtins.getFlake "github:lukasl-dev/pi.nix/1d37b58675b763ae6c9dc05d62321109066a4126";
# Source de vérité des limites modèles : GET /v1/model/info sur la passerelle
# (donne le moteur derrière chaque alias, max_input_tokens et
# max_output_tokens réels). À interroger AVANT toute bascule ou édition de
# modèles : les annonces internes ne sont pas toujours exactes — le
# 28/09/2026, qwen3.8-flash-next était annoncé en 64k out alors que la
# passerelle plafonne à 32 768. Le champ `description` donne aussi le moteur
# derrière l'alias et la date de bascule.
#
# curl -s https://llm-core.lundimatin.app/v1/model/info \
# -H "Authorization: Bearer $(cat ~/.config/lmc-token)" \
# | jq -r '.data[] | {model_name, model: .litellm_params.model, in: .model_info.max_input_tokens, out: .model_info.max_output_tokens, desc: .model_info.description}'
#
# Passerelle LLM interne Lundi Matin (LiteLLM), même endpoint et même jeton # Passerelle LLM interne Lundi Matin (LiteLLM), même endpoint et même jeton
# que la fonction zsh `lmc`. Côté serveur, LM-Code route vers glm-5.3 servi # que la fonction zsh `lmc`. Côté serveur, LM-Code route vers Mimo Pro 2.6
# 24h/24 depuis le 07/09/2026 (fin de la rotation jour GLM / nuit Kimi). # depuis le 28/09/2026 (remplace GLM 5.3 : plus rapide, qualité équivalente).
# Consigne équipe IA Lundi Matin (07/09/2026) : viser 100-300k de contexte # Consigne équipe IA Lundi Matin (07/09/2026) : viser 100-300k de contexte
# par session et limiter le nombre d'agents en période de pic — le KV cache # par session et limiter le nombre d'agents en période de pic — le KV cache
# GLM 5.3 est la ressource rare. Ne pas tester la limite à 500k. # GLM 5.3 est la ressource rare. Ne pas tester la limite à 500k.
@@ -33,23 +45,22 @@ let
models = [ models = [
{ {
id = "LM-Code"; id = "LM-Code";
name = "LM-Code (glm-5.3 — Lundi Matin)"; name = "LM-Code (Mimo Pro 2.6 — Lundi Matin)";
# Même comportement que qwen3.8-flash-next : envoyer le paramètre # Même comportement que qwen3.8-flash-next : envoyer le paramètre
# `thinking` supprime le bloc thinking côté passerelle (testé # `thinking` supprime le bloc thinking côté passerelle. reasoning =
# 07/09/2026). reasoning = false laisse pi ne pas l'envoyer : le # false laisse pi ne pas l'envoyer : le modèle raisonne nativement et
# modèle raisonne nativement et émet des blocs thinking à signature # émet des blocs thinking à signature vide (re-testé 28/09/2026 sous
# vide, gérés par compat.allowEmptySignature du provider. # Mimo), gérés par compat.allowEmptySignature du provider.
reasoning = false; reasoning = false;
# Vision validée via l'endpoint anthropic /v1/messages (07/09/2026). # Vision re-validée sous Mimo via l'endpoint anthropic /v1/messages
# (28/09/2026).
input = [ input = [
"text" "text"
"image" "image"
]; ];
# 500k annoncés côté Lundi Matin (07/09/2026), non re-testés pour # Confirmés le 28/09/2026 sur /v1/model/info (max_input_tokens et
# ne pas charger le KV cache. # max_output_tokens de la passerelle), sans charge de test dédiée.
contextWindow = 500000; contextWindow = 500000;
# Annonce LM : « tous en 128k out » (07/09/2026) ; 128k testé OK.
# 256k est aussi accepté par la passerelle mais non retenu.
maxTokens = 128000; maxTokens = 128000;
} }
{ {
@@ -68,8 +79,11 @@ let
# Repli serveur de LM-Code, mais 262k de contexte : pas un vrai # Repli serveur de LM-Code, mais 262k de contexte : pas un vrai
# fallback. Recommandé par LM pour les tâches simples, de manière # fallback. Recommandé par LM pour les tâches simples, de manière
# proactive, afin d'alléger GLM 5.3 (07/09/2026). # proactive, afin d'alléger GLM 5.3 (07/09/2026).
# 32 768 : plafond réel de la passerelle (max_output_tokens sur
# /v1/model/info, vérifié 28/09/2026). Les valeurs antérieures
# étaient fausses et risquaient une erreur 400 en fin de réponse.
contextWindow = 262144; contextWindow = 262144;
maxTokens = 128000; maxTokens = 32768;
} }
{ {
id = "glm-ocr"; id = "glm-ocr";