This commit is contained in:
2026-09-19 20:56:43 +01:00
parent 19e49e90f5
commit 84bd80f82a
7 changed files with 237 additions and 106 deletions
+18 -17
View File
@@ -21,25 +21,26 @@
enable = true;
extraPackages = with pkgs; [
rust-analyzer
# rust-analyzer
typescript-language-server
];
context = ''
Instructions:
Instructions:
- Do NOT preemptively load all references - use lazy loading based on actual need
- When loaded, treat content as mandatory instructions that override defaults
- Follow references recursively when needed
- Do NOT preemptively load all references - use lazy loading based on actual need
- When loaded, treat content as mandatory instructions that override defaults
- Follow references recursively when needed
- NO EMOJIS
- NO EMOJIS
- If you've been looking a lot for something you cant seem to find and you havent been explicitly told to keep going, you're allowed to say 'i cant find it'
'';
settings = {
"lsp" = true;
plugin = [
"@tarquinen/opencode-dcp@latest"
"@xberg-io/opencode-xberg"
"@xberg-io/opencode-crawlberg"
"@xberg-io/opencode-html-to-markdown"
# "@xberg-io/opencode-crawlberg"
# "@xberg-io/opencode-html-to-markdown"
"@xberg-io/opencode-liter-llm"
"opencode-plugin-litellm@latest"
"@dietrichgebert/ponytail"
@@ -51,7 +52,7 @@
# Replace/extend the per-model system prompt via
# ~/.config/opencode/system-prompts.json
# (https://github.com/kmcquade/opencode-sysprompt-override-plugin)
"opencode-sysprompt-override@latest"
# "opencode-sysprompt-override@latest"
];
provider.litellm = {
npm = "@ai-sdk/openai-compatible";
@@ -68,14 +69,14 @@
apiKey = "{env:OPENCODE_GO_API_KEY}";
};
};
provider.commandcode = {
npm = "@ai-sdk/openai-compatible";
name = "Command Code";
options = {
baseURL = "https://api.commandcode.ai/provider/v1";
apiKey = "{env:COMMANDCODE_API_KEY}";
};
};
# provider.commandcode = {
# npm = "@ai-sdk/openai-compatible";
# name = "Command Code";
# options = {
# baseURL = "https://api.commandcode.ai/provider/v1";
# apiKey = "{env:COMMANDCODE_API_KEY}";
# };
# };
};
# TUI plugin: token-tracker (https://github.com/eserete/opencode-token-tracker)
tui = {
+57 -14
View File
@@ -16,23 +16,20 @@
# pkgs.lean-lsp-mcp
];
settings = {
"defaultProvider" = "opencode-go";
"defaultModel" = "mimo-v2.5";
"defaultThinkingLevel" = "medium";
"litellm" = {
"providers" = {
"litellm" = {
"displayName" = "scuggo";
"baseUrl" = "https://ai-proxy.fwds.scug.io";
"apiKey" = "$SCUG_IO_API_KEY";
"compat" = {
"sendSessionAffinityHeaders" = true;
};
};
};
"skills" = {
"enabled" = true;
};
"compat" = {
"sendSessionAffinityHeaders" = true;
};
};
"mcp" = {
"enabled" = true;
@@ -66,7 +63,8 @@
"npm:pi-opencode-go-cache"
"npm:@pi-vault/pi-dcp"
"git:github.com/DietrichGebert/ponytail"
"npm:pi-commandcode-provider"
"npm:pi-open-tui"
# "npm:pi-commandcode-provider"
];
};
context = ''
@@ -173,20 +171,26 @@
"type" = "api_key";
"key" = "$OPENCODE_GO_API_KEY";
};
"command-code" = {
"type" = "api_key";
"key" = "$COMMANDCODE_API_KEY";
};
# "command-code" = {
# "type" = "api_key";
# "key" = "$COMMANDCODE_API_KEY";
# };
};
};
# Cache/routing compat overrides (provider-level minimal)
home.file.".pi/agent/models.json" = {
text = builtins.toJSON {
providers = {
"providers" = {
"opencode" = {
"compat" = {
"sendSessionAffinityHeaders" = true;
};
};
"opencode-go" = {
compat = {
supportsLongCacheRetention = true;
"compat" = {
"supportsLongCacheRetention" = true;
"sendSessionAffinityHeaders" = true;
};
};
};
@@ -223,6 +227,45 @@
};
};
# open-tui.json config
home.file.".pi/agent/open-tui.json" = {
text = builtins.toJSON {
enabled = true;
settingsLanguage = "en";
cursorStyle = "block";
fullscreen = {
wheelScrollLines = 4;
};
icons = {
mode = "auto";
};
footerSegments = {
cwd = true;
sessionName = false;
gitBranch = true;
gitStatus = true;
gitCommit = false;
runtime = true;
context = true;
tokens = true;
cost = true;
extensionStatuses = false;
};
telemetry = {
enabled = true;
tps = false;
ttft = false;
duration = true;
tokens = true;
stalls = true;
cost = true;
};
thinkingPeek = {
lines = 1;
};
};
};
# pi-spark config
home.file.".pi/agent/spark.json" = {
text = builtins.toJSON {
+2 -1
View File
@@ -5,6 +5,7 @@
doloro-settings = {
includes = [
modules.dunst
modules.hyprlock
];
homeManager =
{
@@ -88,7 +89,7 @@
layout = [
{
label = "lock";
action = "loginctl lock-session";
action = "hyprlock";
text = "Lock";
keybind = "l";
}
+62
View File
@@ -0,0 +1,62 @@
{ modules, ... }:
{
modules.hyprlock = {
homeManager =
_:
let
# Palette extracted from the hyprpaper wallpaper so the input field
# matches the background. Regenerate and update when Wallpaper.jpg
# changes:
# nix run nixpkgs#matugen -- image ~/Wallpaper.jpg -m dark \
# --source-color-index 0 --dry-run --show-colors
#
# name (matugen token) hex rgb()
primary = "rgb(135, 209, 235)"; # #87D1EB accent / success
tertiary = "rgb(194, 195, 235)"; # #C2C3EB capslock
error = "rgb(255, 180, 171)"; # #FFB4AB failure
outline = "rgb(137, 146, 150)"; # #899296 neutral border
on_surface = "rgb(222, 227, 230)"; # #DEE3E6 text/dots
inner_color = "rgba(27, 32, 35, 0.6)"; # #1B2023 @ 60%
in
{
programs.hyprlock = {
enable = true;
settings = {
# Reuse the hyprpaper wallpaper (see doloro-settings hyprpaper
# config) as the lock screen background. monitor = "" covers every
# output.
background = [
{
monitor = "";
path = "/home/doloro/Wallpaper.jpg";
}
];
# hyprlock has no input-field by default, so one must be declared
# explicitly or there is no password prompt to unlock with.
input-field = [
{
monitor = "DP-2";
size = "200, 50";
position = "0, -80";
rounding = 4;
dots_center = true;
dots_size = 0.33;
hide_input = false;
fade_on_empty = false;
font_family = "CaskaydiaCove Nerd Font Mono";
placeholder_text = ''<span foreground="##899296">Password...</span>'';
fail_text = ''<i>$FAIL <b>($ATTEMPTS)</b></i>'';
inherit inner_color;
outer_color = outline;
check_color = primary;
fail_color = error;
capslock_color = tertiary;
font_color = on_surface;
}
];
};
};
};
nixos.security.pam.services.hyprlock = { };
};
}
+14 -2
View File
@@ -42,6 +42,17 @@
# nvim-cmp on rtp during the require check (cmp_lsp_rs requires cmp.types.lsp at load time)
dependencies = [ pkgs.vimPlugins.nvim-cmp ];
};
treesitter-rhai-grammar = pkgs.tree-sitter.buildGrammar {
language = "rhai";
version = "0.0.0+rev=4ac7384";
src = pkgs.fetchFromGitHub {
owner = "elkowar";
repo = "tree-sitter-rhai";
rev = "4ac7384d487ffcb54e746ef1569585a749370c5b";
hash = "sha256-XGGcEGHke/O00STKqwSk9jGj91Xm2LE2KxwwX5+bBg0=";
};
meta.homepage = "https://github.com/elkowar/tree-sitter-rhai";
};
in
{
imports = [
@@ -298,7 +309,7 @@
wakatime.enable = true;
treesitter = {
enable = true;
grammarPackages = with pkgs.vimPlugins.nvim-treesitter.builtGrammars; [
grammarPackages = (with pkgs.vimPlugins.nvim-treesitter.builtGrammars; [
bash
css
html
@@ -318,7 +329,7 @@
xml
yaml
svelte
];
]) ++ [ treesitter-rhai-grammar ];
settings = {
highlight.enable = true;
indent.enable = false;
@@ -328,6 +339,7 @@
extraPlugins = with pkgs; [
tiny-code-action
cmp-lsp-rs
treesitter-rhai-grammar
];
opts = {
number = true;
+12
View File
@@ -14,6 +14,12 @@
imports = [
inputs.sops-nix.homeManagerModules.sops
];
nixpkgs.overlays = [
# Sops's go version went EOL, https://github.com/Mic92/sops-nix/issues/983
(final: prev: {
buildGo125Module = prev.buildGoModule;
})
];
sops = {
age.keyFile = "/home/doloro/.config/sops/age/keys.txt"; # must have no password!
# I HATE YOU
@@ -26,6 +32,12 @@
imports = [
inputs.sops-nix.nixosModules.sops
];
nixpkgs.overlays = [
# Sops's go version went EOL, https://github.com/Mic92/sops-nix/issues/983
(final: prev: {
buildGo125Module = prev.buildGoModule;
})
];
sops = {
# age.keyFile = "/etc/ssh/ssh_host_ed25519_key";
defaultSopsFile = ./content/secrets.yaml;