main
1{
2 den,
3 inputs,
4 ...
5}: {
6 den.aspects.dev.agents.opencode = {
7 includes = [den.aspects.dev.agents];
8
9 persistHome = {config, ...}: {
10 directories = [
11 "${config.xdg.config.directory}/opencode"
12 ];
13 };
14
15 cacheHome = {config, ...}: {
16 directories = [
17 "${config.xdg.data.directory}/opencode"
18 "${config.xdg.state.directory}/opencode"
19 ];
20 };
21
22 hjem = {
23 config,
24 pkgs,
25 ...
26 }: let
27 mkJailedAgent =
28 (import ./_jail.nix {
29 inherit pkgs;
30 jail = inputs.jail-nix.lib.init pkgs;
31 }).mkJailedAgent;
32
33 agent = mkJailedAgent {
34 name = "opencode";
35 pkg = pkgs.opencode;
36 configPaths = [
37 "${config.xdg.config.directory}/opencode"
38 "${config.xdg.data.directory}/opencode"
39 "${config.xdg.state.directory}/opencode"
40 ];
41 env.OPENCODE_DISABLE_LSP_DOWNLOAD = "true";
42 };
43 in {
44 packages = [agent.jailed agent.unjailed];
45
46 environment.sessionVariables = {
47 OPENCODE_DISABLE_LSP_DOWNLOAD = "true";
48 };
49
50 xdg.config.files."opencode/opencode.json" = {
51 generator = (pkgs.formats.json {}).generate "opencode-config.json";
52 value = {
53 permission = {
54 external_directory = {
55 "/nix/store/**" = "allow";
56 };
57 edit = {
58 "*" = "ask";
59 "/nix/store/**" = "deny";
60 };
61 grep = {
62 "/nix/store" = "deny";
63 };
64 webfetch = "ask";
65 };
66 mcp = {
67 deepwiki = {
68 type = "remote";
69 url = "https://mcp.deepwiki.com/mcp";
70 };
71 };
72 lsp = true;
73 formatter = {
74 alejandra = {
75 command = ["alejandra" "$FILE"];
76 extensions = [".nix"];
77 };
78 };
79 plugin = [
80 "opencode-wakatime"
81 "@simonwjackson/opencode-direnv"
82 ];
83 };
84 };
85
86 xdg.config.files."opencode/tui.json" = {
87 generator = (pkgs.formats.json {}).generate "opencode-config-tui.json";
88 value = {
89 };
90 };
91
92 xdg.config.files."opencode/skills" = {
93 source = "${config.xdg.config.directory}/agents/skills";
94 };
95
96 xdg.config.files."opencode/AGENTS.md" = {
97 source = "${config.xdg.config.directory}/agents/AGENTS.md";
98 };
99 };
100 };
101
102 den.aspects.develop.opencode.themes = {
103 catppuccin = {
104 hjem.xdg.config.files."opencode/tui.json".value.theme = "catppuccin";
105 };
106 };
107}