Commit c07b0a5

HPCesia <me@hpcesia.com>
2026-09-06 15:28:03
pi-coding-agent: init
1 parent 3ecec99
Changed files (2)
modules
dev
agents
users
hpcesia
modules/dev/agents/pi.nix
@@ -0,0 +1,135 @@
+{den, ...}: {
+  den.aspects.dev.agents.pi = {
+    includes = [den.aspects.dev.agents];
+
+    persistHome = {config, ...}: {
+      directories = [
+        "${config.xdg.config.directory}/pi"
+      ];
+    };
+
+    cacheHome = {config, ...}: {
+      directories = [
+        "${config.xdg.data.directory}/pi"
+      ];
+    };
+
+    hjem = {
+      pkgs,
+      lib,
+      config,
+      ...
+    }: {
+      packages = [
+        (pkgs.symlinkJoin {
+          name = "pi-coding-agent";
+          buildInputs = [pkgs.makeWrapper];
+          paths = [pkgs.pi-coding-agent];
+          postBuild = ''
+            wrapProgram $out/bin/pi \
+              --set PI_CODING_AGENT_DIR ${config.xdg.config.directory}/pi \
+              --suffix PATH : ${lib.makeBinPath [pkgs.nodejs]} \
+              --run 'export NPM_CONFIG_PREFIX="''${NPM_CONFIG_PREFIX:-''${XDG_DATA_HOME:-$HOME/.local/share}/pi/npm}"'
+          '';
+        })
+      ];
+
+      xdg.config.files."pi/settings.json" = {
+        type = "copy";
+        permissions = "0600";
+        generator = lib.generators.toJSON {};
+        value = {
+          sessionDir = "${config.xdg.data.directory}/pi/sessions";
+          mcp = "./mcp.json";
+          packages = [
+            "npm:@gotgenes/pi-permission-system"
+            "npm:@narumitw/pi-btw"
+            "npm:@narumitw/pi-lsp"
+            "npm:pi-mcp-adapter"
+            "npm:pi-wakatime"
+            "npm:pi-web-access"
+          ];
+
+          collapseChangelog = true;
+          enableInstallTelemetry = false;
+
+          showHardwareCursor = true;
+          tuiMode = "fullscreen";
+
+          defaultProvider = "deepseek";
+          defaultModel = "deepseek-v4-flash-vision-exp";
+          defaultThinkingLevel = "max";
+
+          compaction.enabled = false;
+        };
+      };
+
+      xdg.config.files."pi/mcp.json" = {
+        type = "copy";
+        permissions = "0600";
+        generator = lib.generators.toJSON {};
+        value = {
+          mcpServers = {
+            deepwiki.url = "https://mcp.deepwiki.com/mcp";
+          };
+        };
+      };
+
+      xdg.config.files."pi/extensions/pi-permission-system/config.json" = {
+        type = "copy";
+        generator = lib.generators.toJSON {};
+        value = {
+          permission = {
+            "*" = "allow";
+            path = {
+              "*" = "allow";
+              "*.env" = "deny";
+              "*.env.*" = "deny";
+              "*.env.example" = "allow";
+            };
+            external_directory = {
+              "*" = "ask";
+              "/tmp/pi/*" = "allow";
+              "/nix/store/*" = "allow";
+            };
+            external_directory_read = {
+              "${config.xdg.user-dirs.directories.projects}/*" = "allow";
+            };
+            bash = {
+              "*" = "allow";
+              "rm -rf *" = "ask";
+              "sudo *" = "deny";
+            };
+          };
+        };
+      };
+
+      xdg.config.files."pi/skills" = {
+        source = "${config.xdg.config.directory}/agents/skills";
+      };
+
+      xdg.config.files."pi/AGENTS.md" = {
+        source = "${config.xdg.config.directory}/agents/AGENTS.md";
+      };
+    };
+  };
+
+  den.aspects.dev.agents.pi.themes = {
+    catppuccin = {
+      hjem = {pkgs, ...}: let
+        pi-coding-agent-catppuccin-theme = pkgs.fetchurl {
+          url = "https://github.com/otahontas/pi-coding-agent-catppuccin/raw/9a716a630c911a4d29d9520a8d5f87e3b8867f93/catppuccin-mocha.json";
+          hash = "sha256-RHWmb46RgoLmQjOKXDwB4JPHTQjfC2mqy2btMDewBZU=";
+        };
+      in {
+        xdg.config.files."pi/settings.json".value = {
+          theme = "catppuccin-mocha";
+        };
+
+        xdg.config.files."pi/themes/catppuccin-mocha.json" = {
+          source = pi-coding-agent-catppuccin-theme;
+        };
+      };
+    };
+  };
+}
modules/users/hpcesia/dev.nix
@@ -5,6 +5,7 @@ in {
   den.aspects.hpcesia = {
     includes = includeWhen ({host, ...}: host.hasAspect den.aspects.dev) (with den.aspects; [
       dev.agents.opencode
+      dev.agents.pi
       dev.direnv
       dev.editor.helix
       dev.jujutsu