From c2f48df98fe1cb72aa5977689cee59e61107f6f1 Mon Sep 17 00:00:00 2001 From: Jelle Spreeuwenberg Date: Sat, 5 Sep 2026 21:52:25 +0200 Subject: [PATCH] fix: restore terminal-backed Walker actions --- docs/plans/workflow-system.md | 44 +++++++++++++++++++++++++------ modules/capabilities/terminal.nix | 2 +- modules/capabilities/walker.nix | 9 ++++--- 3 files changed, 43 insertions(+), 12 deletions(-) diff --git a/docs/plans/workflow-system.md b/docs/plans/workflow-system.md index ac7d573..0117147 100644 --- a/docs/plans/workflow-system.md +++ b/docs/plans/workflow-system.md @@ -6,10 +6,23 @@ Apply the global and repository-local `AGENTS.md` files and the ponytail skill at full intensity throughout. Preserve user work, prefer native capabilities, and add no abstraction without a demonstrated repeated need. +## Non-negotiable activation boundary + +Only the user may switch or activate configurations. The agent must never run +`nixos-rebuild switch`, a Home Manager activation or switch command, or any +equivalent operation that changes the active generation. Building and +evaluating configurations is allowed; after a successful build, give the user +the exact activation command and wait for confirmation. + +On 2026-09-05 the agent violated this boundary by directly running a built Home +Manager activation package. It restarted the Kitty service and closed the +user's terminal session. Do not repeat this, including for changes described as +user-level, harmless, temporary, or needed only for live verification. + ## Current checkpoint - Tranche: desktop, agents, and notes -- State: Zenith activation verified; waiting for the desktop interaction gate +- State: terminal launch fixed; waiting for a user-controlled launcher restart - Branch: `chore/workflow-system` - Baseline: `nix flake check --no-build --quiet` and a no-link Zenith system build passed on 2026-09-05 after the live activation follow-ups; only the @@ -18,9 +31,14 @@ and add no abstraction without a demonstrated repeated need. `.worktrees` entries, and the generated daily-note configuration passes an isolated same-day idempotence test. The managed Actual and WhatsApp entries are active in the current user session, Evolution's source registry activates - over D-Bus, and the VPN reconnects successfully. -- Next: the user completes the bounded Walker/project/PWA interaction gate - below. Then the agent records the result and surfaces only the next gate. + over D-Bus, and the VPN reconnects successfully. The user activated the + terminal root fix: `xdg-terminal-exec` now selects Kitty correctly and Yazi + launches from Walker. The still-running Elephant process retained the old + project action, so its menu file is now an explicit restart trigger. +- Next: after the fix is committed and built, the user restarts Elephant and + Walker with the exact command supplied by the agent, then repeats only the + project-launch test. The restart trigger takes effect on the next ordinary + user-controlled configuration switch. ## Progress @@ -201,10 +219,20 @@ Polaris: generation. NetworkManager reconnected the VPN successfully afterward. - Walker's native cached Lua menu scans the four identity roots and refreshes when their top level changes. Its default action pipes the selected path to - one Nix-owned `open-project` command, which starts Neovim in a detached Kitty - window and leaves an interactive shell after Neovim exits. The generated - Walker configuration extends, rather than copies or replaces, the pinned - default provider list and prefixes. + one Nix-owned `open-project` command. Elephant supplies that path without a + terminating newline, so the launcher now accepts a successful partial read + instead of exiting under `errexit`. It opens Neovim through the configured + `xdg-terminal-exec` owner and leaves an interactive shell after Neovim exits. + Elephant reads menu actions only at startup, so the generated menu is also a + declarative service restart trigger. The generated Walker configuration + extends, rather than copies or replaces, the pinned default provider list and + prefixes. +- The shared terminal-launch failure came from the Kitty package rewrite: + unanchored `sed` changed both `Exec=kitty` and `TryExec=kitty` to include + `-1`. Arguments are invalid in `TryExec`, causing `xdg-terminal-exec` to + reject the configured terminal. The rewrite now changes only `Exec`; live + resolver output selects `kitty.desktop` and retains `kitty -1`, and Yazi + launches successfully from Walker. - Removed the decided Niri arrow/Page Up/Down/numbered duplicates, direct quit and monitor-power bindings, extra screenshot modes, first/last and centering actions, repeated resize families, and their four shortcut-only scripts. The diff --git a/modules/capabilities/terminal.nix b/modules/capabilities/terminal.nix index 2d7e122..4bcdbbf 100644 --- a/modules/capabilities/terminal.nix +++ b/modules/capabilities/terminal.nix @@ -13,7 +13,7 @@ let postBuild = '' wrapProgram $out/bin/kitty --add-flags "-1" rm $out/share/applications/kitty.desktop - sed 's/Exec=kitty/Exec=kitty -1/g' ${pkgs.kitty}/share/applications/kitty.desktop > $out/share/applications/kitty.desktop + sed 's/^Exec=kitty/Exec=kitty -1/' ${pkgs.kitty}/share/applications/kitty.desktop > $out/share/applications/kitty.desktop ''; }; diff --git a/modules/capabilities/walker.nix b/modules/capabilities/walker.nix index 8d3ce8b..de9c5c0 100644 --- a/modules/capabilities/walker.nix +++ b/modules/capabilities/walker.nix @@ -53,11 +53,10 @@ in text = '' project_path="''${1:-}" if [[ -z "$project_path" ]]; then - IFS= read -r project_path + IFS= read -r project_path || [[ -n "$project_path" ]] fi - cd -- "$project_path" - exec ${lib.getExe config.programs.kitty.package} --detach --directory "$PWD" \ + exec ${lib.getExe config.xdg.terminal-exec.package} --dir="$project_path" \ ${lib.getExe pkgs.zsh} -lic 'nvim; exec zsh -l' ''; }; @@ -117,6 +116,10 @@ in end ''; + systemd.user.services.elephant.Unit.X-Restart-Triggers = [ + config.xdg.configFile."elephant/menus/projects.lua".source + ]; + programs.walker = { enable = true; runAsService = true;