360 Commits
Author SHA1 Message Date
Hermes Agent b2878b05dd feat(macos): Firefox quotidien pilotable par Hermes (launchd + MCP connectExisting) 2026-11-02 21:38:13 -05:00
Hermes Agent 6ee385ce93 feat(mac): tunnel SSH inverse autoreparant et cle du Mac acceptee
ExitOnForwardFailure=yes sur l'autossh du Mac : un forward rate (port deja pris, sshd pas encore pret au boot) ne laisse plus une session inutile, launchd reessaie. La cle du Mac (marc@Air-de-Marc) est autorisee sur tower et sur le deck : ssh tower et ssh deck passent par rack en ProxyJump.
2026-10-24 15:08:11 -04:00
Hermes Agent feab54082e feat(ssh): alias mac et maclan pour joindre le Mac depuis tower
Le Mac expose deja son sshd (services.openssh dans profiles/macos) et son
tunnel inverse autossh (rack:2223), il manquait les alias cote marc.

- maclan = marc@192.168.1.48 (LAN, IP DHCP)
- mac = marc@localhost:2223 via rack (tunnel inverse, hors LAN)

Verifie en construisant le fichier genere (hm_.sshconfig) : les deux entrees
sortent avec le bon HostName/Port/ProxyJump.
2026-10-24 15:00:10 -04:00
Hermes Agent 7498ea4971 feat(macos): setup nix-darwin pour builder l'app Winnie
L'app se build sur le Mac en trois commandes, le toolchain restant dans le
devShell du flake winnie (jamais installé sur le Mac) :
  cd ~/git/nixos && just mac   # déploie ce setup
  winnie-sync                  # attrape ~/git/winnie depuis tower (rsync ssh)
  winnie-ios                   # simulateur ; npm ci + tauri ios init au besoin

- modules/home-mac/winnie : winnie-doctor [--fix], winnie-sync [--delete],
  winnie-shell, winnie-front, winnie-macos, winnie-build-macos, winnie-ios,
  winnie-build-ios, winnie-verify. Scripts en writeShellApplication (shellcheck
  au build) ; scripts.nix est séparé du module pour être constructible depuis
  tower avec les pkgs linux et testable sans Mac.
- profiles/macos : flakes + trusted-users dans nix.conf, et
  system.activationScripts.winnie-xcode (xcode-select -s, licence Xcode,
  -runFirstLaunch) pour que seule l'installation App Store reste manuelle.
- Embarque aussi le setup SSH entrant du Mac (sshd, clé hermes@tower, tunnel
  inverse autossh) qui était déjà dans l'arbre de travail.

