main
 1{den, ...}: {
 2  den.aspects.develop.agents.opencode = {
 3    includes = [den.aspects.develop.agents];
 4
 5    persistHome = {config, ...}: {
 6      directories = [
 7        "${config.xdg.configHome}/opencode"
 8      ];
 9    };
10
11    cacheHome = {config, ...}: {
12      directories = [
13        "${config.xdg.dataHome}/opencode"
14        "${config.xdg.stateHome}/opencode"
15      ];
16    };
17
18    homeManager = {pkgs, ...}: {
19      programs.opencode = {
20        enable = true;
21        package = pkgs.llm-agents.opencode;
22        settings = {
23          permission = {
24            external_directory = {
25              "/nix/store/**" = "allow";
26            };
27            edit = {
28              "*" = "ask";
29              "/nix/store/**" = "deny";
30            };
31            grep = {
32              "/nix/store" = "deny";
33            };
34            webfetch = "ask";
35          };
36          mcp = {
37            deepwiki = {
38              type = "remote";
39              url = "https://mcp.deepwiki.com/mcp";
40            };
41          };
42          formatter = {
43            alejandra = {
44              command = ["alejandra" "$FILE"];
45              extensions = [".nix"];
46            };
47          };
48          plugin = [
49            "opencode-wakatime"
50            "@simonwjackson/opencode-direnv"
51          ];
52          skills = {
53            grilling = ./skills/grilling;
54            jujutsu = ./skills/jujutsu;
55          };
56        };
57      };
58    };
59  };
60
61  den.aspects.develop.opencode.themes = {
62    catppuccin = {
63      homeManager = {
64        programs.opencode = {
65          tui.theme = "catppuccin";
66        };
67      };
68    };
69  };
70}