228 lines
6.9 KiB
Nix
228 lines
6.9 KiB
Nix
{
|
|
den,
|
|
modules,
|
|
inputs,
|
|
...
|
|
}:
|
|
{
|
|
modules.pi-coding = {
|
|
homeManager =
|
|
{ pkgs, ... }:
|
|
{
|
|
programs.pi-coding-agent = {
|
|
enable = true;
|
|
extraPackages = [
|
|
pkgs.nodejs
|
|
# pkgs.lean-lsp-mcp
|
|
];
|
|
package = pkgs.pi-coding-agent.overrideAttrs (
|
|
new: old: {
|
|
version = "0.81.1";
|
|
|
|
src = pkgs.fetchFromGitHub {
|
|
owner = "earendil-works";
|
|
repo = "pi";
|
|
tag = "v${new.version}";
|
|
hash = "sha256-xo3uoR7HceOCL3wqoMcacOe8WXP1o7ReAXne5t6Hgao=";
|
|
};
|
|
|
|
npmDepsHash = "sha256-lzKQZbnITzgV9koucsMno6f61ubBLYUcwQEXtak1r1s=";
|
|
# npmDepsHash = pkgs.lib.fakeHash;
|
|
|
|
# npmDepsHash = "sha256-lDoj/94tjJd4ZGU9WgrMOqNSmdpeCljU4c6jGX+TSDY=";
|
|
|
|
npmDeps = pkgs.fetchNpmDeps {
|
|
inherit (new) src;
|
|
name = "pi-coding-agent-0.81.1-npm-deps";
|
|
hash = new.npmDepsHash;
|
|
};
|
|
modelData = pkgs.fetchurl {
|
|
url = "https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-${new.version}.tgz";
|
|
hash = "sha256-x53MD5DU370ZdNoz36P+OWZjGVpoM5sfVcEU2/ckDy8=";
|
|
# hash = pkgs.lib.fakeHash;
|
|
};
|
|
preConfigure = ''
|
|
mkdir -p packages/ai/src/providers/data
|
|
tar --extract --gzip --file=${new.modelData} \
|
|
--directory=packages/ai/src/providers/data \
|
|
--strip-components=4 \
|
|
package/dist/providers/data
|
|
'';
|
|
passthru.updateScript = pkgs.nix-update-script {
|
|
extraArgs = [
|
|
"--custom-dep"
|
|
"modelData"
|
|
];
|
|
};
|
|
}
|
|
);
|
|
settings = {
|
|
"litellm" = {
|
|
"providers" = {
|
|
"litellm" = {
|
|
"displayName" = "scuggo";
|
|
"baseUrl" = "https://9f5db439.fwds.scug.io";
|
|
"apiKey" = "$SCUG_IO_API_KEY";
|
|
"compat" = {
|
|
"sendSessionAffinityHeaders" = true;
|
|
};
|
|
};
|
|
};
|
|
"skills" = {
|
|
"enabled" = true;
|
|
};
|
|
"compat" = {
|
|
"sendSessionAffinityHeaders" = true;
|
|
};
|
|
"mcp" = {
|
|
"enabled" = true;
|
|
};
|
|
"showCacheMissNotices" = true;
|
|
"qol" = {
|
|
"permissionGate" = {
|
|
"enabled" = true;
|
|
"commands" = "rm -Rf,rm -rf,sudo,chmod,chown,mkfs,dd,shutdown,reboot,poweroff";
|
|
"previewLines" = 12;
|
|
"previewChars" = 1200;
|
|
};
|
|
};
|
|
};
|
|
"mcp" = {
|
|
"enabled" = true;
|
|
};
|
|
packages = [
|
|
# "npm:@odinlayer/pi-provider-litellm"
|
|
# "npm:pi-provider-litellm"
|
|
"npm:@juanibiapina/pi-extension-settings"
|
|
"git:github.com/balcsida/pi-provider-litellm"
|
|
# "npm:pi-web-access"
|
|
# "npm:@gotgenes/pi-permission-system"
|
|
"npm:@vanillagreen/pi-qol"
|
|
"npm:pi-vitals"
|
|
"npm:pi-spark"
|
|
"npm:@zhushanwen/pi-context-engineering"
|
|
"npm:pi-caveman"
|
|
"npm:@tmustier/pi-usage-extension"
|
|
"npm:@heyhuynhgiabuu/pi-pretty"
|
|
"npm:pi-lens"
|
|
# "npm:pi-lean-ctx"
|
|
# "npm:@rohaquinlop/pi-deepseek-cache"
|
|
"npm:pi-cache-optimizer"
|
|
];
|
|
};
|
|
context = "Heavily prefer to use any appropriate tools instead of raw cmd";
|
|
};
|
|
|
|
# pi-vitals config
|
|
home.file.".pi/agent/powerline.json" = {
|
|
text = builtins.toJSON {
|
|
leftSegments = [
|
|
"pi"
|
|
"separator"
|
|
"model"
|
|
"thinking"
|
|
"ext_status"
|
|
"separator"
|
|
"path"
|
|
"git"
|
|
"separator"
|
|
"token_total"
|
|
"token_in"
|
|
"token_out"
|
|
"cache_read"
|
|
"cache_write"
|
|
];
|
|
rightSegments = [
|
|
"separator"
|
|
"cost"
|
|
"context_pct"
|
|
];
|
|
icons = {
|
|
pi = "π";
|
|
model = "◈";
|
|
thinking = "🧠";
|
|
folder = "📁";
|
|
repo = "📦";
|
|
git = "⎇";
|
|
tokens = "⊛";
|
|
input = "↑";
|
|
output = "↓";
|
|
cacheRead = "↙";
|
|
cacheWrite = "↗";
|
|
contextPct = "◫";
|
|
cost = "$";
|
|
separator = "│";
|
|
};
|
|
colors = {
|
|
pi = "accent";
|
|
model = "#d787af";
|
|
path = "#00afaf";
|
|
git = "success";
|
|
gitDirty = "warning";
|
|
gitClean = "success";
|
|
thinking = "muted";
|
|
context = "dim";
|
|
contextWarn = "warning";
|
|
contextError = "error";
|
|
cost = "text";
|
|
tokens = "muted";
|
|
separator = "dim";
|
|
};
|
|
segmentOptions = {
|
|
path = {
|
|
mode = "basename";
|
|
};
|
|
git = {
|
|
showBranch = true;
|
|
showStaged = true;
|
|
showUnstaged = true;
|
|
showUntracked = true;
|
|
};
|
|
context_pct = {
|
|
showAutoIcon = false;
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
# pi-spark config
|
|
home.file.".pi/agent/spark.json" = {
|
|
text = builtins.toJSON {
|
|
editor = {
|
|
spinner = "tildes";
|
|
};
|
|
footer = false;
|
|
presets = {
|
|
"scuggo" = {
|
|
provider = "litellm";
|
|
model = "meow";
|
|
thinkingLevel = "medium";
|
|
};
|
|
"claude" = {
|
|
provider = "anthropic";
|
|
model = "claude-opus-4-8";
|
|
thinkingLevel = "high";
|
|
};
|
|
"gpt" = {
|
|
provider = "openai-codex";
|
|
model = "gpt-5.5";
|
|
thinkingLevel = "medium";
|
|
};
|
|
};
|
|
recap = {
|
|
idle = "5m";
|
|
provider = "openai-codex";
|
|
model = "gpt-5.4-mini";
|
|
thinkingLevel = "off";
|
|
};
|
|
title = {
|
|
provider = "openai-codex";
|
|
model = "gpt-5.4-mini";
|
|
thinkingLevel = "off";
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
}
|