This repository has no description
4.2 kB
121 lines
1{ self, inputs, ... }:
2{
3 perSystem =
4 { pkgs, ... }:
5 let
6 pi = inputs.wrappers.lib.wrapModule {
7 imports = [ self.wrapperModules.pi ];
8 inherit pkgs;
9
10 settings = {
11 packages = [
12 {
13 source = "npm:pi-hooks";
14 version = "1.0.3";
15 hash = "sha256-jU3akfqsWgjvOG+8+Md2qEzkXp48LUaXVncpUMXxy7s=";
16 deps = [
17 {
18 source = "npm:shell-quote";
19 version = "1.8.3";
20 hash = "sha256-32QLNUuvjigj1scqLlCVFTfgS3MHm9dBjPk9iVB+IsE=";
21 }
22 {
23 source = "npm:vscode-languageserver-protocol";
24 version = "3.17.5";
25 hash = "sha256-dHPrLSFj8/i+oJZE+dgDeJoZXllrZdOUbEFX5YPjzMg=";
26 deps = [
27 {
28 source = "npm:vscode-jsonrpc";
29 version = "8.2.0";
30 hash = "sha256-PaRFMcOY8VRQdMtyjjWagi81ufiscXHIR/QvByi5x8s=";
31 }
32 {
33 source = "npm:vscode-languageserver-types";
34 version = "3.17.5";
35 hash = "sha256-1nP55/i75RNRvlHFjzLU3PqXpnDruGvGMzaDlMYJysA=";
36 }
37 ];
38 }
39 ];
40 }
41 {
42 source = "npm:shitty-extensions";
43 version = "1.0.9";
44 hash = "sha256-g26MZ5x4HUcDai4SXPaOEhqgGGqzAI68znnsCbKJv7E=";
45 extensions = [ "!extensions/resistance.ts" ];
46 }
47 ];
48 extensions = [
49 ./questionnaire.ts
50 ./auto-theme.ts
51 ./websearch.ts
52 ./ollama.ts
53 ];
54 defaultProvider = "openrouter";
55 defaultModel = "deepseek/deepseek-v4-pro";
56 defaultThinkingLevel = "medium";
57 permissionLevel = "low";
58 permissionMode = "ask";
59 permissionConfig.overrides.minimal = [
60 "nix build *"
61 "nix eval *"
62 "nix fmt *"
63 ];
64 };
65
66 extraPackages = [
67 self.packages.${pkgs.system}.kagi-search
68 pkgs.curl
69 ];
70
71 pluginOverrides = ''
72 # Fix keybinding conflicts in extension source
73 ${pkgs.gnused}/bin/sed -i 's/"ctrl+u"/"ctrl+shift+u"/' $out/lib/node_modules/shitty-extensions/extensions/ultrathink.ts
74 ${pkgs.gnused}/bin/sed -i 's/"ctrl+r"/"ctrl+shift+r"/' $out/lib/node_modules/shitty-extensions/extensions/speedreading.ts
75
76 # Remove a-nach-b skill
77 rm -rf $out/lib/node_modules/shitty-extensions/skills/a-nach-b
78
79 # Add hedgedoc skill
80 ln -s ${
81 self.legacyPackages.${pkgs.system}.skills.hedgedoc
82 }/share/hedgedoc $out/lib/node_modules/shitty-extensions/skills/hedgedoc
83
84 # Add reverse-engineering skill
85 ln -s ${
86 self.legacyPackages.${pkgs.system}.skills.reverse-engineering
87 }/share/reverse-engineering $out/lib/node_modules/shitty-extensions/skills/reverse-engineering
88
89 # Patch permission extension to use pw-play for peon sounds on Linux
90 ${pkgs.lib.optionalString pkgs.stdenv.hostPlatform.isLinux ''
91 ${pkgs.python3}/bin/python3 ${./patch-permission-sound.py} \
92 $out/lib/node_modules/pi-hooks/permission/permission.ts \
93 ${pkgs.pipewire}/bin/pw-play
94 ''}
95 '';
96 };
97 in
98 {
99 packages.pi =
100 let
101 pinentry =
102 if pkgs.stdenv.isDarwin then
103 "${pkgs.pinentry_mac}/${pkgs.pinentry_mac.binaryPath}"
104 else
105 "${self.packages.${pkgs.system}.pinentry-rofi}/bin/pinentry-rofi";
106 in
107 pkgs.writeShellApplication {
108 name = "pi";
109 runtimeInputs = [ pkgs.rbw ];
110 text = ''
111 if [ -z "''${OPENROUTER_API_KEY:-}" ]; then
112 rbw config set pinentry ${pinentry}
113 rbw unlock
114 OPENROUTER_API_KEY=$(rbw get -f api_key openrouter.ai)
115 export OPENROUTER_API_KEY
116 fi
117 exec ${pi.wrapper}/bin/pi "$@"
118 '';
119 };
120 };
121}