File size: 1,111 Bytes
c64420c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# nix/configMergeScript.nix — Deep-merge Nix settings into existing config.yaml
#
# Used by the NixOS module activation script and by checks.nix tests.
# Nix keys override; user-added keys (skills, streaming, etc.) are preserved.
{ pkgs }:
pkgs.writeScript "hermes-config-merge" ''

  #!${pkgs.python3.withPackages (ps: [ ps.pyyaml ])}/bin/python3

  import json, yaml, sys

  from pathlib import Path



  nix_json, config_path = sys.argv[1], Path(sys.argv[2])



  with open(nix_json) as f:

      nix = json.load(f)



  existing = {}

  if config_path.exists():

      with open(config_path) as f:

          existing = yaml.safe_load(f) or {}



  def deep_merge(base, override):

      result = dict(base)

      for k, v in override.items():

          if k in result and isinstance(result[k], dict) and isinstance(v, dict):

              result[k] = deep_merge(result[k], v)

          else:

              result[k] = v

      return result



  merged = deep_merge(existing, nix)

  with open(config_path, "w") as f:

      yaml.dump(merged, f, default_flow_style=False, sort_keys=False)

''