diff --git a/flake.lock b/flake.lock index e654341..3358cd9 100644 --- a/flake.lock +++ b/flake.lock @@ -471,6 +471,22 @@ "type": "github" } }, + "hermes-menagerie": { + "flake": false, + "locked": { + "lastModified": 1788415525, + "narHash": "sha256-HlRJHxVmTOJ553sYHsZYSW0/FwYFveFjdCMQWG6gFyg=", + "owner": "ZakiChair", + "repo": "hermes-catppuccin", + "rev": "0a72fd4159463b7dc598216a10b599e2d29c99ea", + "type": "github" + }, + "original": { + "owner": "ZakiChair", + "repo": "hermes-catppuccin", + "type": "github" + } + }, "hermes-webui": { "inputs": { "nixpkgs": [ @@ -1559,6 +1575,7 @@ "disko": "disko", "firefox-devtools-mcp": "firefox-devtools-mcp", "hermes-agent": "hermes-agent", + "hermes-menagerie": "hermes-menagerie", "hermes-webui": "hermes-webui", "home-manager": "home-manager_4", "jovian": "jovian", diff --git a/flake.nix b/flake.nix index 14bdcb6..d93cc6e 100644 --- a/flake.nix +++ b/flake.nix @@ -60,6 +60,12 @@ flake = false; # The repo isn't a flake; use as raw source }; + # Pack de skins Hermes (26 palettes) : source brute, cf. modules/home-mac/hermes-skins. + hermes-menagerie = { + url = "github:ZakiChair/hermes-catppuccin"; + flake = false; # The repo isn't a flake; use as raw source + }; + # On crée une entrée SPÉCIALE pour le téléphone # nixpkgs-droid.url = "github:NixOS/nixpkgs/nixos-24.05"; diff --git a/modules/home-mac/hermes-skins/default.nix b/modules/home-mac/hermes-skins/default.nix new file mode 100644 index 0000000..0a29cae --- /dev/null +++ b/modules/home-mac/hermes-skins/default.nix @@ -0,0 +1,74 @@ +# Skins Hermes : pose les YAML du pack « Hermes Menagerie » dans ~/.hermes/skins/, +# dossier que l'engine lit tel quel (hermes_cli/skin_engine.py, lecture seule côté +# Hermes). Le pack est une source brute, pas un flake (flake input +# `hermes-menagerie`, flake = false). +# +# Les fichiers sont des symlinks vers /nix/store, donc read-only : `hermes skin set +# ` ne peut pas réécrire ces YAML sur place. Pour itérer sur une couleur, +# forker le skin dans un fichier séparé, ou pointer une entrée vers un clone local +# (config.lib.file.mkOutOfStoreSymlink). L'activation reste impérative, config.yaml +# n'étant pas géré par Nix : +# hermes config set display.skin catpuccin-mocha +{ + lib, + config, + inputs, + ... +}: +let + cfg = config.my.hermesSkins; + + packDir = cfg.pack + "/skins"; + + # Le pack écrit « catpuccin » (deux p, un seul c) : catpuccin-mocha, catpuccin-latte. + available = builtins.filter (n: builtins.match ".+\\.yaml" n != null) ( + builtins.attrNames (builtins.readDir packDir) + ); + + selected = if cfg.skins == [ ] then available else map (s: "${s}.yaml") cfg.skins; + + unknown = lib.subtractLists available selected; +in { + options.my.hermesSkins = { + enable = lib.mkEnableOption "les skins Hermes Menagerie dans ~/.hermes/skins"; + + pack = lib.mkOption { + type = lib.types.path; + default = inputs.hermes-menagerie; + defaultText = lib.literalExpression "inputs.hermes-menagerie"; + description = "Racine du pack (flake input `hermes-menagerie`, flake = false)."; + }; + + skins = lib.mkOption { + type = lib.types.listOf lib.types.str; + default = [ ]; + example = [ "catpuccin-mocha" "fox-ember" ]; + description = "Skins à installer (nom sans .yaml) ; vide = tout le pack (26)."; + }; + + dir = lib.mkOption { + type = lib.types.str; + default = ".hermes/skins"; + description = '' + Dossier des skins, relatif à $HOME. Un profil Hermes utilise + `.hermes/profiles//skins`. + ''; + }; + }; + + config = lib.mkIf cfg.enable { + assertions = [ + { + assertion = unknown == [ ]; + message = "my.hermesSkins.skins : skin(s) absent(s) du pack : ${toString unknown}"; + } + ]; + + home.file = builtins.listToAttrs ( + map (f: { + name = "${cfg.dir}/${f}"; + value.source = packDir + "/${f}"; + }) selected + ); + }; +} diff --git a/users/mac/home.nix b/users/mac/home.nix index 4a2e1b7..78fadd7 100644 --- a/users/mac/home.nix +++ b/users/mac/home.nix @@ -22,6 +22,7 @@ # ../../modules/home/librewolf ../../modules/home-mac/aerospace + ../../modules/home-mac/hermes-skins # ../../modules/home-mac/autossh ]; @@ -116,6 +117,9 @@ programs.zsh.enable = true; + # Skins Hermes (pack Hermes Menagerie) -> ~/.hermes/skins/ + my.hermesSkins.enable = true; + # Connexions Eternal Terminal vers les hôtes NixOS : `et tower` = zellij enregistré. my.et = { enable = true;