Vérifié depuis tower : nix eval du darwinConfigurations.macos (toplevel et
home-manager-generation) + build des scripts en x86_64-linux (shellcheck) et
rsync de bout en bout depuis le dépôt de tower.
2026-10-24 14:33:35 -04:00
Hermes Agent 58ace4257f feat(starship): affiche la branche et l'etat git dans le prompt
Le format n'incluait aucun module git et starship s'initialise apres
p10k : impossible de voir sur quelle branche on est.
2026-10-19 02:07:33 -04:00
Hermes Agent 542969c86c fix(nvim): fond reellement transparent (onedark + lualine)
onedark.transparent couvre tous les groupes du theme, pas seulement
Normal ; les highlights Lualine sont nettoyes apres ColorScheme et
les ~ de fin de buffer deviennent des espaces.
2026-10-19 02:07:33 -04:00
Hermes Agent de94c3e4bf feat(wireguard): tower rejoint le wg1 du VPS en pair 10.100.0.3
Le forward de box 77.207.176.170:42070 est mort : tower devient pair
client du hub wg1 avec persistentKeepalive. L'alias ssh tower pointe
sur 10.100.0.3 et la cle root du VPS est autorisee sur tower. Cle
privee dans secrets/wireguard.yml (recipient tower).
2026-10-19 02:07:32 -04:00
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 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
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 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 1ecafcba6a feat(users): anki + ssh deck/tower-rack alias ; secrets tower rotation 2026-10-06 21:42:11 -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 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 3b6b531102 revert(home-manager): retour au profil standalone, herdr posé côté système
home-manager.useGlobalPkgs=true (test perf, évite d'évaluer nixpkgs 2x) est
revenu trop cher/instable en pratique. Retour à home-manager.users.marc
totalement désactivé côté système (profil standalone via `HM=marc just home`
uniquement). Conséquences :
- modules/home/gtk : catppuccin.autoEnable repasse à sa valeur par défaut
- modules/home/zen-browser : l'overlay nur revient dans son propre module
- profiles/common : commentaire nettoyé (n'a plus besoin d'expliquer le piège
  useGlobalPkgs, qui ne s'applique plus)
- herdr : posé côté système (modules/nixos/herdr, symlink store ->
  ~/.config/herdr/config.toml) puisque le home-manager systeme ne construit
  plus la conf de marc ; modules/home/herdr et son import dans
  users/marc/home.nix restent (profil standalone), mais ne sont plus le
  mécanisme actif sur tower.
2026-09-27 21:21:00 -04:00
Hermes Agent 667a072937 feat(media): migrer la bibliothèque partagée vers /srv/media (dataset ZFS dédié)
/home/marc/media posait deux problèmes : /home/marc est 0700 (chaque service
devait recevoir un droit de traversée) et systemd-tmpfiles refuse de créer
quoi que ce soit sous /home/marc (« unsafe path transition », exit 73).

- services/media (nouveau) : dataset nixos/media -> /srv/media, groupe media
  (setgid, dossiers 2775/2770), arborescence movies/tvshows/music/books/downloads
- disko.nix : dataset media à côté de marc/nix
- navidrome, jellyfin, kodi : bibliothèque -> /srv/media/{music,movies,tvshows}
- qbittorrent : téléchargements dans le même dataset que la bibliothèque
  (permet aux *arr d'importer par lien dur au lieu de copier)
- radarr : dataDir corrigé (pointait sur celui de sonarr par copier-coller),
  déplacé hors /home (impossible avec ProtectHome+tmpfiles du module)
- sonarr : dataDir dédié + migration depuis /home/marc/radarr (était figé
  depuis le 28/07, port 8006 muet) ; réparé le 27/09/2026
- readarr : bibliothèque -> /srv/media/books
2026-09-27 21:19:52 -04:00
Hermes Agent 353b320812 perf(home-manager): useGlobalPkgs sur tower, overlays et paquets insecure
Sans useGlobalPkgs, home-manager instancie un second nixpkgs (toute la distribution
réévaluée à chaque switch). Le partage change l'ordre de merge de
nixpkgs.config.permittedInsecurePackages, un attr « dernier gagne » que plusieurs
modules redéfinissent (matrix-whatsapp, pangolin, packages.nix) : on l'unionne
explicitement dans profiles/common. L'overlay nur de zen-browser passe au niveau
système, incompatible dans le home avec useGlobalPkgs. catppuccin.autoEnable=false
coupe le scan et l'activation auto de tous les programmes HM.
2026-09-27 13:00:56 -04:00
Hermes Agent 3c05597360 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.
2026-09-27 13:00:55 -04:00
Hermes Agent c47f60a129 feat(ssh): add hermes host configuration 2026-09-26 19:40:04 -04:00
Hermes Agent bd835791dd fix(ssh): update towerlocal hostname IP 2026-09-26 19:33:20 -04:00
Hermes Agent b943ec7686 style(kitty): refine terminal visual settings
Set background opacity to 0.92 for slight transparency.
Increase window padding width to 12.
Enable hiding window decorations.
2026-09-26 18:51:20 -04:00
Hermes Agent 0961bf4c7e chore(kitty): update font from JetBrainsMono to MesloLGS NF 2026-09-26 18:26:29 -04:00
Hermes Agent 58a0943ead feat(kitty): add catppuccin mocha theme
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.
2026-09-26 18:23:06 -04:00
Hermes Agent eb048167fe feat(herdr): sidebar affiche le modèle hermes de chaque pane
- modules/nixos/herdr : config.toml posé par tmpfiles L+ (rows_by_agent hermes
  = state_icon/machine/tab + terminal_title_stripped + agent), importé par
  profiles/tower/configuration.nix
- services/hermes : display.interface = "tui" (seule interface qui publie un
  titre OSC lu par herdr) + plugins.enabled = [] (neutralise l'entrée
  herdr-agent-state, inerte sous sudo su -l hermes)
2026-09-26 18:09:58 -04:00
Hermes Agent 535d1c9892 feat(youtube-music): 4 clients TUI (ytm-player, yututui, yt-collate, youtube-music-cli)
- module par outil dans modules/home/, importés par users/marc/home.nix
- ytm-player: suit unstable (dbus-fast >= 5.0.0, absent de 26.05)
- yututui (ytt): doCheck = false, 11 tests FS échouent en sandbox nix
- yt-collate: buildPythonApplication python313, deps textual/ytmusicapi
- youtube-music-cli (ymc): binaire Bun standalone de la release
2026-09-26 18:08:25 -04:00
Hermes Agent 9639f7ae35 feat(wayvnc): écran virtuel vkms en 1920x1080
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.
2026-09-24 22:45:46 -04:00
Hermes Agent fbb0525254 feat: add Codeberg and GitHub MCP, improve wayvnc startup
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.
2026-09-24 22:28:54 -04:00
Hermes Agent fde44ec0a8 feat: enable wayvnc LAN access and update hermes model
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.
2026-09-24 22:10:03 -04:00
Hermes Agent f691d98990 feat: add noVNC web client and headscale ACL
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.
2026-09-24 21:57:22 -04:00
Hermes Agent ed26a96aad feat(tower): tower profile + zfs + eternal-terminal 2026-09-24 21:31:12 -04:00
Hermes Agent f55067d0b7 feat(flake): lock updates and protonmail-mcp flake 2026-09-24 21:31:02 -04:00
mazex b0f8405a4a feat(nextcloud-mcp): enable and configure service
Configures Nextcloud MCP in single_user_basic mode, exposed on
127.0.0.1:8710 and integrated with Hermes.
Refactors Neovim config to use system nixpkgs input, preventing
duplicate evaluations and warnings.
Removes --upgrade flag from nixos-rebuild in Justfile.
2026-09-22 00:39:51 -04:00
mazex da78aea121 feat: add aichat kimi and spotify mcp services
Add Home Manager module for `aichat` CLI, integrating Moonshot/Kimi API.
Uses sops-nix for API key management.

Add `spotify-mcp-server` as a system service, integrated with Hermes.
Manages Spotify credentials via sops-nix.

Enable `nextcloud` OIDC app.
Configure `nextcloud-mcp` to restart on sops secret changes.

Enable `zitadel` service.
2026-09-21 21:42:43 -04:00
mazex 42cc0397dc zellij 2026-09-21 04:17:25 +02:00
marc 42b78c580c feat(hermes): add hermes agent nixos module
Enable the hermes-agent service with a default model and sops secret.
Also update the `mac` recipe in `Justfile` to include `extra-experimental-features` for nix-darwin.
2026-09-17 21:20:58 -04:00
mazex d055cb4561 deck friendly no auto_wallpaper 2026-09-17 12:39:35 +00:00
mazex 3c94c3f5f9 sops: add deck key 2026-09-17 02:57:41 +00:00
mazex a38fa9f7d7 feat(deck): add Plasma desktop and ISO build
Integrate Plasma 6 as the default desktop environment for the Steam Deck.
Introduce a new `deck-iso` system for generating an installable ISO.
Refactor `jovian` and `sddm` modules for better composability.
Include `disko`, `sops`, `users`, `networking`, `pipewire`, `xdg` modules.
Enable `zsh`, `openssh`, `rtkit`, and add `git`, `neovim`, `htop`.
2026-09-15 22:58:29 -04:00
mazex cd9b8391ab feat(deck): configure initial NixOS host for Steam Deck
Renames the 'steam' system to 'deck' in flake.nix and sets up the
initial NixOS profile for the Steam Deck. This includes disk
partitioning with disko, a basic hardware configuration, and
enables the Jovian module for Steam Deck specific optimizations.
The previous 'profiles/steam' configuration has been removed.
2026-09-15 21:41:54 -04:00
mazex 091e60b3e5 feat(steam): add system profile for Gamescope with Jovian
Introduces a dedicated NixOS system profile for Steam, integrating Jovian-NixOS for Gamescope.
This includes:
- New 'jovian' flake input and module.
- New 'steam' profile using 'jovian' as a specialisation.
- Opens port 8050 in the tower firewall.
- Sets Alacritty to open maximized in Niri.
2026-09-15 21:14:41 -04:00
mazex c689d33264 feat(niri): add output scaling for Technical Concepts monitor 2026-09-15 20:23:01 -04:00
mazex e8372ed9f1 refactor(ssh): use settings and PascalCase for config
Adjusts SSH configuration to use the `settings` option and updates all keys
to PascalCase for consistency with standard SSH config and home-manager.
2026-09-12 23:37:41 -04:00
mazex 802314cbfb feat(kitty): add kitty terminal configuration
Sets up basic kitty configuration, including font, colors, and window settings.
2026-09-12 23:32:31 -04:00
mazex 478e41d80e fix(geminicommit): update config format and permissions
Adjusts the generated config file to use the `[api]` section and `key` field.
Adds `umask 077` for stricter file permissions and a check for secret readability.
2026-09-12 18:50:48 -04:00
mazex 0a4fa11446 refactor: adjust bluetooth settings and enable rtkit 2026-07-30 14:43:28 +02:00
mazex 0329abb91c fix: correct syntax error in ssh proxyJump configuration 2026-07-28 16:41:15 +02:00
mazex 846ff3f97c feat: add nil_ls lsp server and osc52 clipboard support 2026-07-28 16:41:05 +02:00
mazex c7574e87c1 fix: remove quote from proxyJump value 2026-07-28 16:27:35 +02:00
mazex 6c719452e7 refactor: redesign droplify ui and add file listing 2026-05-24 21:12:18 +02:00