From 4516b72b2d167bb501a550ee8980fecf83313515 Mon Sep 17 00:00:00 2001 From: Manuel Maly Date: Sat, 3 Jan 2026 23:18:28 +0100 Subject: [PATCH 1/6] Fix home-manager runtime defaults --- nix/modules/home-manager/clawdis.nix | 27 +++++++++++++++++++++++---- nix/packages/clawdis-gateway.nix | 8 ++++---- nix/sources/clawdis-source.nix | 2 +- 3 files changed, 28 insertions(+), 9 deletions(-) diff --git a/nix/modules/home-manager/clawdis.nix b/nix/modules/home-manager/clawdis.nix index 7a94e4f4..950c0bde 100644 --- a/nix/modules/home-manager/clawdis.nix +++ b/nix/modules/home-manager/clawdis.nix @@ -437,7 +437,7 @@ let let missing = missingFor p; in { assertion = missing == []; - message = "programs.clawdis.instances.${instName}: plugin ${p.name} missing required env: ${lib.concatStringsSep \", \" missing}"; + message = "programs.clawdis.instances.${instName}: plugin ${p.name} missing required env: ${lib.concatStringsSep ", " missing}"; }; mkConfigAssertion = p: { assertion = !(configMissingStateDir p); @@ -447,6 +447,8 @@ let (map mkAssertion plugins) ++ (map mkConfigAssertion plugins) ) enabledInstances); + pluginStateDirs = lib.flatten (map pluginStateDirsFor (lib.attrNames enabledInstances)); + pluginSkillsFiles = let skillEntriesFor = p: @@ -532,7 +534,7 @@ let gatewayPackage = if inst.gatewayPath != null then pkgs.callPackage ../../packages/clawdis-gateway.nix { - src = builtins.path { + src_ = builtins.path { path = inst.gatewayPath; name = "clawdis-gateway-src"; }; @@ -569,11 +571,16 @@ let export ANTHROPIC_API_KEY fi + if [ "$#" -eq 0 ]; then + exec "${gatewayPackage}/bin/clawdis" gateway-daemon + fi exec "${gatewayPackage}/bin/clawdis" "$@" ''; in { + configJson = configJson; + configPath = inst.configPath; homeFile = { - name = inst.configPath; + name = toRelative inst.configPath; value = { text = configJson; }; }; @@ -620,6 +627,11 @@ let }; instanceConfigs = lib.mapAttrsToList mkInstanceConfig enabledInstances; + configWrites = lib.concatStringsSep "\n" (map (item: '' + cat <<'CLAWDIS_CONFIG' > ${lib.escapeShellArg item.configPath} +${item.configJson} +CLAWDIS_CONFIG + '') instanceConfigs); appInstalls = lib.filter (item: item != null) (map (item: item.appInstall) instanceConfigs); appDefaults = lib.foldl' (acc: item: lib.recursiveUpdate acc item.appDefaults) {} instanceConfigs; @@ -790,7 +802,14 @@ in { home.activation.clawdisDirs = lib.hm.dag.entryAfter [ "writeBoundary" ] '' /bin/mkdir -p ${lib.concatStringsSep " " (lib.concatMap (item: item.dirs) instanceConfigs)} - /bin/mkdir -p ${lib.concatStringsSep " " (lib.flatten (map pluginStateDirsFor (lib.attrNames enabledInstances)))} + ${lib.optionalString (pluginStateDirs != []) '' + /bin/mkdir -p ${lib.concatStringsSep " " pluginStateDirs} + ''} + ''; + + home.activation.clawdisConfig = lib.hm.dag.entryAfter [ "clawdisDirs" ] '' + set -euo pipefail + ${configWrites} ''; home.activation.clawdisPluginGuard = lib.hm.dag.entryAfter [ "writeBoundary" ] '' diff --git a/nix/packages/clawdis-gateway.nix b/nix/packages/clawdis-gateway.nix index e5319ba7..766ab896 100644 --- a/nix/packages/clawdis-gateway.nix +++ b/nix/packages/clawdis-gateway.nix @@ -8,23 +8,23 @@ , makeWrapper , vips , sourceInfo -, src ? null +, src_ ? null , pnpmDepsHash ? null }: -assert src == null || pnpmDepsHash != null; +assert src_ == null || pnpmDepsHash != null; stdenv.mkDerivation (finalAttrs: { pname = "clawdis-gateway"; version = "2.0.0-beta4"; - src = if src != null then src else fetchFromGitHub sourceInfo; + src = if src_ != null then src_ else fetchFromGitHub sourceInfo; pnpmDeps = pnpm_10.fetchDeps { inherit (finalAttrs) pname version src; hash = if pnpmDepsHash != null then pnpmDepsHash - else "sha256-k5VvvHOlZc24M0aQF4nEux2k19s/XMD56lprlUD/XoI="; + else "sha256-oGXUm+oftkasXsK+QGlxe0xO7riWHdzpV0oK27lZrLw="; fetcherVersion = 2; }; diff --git a/nix/sources/clawdis-source.nix b/nix/sources/clawdis-source.nix index fd078084..8b5305e2 100644 --- a/nix/sources/clawdis-source.nix +++ b/nix/sources/clawdis-source.nix @@ -3,5 +3,5 @@ owner = "steipete"; repo = "clawdis"; rev = "v2.0.0-beta5"; - hash = "sha256-ZtlknzdrETVi84XKXgmPPwnb3CC+rXWAxZm2aOwDFAI="; + hash = "sha256-DTMIyozlix8eixu8GnSL4+sd46KuS3LejOCLOIHZqjk="; } From 9fba4aafccf501cc7901d3d17d68cb17a68fd919 Mon Sep 17 00:00:00 2001 From: Manuel Maly Date: Sun, 4 Jan 2026 07:53:50 +0100 Subject: [PATCH 2/6] Fix plugin env attribute check Use builtins.hasAttr instead of the ? operator for checking plugin environment variables, which fixes a Nix evaluation error when validating plugin configurations. --- nix/modules/home-manager/clawdis.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nix/modules/home-manager/clawdis.nix b/nix/modules/home-manager/clawdis.nix index 950c0bde..94735227 100644 --- a/nix/modules/home-manager/clawdis.nix +++ b/nix/modules/home-manager/clawdis.nix @@ -430,7 +430,7 @@ let plugins = resolvedPluginsByInstance.${instName} or []; envFor = p: (p.config.env or {}); missingFor = p: - lib.filter (req: !(envFor p ? req)) p.needs.requiredEnv; + lib.filter (req: !(builtins.hasAttr req (envFor p))) p.needs.requiredEnv; configMissingStateDir = p: (p.config.settings or {}) != {} && (p.needs.stateDirs or []) == []; mkAssertion = p: From 9ff6703de4dc49c8c20819dbb7d6b0681c6e189c Mon Sep 17 00:00:00 2001 From: Manuel Maly Date: Sun, 4 Jan 2026 11:25:39 +0100 Subject: [PATCH 3/6] Avoid __MACOSX app bundle --- nix/packages/clawdis-app.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nix/packages/clawdis-app.nix b/nix/packages/clawdis-app.nix index e7ea8107..23047296 100644 --- a/nix/packages/clawdis-app.nix +++ b/nix/packages/clawdis-app.nix @@ -18,7 +18,7 @@ stdenvNoCC.mkDerivation { installPhase = '' runHook preInstall mkdir -p $out/Applications - app_path="$(find "$src" -maxdepth 2 -name 'Clawdis.app' -print -quit)" + app_path="$(find "$src" -maxdepth 2 -path "$src/__MACOSX" -prune -o -name 'Clawdis.app' -print -quit)" if [ -z "$app_path" ]; then echo "Clawdis.app not found in $src" >&2 exit 1 From 4895f560fc7907a2ee12b69ec8b804b532c27c9d Mon Sep 17 00:00:00 2001 From: Manuel Maly Date: Sun, 4 Jan 2026 11:53:08 +0100 Subject: [PATCH 4/6] Bump Clawdis app to v2.0.0-beta5 --- nix/packages/clawdis-app.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/nix/packages/clawdis-app.nix b/nix/packages/clawdis-app.nix index 23047296..8994a3ad 100644 --- a/nix/packages/clawdis-app.nix +++ b/nix/packages/clawdis-app.nix @@ -5,11 +5,11 @@ stdenvNoCC.mkDerivation { pname = "clawdis-app"; - version = "2.0.0-beta4"; + version = "2.0.0-beta5"; src = fetchzip { - url = "https://github.com/steipete/clawdis/releases/download/v2.0.0-beta4/Clawdis-2.0.0-beta4.zip"; - hash = "sha256-Oa7cejVFfZtJBSmjDaRjqocVyXo+WeS/xucGpJFDzIg="; + url = "https://github.com/steipete/clawdis/releases/download/v2.0.0-beta5/Clawdis-2.0.0-beta5.zip"; + hash = "sha256-1MrLVS65VOaVgRCCeN7YqLaA8KGSk2C8C+MXpl1qfiQ="; stripRoot = false; }; From 7444972cd0ca9b0ba01c4eeb86d5db7f1858c8b2 Mon Sep 17 00:00:00 2001 From: Manuel Maly Date: Sun, 4 Jan 2026 11:59:17 +0100 Subject: [PATCH 5/6] Fix Clawdis app beta5 hash --- nix/packages/clawdis-app.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nix/packages/clawdis-app.nix b/nix/packages/clawdis-app.nix index 8994a3ad..aea827ef 100644 --- a/nix/packages/clawdis-app.nix +++ b/nix/packages/clawdis-app.nix @@ -9,7 +9,7 @@ stdenvNoCC.mkDerivation { src = fetchzip { url = "https://github.com/steipete/clawdis/releases/download/v2.0.0-beta5/Clawdis-2.0.0-beta5.zip"; - hash = "sha256-1MrLVS65VOaVgRCCeN7YqLaA8KGSk2C8C+MXpl1qfiQ="; + hash = "sha256-AA4REVpADWO5guUdrF5rsVTY4RhzV6cLv6hbcnS6W9M="; stripRoot = false; }; From 41b86dececf0c373d47aa4acdc1a4751c13a16f5 Mon Sep 17 00:00:00 2001 From: Manuel Maly Date: Sun, 4 Jan 2026 12:17:39 +0100 Subject: [PATCH 6/6] Bump bundle metadata to v2.0.0-beta5 --- docs/rfc/2026-01-02-declarative-clawdis-nix.md | 5 ++--- nix/packages/clawdis-batteries.nix | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/docs/rfc/2026-01-02-declarative-clawdis-nix.md b/docs/rfc/2026-01-02-declarative-clawdis-nix.md index 08caec76..51b1c289 100644 --- a/docs/rfc/2026-01-02-declarative-clawdis-nix.md +++ b/docs/rfc/2026-01-02-declarative-clawdis-nix.md @@ -131,8 +131,7 @@ This RFC is complete when: ## 12) Implementation status (current) -- Gateway pinned to `v2.0.0-beta4`. -- App DMG pinned to `v2.0.0-beta4`. +- Gateway pinned to `v2.0.0-beta5`. +- App DMG pinned to `v2.0.0-beta5`. - Batteries‑included package output is wired in the flake. - README is the single onboarding source. - diff --git a/nix/packages/clawdis-batteries.nix b/nix/packages/clawdis-batteries.nix index fa0c437f..ff7930d9 100644 --- a/nix/packages/clawdis-batteries.nix +++ b/nix/packages/clawdis-batteries.nix @@ -6,7 +6,7 @@ }: buildEnv { - name = "clawdis-2.0.0-beta4"; + name = "clawdis-2.0.0-beta5"; paths = [ clawdis-gateway clawdis-app ] ++ extendedTools; pathsToLink = [ "/bin" "/Applications" ];