163 lines
4.5 KiB
Nix
163 lines
4.5 KiB
Nix
{
|
|
inputs,
|
|
config,
|
|
lib,
|
|
pkgs,
|
|
...
|
|
}:
|
|
|
|
let
|
|
cfg = config.modules.ai.opencode;
|
|
in
|
|
{
|
|
options.modules.ai.opencode = {
|
|
enable = lib.my.mkBoolOpt false;
|
|
};
|
|
config = lib.mkIf cfg.enable {
|
|
home-manager.users.${config.user.name} =
|
|
{ ... }:
|
|
{
|
|
programs.opencode = {
|
|
enable = true;
|
|
package = inputs.llm-agents.packages.${pkgs.system}.opencode;
|
|
settings = {
|
|
model = "minimax_m2_1";
|
|
permission = {
|
|
external_directory = {
|
|
"*" = "ask";
|
|
"/nix/store/**" = "allow";
|
|
};
|
|
|
|
bash = {
|
|
"*" = "ask";
|
|
|
|
pwd = "allow";
|
|
whoami = "allow";
|
|
id = "allow";
|
|
"uname*" = "allow";
|
|
"date*" = "allow";
|
|
"ls*" = "allow";
|
|
"stat*" = "allow";
|
|
"readlink*" = "allow";
|
|
"realpath*" = "allow";
|
|
"tree*" = "allow";
|
|
"du -sh*" = "allow";
|
|
"rg*" = "allow";
|
|
"fd*" = "allow";
|
|
"find*" = "allow";
|
|
"cat*" = "allow";
|
|
"head*" = "allow";
|
|
"wc*" = "allow";
|
|
"tail*" = "allow";
|
|
"sort*" = "allow";
|
|
"uniq*" = "allow";
|
|
"cut*" = "allow";
|
|
|
|
"git status*" = "allow";
|
|
"git diff*" = "allow";
|
|
"git log*" = "allow";
|
|
"git show*" = "allow";
|
|
"git ls-files*" = "allow";
|
|
"git blame*" = "allow";
|
|
"git branch*" = "allow";
|
|
"git tag*" = "allow";
|
|
"git rev-parse*" = "allow";
|
|
"git remote -v" = "allow";
|
|
|
|
"node -v" = "allow";
|
|
"npm -v" = "allow";
|
|
"python --version" = "allow";
|
|
"pip --version" = "allow";
|
|
"nix --version" = "allow";
|
|
|
|
"nix path-info*" = "allow";
|
|
"nix-store --query*" = "allow";
|
|
"nix-store -q*" = "allow";
|
|
"nix eval*" = "allow";
|
|
"nix search*" = "allow";
|
|
"nix flake show*" = "allow";
|
|
|
|
"git commit*" = "ask";
|
|
"git push*" = "ask";
|
|
"npm install*" = "ask";
|
|
"nixos-rebuild*" = "ask";
|
|
"systemctl*" = "ask";
|
|
"rm *" = "ask";
|
|
};
|
|
|
|
edit = {
|
|
"*" = "ask";
|
|
"/nix/store/**" = "deny";
|
|
"/run/current-system/**" = "deny";
|
|
"/nix/var/nix/profiles/system/**" = "deny";
|
|
"/etc/static/**" = "deny";
|
|
};
|
|
|
|
skill = {
|
|
"*" = "allow";
|
|
};
|
|
};
|
|
provider = {
|
|
vllm = {
|
|
npm = "@ai-sdk/openai-compatible";
|
|
name = "vLLM";
|
|
|
|
options = {
|
|
baseURL = "http://model1.lefoyer.lu:8030/v1";
|
|
apiKey = "dummy";
|
|
};
|
|
|
|
models = {
|
|
minimax_m2_1 = {
|
|
name = "MiniMax M2.1 (local)";
|
|
temperature = true;
|
|
default = true;
|
|
};
|
|
};
|
|
};
|
|
};
|
|
agent = {
|
|
build = {
|
|
mode = "primary";
|
|
temperature = 0.1;
|
|
};
|
|
plan = {
|
|
mode = "primary";
|
|
temperature = 0.4;
|
|
};
|
|
debug = {
|
|
disable = false;
|
|
temperature = 0.15;
|
|
prompt = "{file:${./prompts/debug-rules.txt}}";
|
|
permission = {
|
|
edit = "deny";
|
|
task = {
|
|
"*" = "deny";
|
|
"explore" = "allow";
|
|
"general" = "ask";
|
|
};
|
|
};
|
|
};
|
|
review = {
|
|
disable = false;
|
|
};
|
|
};
|
|
lsp = {
|
|
metals = {
|
|
command = [ "${pkgs.metals}/bin/metals" ];
|
|
extensions = [
|
|
".scala"
|
|
".sbt"
|
|
".sc"
|
|
];
|
|
initialization = {
|
|
statusBarProvider = "log-message";
|
|
doctorProvider = "json";
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
}
|