aboutsummaryrefslogtreecommitdiffstats
path: root/modules/development/pi-coding-agent/default.nix
diff options
context:
space:
mode:
authorArpit Chakladar <arpit@chakladar.me>2026-09-29 23:45:25 +0530
committerArpit Chakladar <arpit@chakladar.me>2026-09-29 23:45:25 +0530
commit33519df0fff478526d217d04190577b33c5bf7d0 (patch)
tree18f6ee9bb8101381212038d16099e59d250b7080 /modules/development/pi-coding-agent/default.nix
parent7975de6d03289bcc143137d5458486def5adc672 (diff)
parent871a29efd370088f669c4f2b9e20b8992406a444 (diff)
downloadhome-manager-config-33519df0fff478526d217d04190577b33c5bf7d0.tar.gz
home-manager-config-33519df0fff478526d217d04190577b33c5bf7d0.zip
Merge branch 'adding-pi-harness'
Diffstat (limited to 'modules/development/pi-coding-agent/default.nix')
-rw-r--r--modules/development/pi-coding-agent/default.nix118
1 files changed, 118 insertions, 0 deletions
diff --git a/modules/development/pi-coding-agent/default.nix b/modules/development/pi-coding-agent/default.nix
new file mode 100644
index 0000000..e560a98
--- /dev/null
+++ b/modules/development/pi-coding-agent/default.nix
@@ -0,0 +1,118 @@
+{
+ config,
+ lib,
+ pkgs,
+ ...
+}:
+let
+ cfg = config.development.pi-coding-agent;
+ configDir = "${config.xdg.configHome}/pi";
+in
+{
+ options.development.pi-coding-agent = {
+ enable = lib.mkEnableOption "Pi Coding Agent";
+
+ package = lib.mkOption {
+ type = lib.types.package;
+ readOnly = true;
+ default = config.programs.pi-coding-agent.package;
+ description = "The Pi Coding Agent package to use.";
+ };
+ };
+
+ config = lib.mkIf cfg.enable {
+ home.file = {
+ "${configDir}/skills".source = ./skills;
+ "${configDir}/prompts".source = ./prompts;
+ "${configDir}/config/pi-subagent".source = ./roles;
+ };
+
+ programs.pi-coding-agent = {
+ enable = true;
+ inherit configDir;
+ package = pkgs.symlinkJoin {
+ name = "pi-coding-agent-wrapped";
+ paths = [ pkgs.pi-coding-agent ];
+ nativeBuildInputs = [ pkgs.makeWrapper ];
+ postBuild = ''
+ wrapProgram $out/bin/pi \
+ --set PI_CODING_AGENT_DIR ${configDir}
+ '';
+ };
+ keybindings = {
+ "tui.editor.cursorUp" = [
+ "up"
+ "ctrl+p"
+ ];
+
+ "tui.editor.cursorDown" = [
+ "down"
+ "ctrl+n"
+ ];
+
+ "tui.editor.deleteWordBackward" = [
+ "ctrl+w"
+ "alt+backspace"
+ ];
+
+ "tui.editor.historyPrevious" = "ctrl+up";
+ };
+
+ settings = {
+ defaultTools = [
+ "read"
+ "bash"
+ "edit"
+ "write"
+ "grep"
+ "find"
+ "ls"
+ ];
+
+ defaultProjectTrust = "ask";
+
+ compaction = {
+ enabled = true;
+ reserveTokens = 16384;
+ keepRecentTokens = 20000;
+ };
+
+ retry = {
+ enabled = true;
+ maxRetries = 30;
+ baseDelayMs = 2000;
+ maxAgentDelayMs = 60000;
+ };
+
+ theme = "dark";
+
+ packages = [
+ "npm:@termdraw/pi"
+ "npm:pi-mcp-adapter"
+ "npm:@henryqw/pi-subagent"
+ ];
+
+ skills = [
+ "${configDir}/skills"
+ ];
+
+ prompts = [
+ "${configDir}/prompts"
+ ];
+
+ themes = [
+ "${configDir}/themes"
+ ];
+
+ enableSkillCommands = true;
+
+ context = ./CONTEXT.md;
+ };
+
+ extraPackages = [
+ pkgs.nodejs
+ pkgs.bun
+ ];
+ };
+ };
+}