From 2e51333126eac529139462ddeb0b7679e991311c Mon Sep 17 00:00:00 2001 From: servius Date: Thu, 18 Jun 2026 12:07:28 +0000 Subject: [PATCH] fix goose external backend settings --- home/programs/goose.nix | 32 ++++++++++++++------------------ home/programs/sops.nix | 4 ++++ 2 file(s) changed, 18 insertion(s)(+), 18 deletion(s)(-) diff --git a/home/programs/goose.nix b/home/programs/goose.nix --- a/home/programs/goose.nix +++ b/home/programs/goose.nix @@ -182,13 +182,14 @@ # `goosed` agent server, prebuilt and x86_64-linux only. On shiro, the # desktop app (and its bundled goosed) is installed by Homebrew as # `block-goose`. home.packages = - [ + [] + ++ lib.optionals (device.is "shiro") [ pkgs.goose-ai + applescriptMcp homeAssistantMcp slackMcp ] - ++ lib.optionals device.isDarwin [applescriptMcp] - ++ lib.optionals (pkgs.stdenv.hostPlatform.system == "x86_64-linux") [pkgs.goose-desktop]; + ++ lib.optionals (device.is "ryu") [pkgs.goose-desktop]; sops.secrets = { @@ -220,10 +221,10 @@ mv "$tmp_file" "$config_file" ''; } - # On ryu, point goose Desktop at the remote goosed backend hosted by shiro. - # The app stores this in Electron's userData settings.json; merge only the - # externalGoosed key so manual UI preferences remain intact. - (lib.mkIf (device.is "ryu") { + # On ryu/kuro, point goose Desktop at the remote goosed backend hosted by shiro. + # The app stores this in Electron's userData settings.json; manage that file + # directly as a symlink to the rendered secret-backed template. + (lib.mkIf (device.is "ryu" || device.is "kuro") { sops.secrets."goose/server_secret" = {}; sops.templates."goose-desktop-external-goosed.json".content = builtins.toJSON { @@ -235,19 +236,14 @@ }; }; home.activation.configureGooseDesktopExternalGoosed = lib.hm.dag.entryAfter ["writeBoundary"] '' - settings_file="${config.xdg.configHome}/Goose/settings.json" external_backend_file="${gooseDesktopExternalBackendConfigFile}" - mkdir -p "$(dirname "$settings_file")" - if [ ! -e "$settings_file" ]; then - printf '{}\n' > "$settings_file" - fi - - tmp_file="$(mktemp)" - ${pkgs.jq}/bin/jq -s '.[0] * .[1]' \ - "$settings_file" "$external_backend_file" > "$tmp_file" - mv "$tmp_file" "$settings_file" - chmod 600 "$settings_file" + for settings_file in \ + "${config.xdg.configHome}/Goose/settings.json" \ + "${device.home}/Library/Application Support/Goose/settings.json"; do + mkdir -p "$(dirname "$settings_file")" + ln -sfn "$external_backend_file" "$settings_file" + done ''; }) diff --git a/home/programs/sops.nix b/home/programs/sops.nix --- a/home/programs/sops.nix +++ b/home/programs/sops.nix @@ -1,6 +1,7 @@ { config, pkgs, + lib, inputs, ... }: { @@ -20,4 +21,7 @@ PATH = pkgs.lib.mkForce "/usr/bin:/bin:/usr/sbin:/sbin"; }; }; }; + home.activation.restartSopsNixAgent = lib.mkIf pkgs.stdenv.isDarwin (lib.hm.dag.entryAfter ["sops-nix" "setupLaunchAgents"] '' + /bin/launchctl kickstart -k "gui/$(/usr/bin/id -u ${lib.escapeShellArg config.home.username})/org.nix-community.home.sops-nix" || true + ''); } -- tangled.sh