a dotfile but it's really big
1{
2 config,
3 lib,
4 pkgs,
5 ...
6}:
7let
8 opencodePkg = pkgs.symlinkJoin {
9 name = "opencode.wrapped";
10 paths = [ pkgs.opencode ];
11 buildInputs = [ pkgs.makeWrapper ];
12 postBuild = ''
13 wrapProgram $out/bin/opencode \
14 --set SHELL ${lib.getExe pkgs.bash}
15 '';
16 };
17
18 cfg = config.dev.opencode;
19in
20lib.mkIf cfg.enable {
21 xdg.configFile."opencode/agents" = {
22 source = ./agents;
23 recursive = true;
24 };
25
26 xdg.configFile."opencode/skills" = {
27 source = ./skills;
28 recursive = true;
29 };
30
31 xdg.configFile."opencode/AGENTS.md".source = ./AGENTS.md;
32
33 programs.opencode = {
34 enable = true;
35 package = opencodePkg;
36 enableMcpIntegration = cfg.enableMcp;
37 settings = {
38 inherit (cfg) theme;
39 default_agent = "orchestrator";
40 permission = {
41 todoread = "deny";
42 todowrite = "deny";
43 external_directory = lib.genAttrs [ "~/go/pkg/mod/**" ] (_: "allow");
44 };
45 mcp = lib.mkIf cfg.enableMcp {
46 gopls = {
47 type = "local";
48 enabled = true;
49 command = [
50 "gopls"
51 "mcp"
52 ];
53 };
54 github = {
55 type = "remote";
56 url = "https://api.githubcopilot.com/mcp/";
57 headers = {
58 Authorization = "Bearer {env:GITHUB_TOKEN}";
59 };
60 enabled = false;
61 };
62 };
63 };
64 };
65
66 programs.git.ignores = lib.mkIf cfg.enableLangRules [ ".rules" ];
67 programs.helix.ignores = lib.mkIf cfg.enableLangRules [ "!.rules" ];
68}