* refactor: suffix runtimeDeps PATH so apt-installed tools take priority Changes makeWrapper from --prefix to --suffix. In container mode, tools installed via apt in /usr/bin now win over read-only nix store copies. Nix store versions become dead-letter fallbacks. Native NixOS mode unaffected — tools in /run/current-system/sw/bin already precede the suffix. * feat(container): first-boot apt provisioning for agent tools Installs nodejs, npm, curl via apt and uv via curl on first container boot. Uses sentinel file so subsequent boots skip. Container recreation triggers fresh install. Combined with --suffix PATH change, agents get mutable tools that support npm i -g and uv without hitting read-only nix store paths. * docs: update nixosModules header for tool provisioning * feat(container): consolidate first-boot provisioning + Python 3.11 venv Merge sudo and tool apt installs into a single apt-get update call. Move uv install outside the sentinel so transient failures retry on next boot. Bootstrap a Python 3.11 venv via uv (--seed for pip) and prepend ~/.venv/bin to PATH so agents get writable python/pip/node out of the box. --------- Co-authored-by: Hermes Agent <hermes@nousresearch.com>
55 lines
1.6 KiB
Nix
55 lines
1.6 KiB
Nix
# nix/packages.nix — Hermes Agent package built with uv2nix
|
|
{ inputs, ... }: {
|
|
perSystem = { pkgs, system, ... }:
|
|
let
|
|
hermesVenv = pkgs.callPackage ./python.nix {
|
|
inherit (inputs) uv2nix pyproject-nix pyproject-build-systems;
|
|
};
|
|
|
|
# Import bundled skills, excluding runtime caches
|
|
bundledSkills = pkgs.lib.cleanSourceWith {
|
|
src = ../skills;
|
|
filter = path: _type:
|
|
!(pkgs.lib.hasInfix "/index-cache/" path);
|
|
};
|
|
|
|
runtimeDeps = with pkgs; [
|
|
nodejs_20 ripgrep git openssh ffmpeg
|
|
];
|
|
|
|
runtimePath = pkgs.lib.makeBinPath runtimeDeps;
|
|
in {
|
|
packages.default = pkgs.stdenv.mkDerivation {
|
|
pname = "hermes-agent";
|
|
version = "0.1.0";
|
|
|
|
dontUnpack = true;
|
|
dontBuild = true;
|
|
nativeBuildInputs = [ pkgs.makeWrapper ];
|
|
|
|
installPhase = ''
|
|
runHook preInstall
|
|
|
|
mkdir -p $out/share/hermes-agent $out/bin
|
|
cp -r ${bundledSkills} $out/share/hermes-agent/skills
|
|
|
|
${pkgs.lib.concatMapStringsSep "\n" (name: ''
|
|
makeWrapper ${hermesVenv}/bin/${name} $out/bin/${name} \
|
|
--suffix PATH : "${runtimePath}" \
|
|
--set HERMES_BUNDLED_SKILLS $out/share/hermes-agent/skills
|
|
'') [ "hermes" "hermes-agent" "hermes-acp" ]}
|
|
|
|
runHook postInstall
|
|
'';
|
|
|
|
meta = with pkgs.lib; {
|
|
description = "AI agent with advanced tool-calling capabilities";
|
|
homepage = "https://github.com/NousResearch/hermes-agent";
|
|
mainProgram = "hermes";
|
|
license = licenses.mit;
|
|
platforms = platforms.unix;
|
|
};
|
|
};
|
|
};
|
|
}
|