diff --git a/.agents b/.agents new file mode 120000 index 0000000..2f51828 --- /dev/null +++ b/.agents @@ -0,0 +1 @@ +.pi \ No newline at end of file diff --git a/AGENTS.md b/AGENTS.md index 00ec63e..a9958f5 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -105,3 +105,8 @@ Different game installs can contain compiled scripts with the same internal path. - Clew owns Ren'Py extraction, preparation, and compiled-script AST export. Ariadne owns analysis over Clew-produced data. - Bazel Python targets require `PYTHON_TOOLCHAIN_ROOT` to point at a Python installation root. +- When checking whether a package exists in nixpkgs, check both this repository's pinned nixpkgs inputs + and the relevant current upstream channel. A package can exist on current `nixos-unstable` while being + absent from the pinned revision or from a different branch such as `nixpkgs-unstable`. +- OMP does not discover project skills from `.pi/skills`. + Put skills shared by Pi and OMP under `.agents/skills`, or configure OMP's `skills.customDirectories`. diff --git a/configs/nixos/modules/shell/herdr.nix b/configs/nixos/modules/shell/herdr.nix index b3d1709..9c0c511 100644 --- a/configs/nixos/modules/shell/herdr.nix +++ b/configs/nixos/modules/shell/herdr.nix @@ -10,38 +10,68 @@ let user = config.user.name; in { - options.modules.shell.herdr.enable = lib.mkEnableOption "Herdr, a terminal multiplexer for coding agents"; + options.modules.shell.herdr = { + enable = lib.mkEnableOption "Herdr, a terminal multiplexer for coding agents"; + + integrations = { + pi.enable = lib.mkOption { + type = lib.types.bool; + default = config.modules.shell.pi.enable; + description = "Whether to install Herdr's Pi agent-state integration."; + }; + + omp.enable = lib.mkOption { + type = lib.types.bool; + default = config.modules.shell.omp.enable; + description = "Whether to install Herdr's OMP agent-state integration."; + }; + }; + }; config = lib.mkIf cfg.enable { registry.shell-shortcut.${config.networking.hostName}.hs = "herdr --session"; - home-manager.users.${user} = { - home.packages = [ pkgs.herdr ]; + home-manager.users.${user} = lib.mkMerge [ + { + home.packages = [ pkgs.herdr ]; - xdg.configFile."herdr/config.toml".text = '' - [keys] - prefix = "ctrl+space" - detach = "prefix+d" - reload_config = "prefix+r" - new_workspace = "prefix+c" - new_tab = "prefix+shift+c" - rename_workspace = "prefix+comma" - rename_tab = "prefix+<" - split_vertical = "prefix+backslash" - split_horizontal = "prefix+minus" - switch_workspace = "prefix+1..9" - switch_tab = "prefix+shift+1..9" - focus_pane_left = "prefix+h" - focus_pane_down = "prefix+j" - focus_pane_up = "prefix+k" - focus_pane_right = "prefix+l" + xdg.configFile."herdr/config.toml".text = '' + [keys] + prefix = "ctrl+space" + detach = "prefix+d" + reload_config = "prefix+r" + new_workspace = "prefix+c" + new_tab = "prefix+shift+c" + rename_workspace = "prefix+comma" + rename_tab = "prefix+<" + split_vertical = "prefix+backslash" + split_horizontal = "prefix+minus" + switch_workspace = "prefix+1..9" + switch_tab = "prefix+shift+1..9" + focus_pane_left = "prefix+h" + focus_pane_down = "prefix+j" + focus_pane_up = "prefix+k" + focus_pane_right = "prefix+l" - [ui] - prompt_new_tab_name = false + [ui] + prompt_new_tab_name = false - [experimental] - kitty_graphics = true - ''; - }; + [experimental] + kitty_graphics = true + ''; + } + (lib.mkIf cfg.integrations.pi.enable { + home.file.".pi/agent/extensions/herdr-agent-state.ts" = { + source = "${pkgs.herdr.src}/src/integration/assets/pi/herdr-agent-state.ts"; + force = true; + }; + }) + (lib.mkIf cfg.integrations.omp.enable { + home.file.".omp/agent/extensions/herdr-omp-agent-state.ts" = { + source = "${pkgs.herdr.src}/src/integration/assets/omp/herdr-agent-state.ts"; + force = true; + }; + }) + ]; }; }