From 590b5e71fa54d2509a90c129374adba40f5954e4 Mon Sep 17 00:00:00 2001 From: John Ogle Date: Tue, 21 Apr 2026 17:12:50 -0700 Subject: [PATCH] feat(openclaw): add runtime closure meta-package for Harmonia caching Creates openclaw-runtime-closure as a symlinkJoin of all runtime dependencies (nodejs_22, kubectl, jq, git, emacs, tsx, tea, python3.withPackages pymupdf, qmd) that will be pushed to the Harmonia binary cache by CI and pulled into the PVC by the init container at pod startup. This meta-package enables the thin Docker image architecture where: - The Docker image stays small (~1.5GB vs 2.7GB) with only /app, nix, and basics - Runtime deps are fetched from Harmonia at pod startup via nix copy --from - CI push is fast (thin image) and runtime deps are cached separately Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus --- flake.nix | 1 + packages/default.nix | 1 + packages/openclaw-image/runtime-closure.nix | 22 +++++++++++++++++++++ 3 files changed, 24 insertions(+) create mode 100644 packages/openclaw-image/runtime-closure.nix diff --git a/flake.nix b/flake.nix index 832a52a..4dabe74 100644 --- a/flake.nix +++ b/flake.nix @@ -308,6 +308,7 @@ "nix-deck-kernel" = self.nixosConfigurations.nix-deck.config.boot.kernelPackages.kernel; # OpenClaw docker image (pulled + augmented with nix tools) "openclaw-image" = pkgs.custom.openclaw-image; + "openclaw-runtime-closure" = pkgs.custom.openclaw-runtime-closure; } else { } diff --git a/packages/default.nix b/packages/default.nix index 0f1ab7d..0c76547 100644 --- a/packages/default.nix +++ b/packages/default.nix @@ -10,4 +10,5 @@ rec { opencode = pkgs.callPackage ./opencode { }; qmd = pkgs.callPackage ./qmd { }; openclaw-image = pkgs.callPackage ./openclaw-image { inherit qmd; }; + openclaw-runtime-closure = pkgs.callPackage ./openclaw-image/runtime-closure.nix { inherit qmd; }; } diff --git a/packages/openclaw-image/runtime-closure.nix b/packages/openclaw-image/runtime-closure.nix new file mode 100644 index 0000000..9f511f2 --- /dev/null +++ b/packages/openclaw-image/runtime-closure.nix @@ -0,0 +1,22 @@ +{ + pkgs, + qmd, +}: + +# This package creates a store path that transitively depends on all packages +# that should be available at runtime in the OpenClaw pod. +# CI uses this to push a single closure to Harmonia. +pkgs.symlinkJoin { + name = "openclaw-runtime-closure"; + paths = [ + pkgs.nodejs_22 + pkgs.kubectl + pkgs.jq + pkgs.git + pkgs.emacs + pkgs.tsx + pkgs.tea + (pkgs.python3.withPackages (ps: [ ps.pymupdf ])) + qmd + ]; +}