Files
nixos/modules/home-mac/hermes-skins/default.nix
T
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

75 lines
2.3 KiB
Nix

# 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
# <clé> <hex>` 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/<nom>/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
);
};
}