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/modules/home-manager/clawdis.nix b/nix/modules/home-manager/clawdis.nix index 87669857..8d2e5472 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: @@ -569,11 +569,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; }; }; @@ -626,6 +631,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; @@ -800,6 +810,11 @@ in { ${lib.optionalString (pluginStateDirsAll != []) "/bin/mkdir -p ${lib.concatStringsSep " " pluginStateDirsAll}"} ''; + home.activation.clawdisConfig = lib.hm.dag.entryAfter [ "clawdisDirs" ] '' + set -euo pipefail + ${configWrites} + ''; + home.activation.clawdisPluginGuard = lib.hm.dag.entryAfter [ "writeBoundary" ] '' set -euo pipefail ${pluginGuards} diff --git a/nix/packages/clawdis-app.nix b/nix/packages/clawdis-app.nix index e7ea8107..aea827ef 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-AA4REVpADWO5guUdrF5rsVTY4RhzV6cLv6hbcnS6W9M="; stripRoot = false; }; @@ -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 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" ]; diff --git a/nix/packages/clawdis-gateway.nix b/nix/packages/clawdis-gateway.nix index b27bfa31..6139756c 100644 --- a/nix/packages/clawdis-gateway.nix +++ b/nix/packages/clawdis-gateway.nix @@ -16,7 +16,7 @@ assert gatewaySrc == null || pnpmDepsHash != null; stdenv.mkDerivation (finalAttrs: { pname = "clawdis-gateway"; - version = "2.0.0-beta4"; + version = "2.0.0-beta5"; src = if gatewaySrc != null then gatewaySrc else fetchFromGitHub sourceInfo;