Commit c07b0a5
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