From 39fb08bc485d46ea1bdf0538e7f4fe2045a053df Mon Sep 17 00:00:00 2001
From: matt1432 <matt@nelim.org>
Date: Sat, 11 May 2024 19:27:26 -0400
Subject: [PATCH] feat(nvim): setup jdtls

---
 common/home/neovim/langs/bash.nix | 10 ++++----
 common/home/neovim/langs/java.nix | 40 +++++++++++++++++++++++++++++++
 2 files changed, 45 insertions(+), 5 deletions(-)

diff --git a/common/home/neovim/langs/bash.nix b/common/home/neovim/langs/bash.nix
index 3bc5ffd1..b6d96618 100644
--- a/common/home/neovim/langs/bash.nix
+++ b/common/home/neovim/langs/bash.nix
@@ -18,6 +18,11 @@ in {
       viAlias = true;
       vimAlias = true;
 
+      extraPackages = lib.mkIf neovimIde [
+        pkgs.nodePackages.bash-language-server
+        pkgs.shellcheck
+      ];
+
       extraLuaConfig =
         lib.mkIf neovimIde
         /*
@@ -37,11 +42,6 @@ in {
               },
           }));
         '';
-
-      extraPackages = lib.mkIf neovimIde [
-        pkgs.nodePackages.bash-language-server
-        pkgs.shellcheck
-      ];
     };
   };
 }
diff --git a/common/home/neovim/langs/java.nix b/common/home/neovim/langs/java.nix
index 3edde6bd..f76fe677 100644
--- a/common/home/neovim/langs/java.nix
+++ b/common/home/neovim/langs/java.nix
@@ -38,6 +38,46 @@ in
           '';
 
         plugins = [
+          {
+            # TOOD: setup debugger https://github.com/mfussenegger/nvim-jdtls#debugger-via-nvim-dap
+            plugin = vimPlugins.nvim-jdtls;
+            type = "lua";
+            config =
+              /*
+              lua
+              */
+              ''
+                local startJdtls = function()
+                    local config = require('coq').lsp_ensure_capabilities({
+                        cmd = { '${pkgs.jdt-language-server}/bin/jdtls' },
+                        root_dir = vim.fs.dirname(vim.fs.find(
+                            { 'gradlew', '.git', 'mvnw', 'pom.xml' },
+                            { upward = true }
+                        )[1]),
+
+                        settings = {
+                            java = {
+                                configuration = {
+                                    runtimes = {
+                                        {
+                                            name = 'JavaSE-17',
+                                            path = '${javaSdk}',
+                                        },
+                                    },
+                                },
+                            },
+                        },
+                    });
+
+                    require('jdtls').start_or_attach(config);
+                end
+
+                vim.api.nvim_create_autocmd('FileType', {
+                    pattern = 'java',
+                    callback = startJdtls,
+                });
+              '';
+          }
         ];
       };
     };