diff --git a/modules/nixos/programs/emacs/default.nix b/modules/nixos/programs/emacs/default.nix index bc3c32e7..32c30bc6 100644 --- a/modules/nixos/programs/emacs/default.nix +++ b/modules/nixos/programs/emacs/default.nix @@ -62,16 +62,25 @@ in # Python nodePackages.pyright ruff-lsp + # Java + jdk21 + jdt-language-server ]; elementary.home = { programs.emacs = { enable = true; package = emacsPackage; + extraConfig = '' + (setq lsp-java-server-install-dir "${pkgs.jdt-language-server}/share/java/jdtls") + (setq lsp-java-server-config-dir (concat (file-name-as-directory (xdg-config-home)) "lsp-java/config_linux/")) + (add-to-list 'lsp-java-vmargs "-javaagent:${pkgs.elementary.lombok-jar}/share/java/lombok.jar") + ''; }; file = { ".emacs.d/init.el".source = ./init.el; ".emacs.d/early-init.el".text = earlyInitText; + ".config/lsp-java/config_linux/config.ini".source = "${pkgs.jdt-language-server}/share/java/jdtls/config_linux/config.ini"; }; }; diff --git a/modules/nixos/programs/emacs/init.el b/modules/nixos/programs/emacs/init.el index 149e8aaa..20abe0bc 100644 --- a/modules/nixos/programs/emacs/init.el +++ b/modules/nixos/programs/emacs/init.el @@ -657,6 +657,12 @@ (bound-and-true-p lsp-mode)) (lsp-format-buffer))))) +(use-package lsp-java + :init + (add-hook 'java-ts-mode-hook . (lambda () + (require 'lsp-java) + (lsp)))) + (use-package markdown-mode :custom (markdown-fontify-code-blocks-natively t) diff --git a/packages/lombok-jar/default.nix b/packages/lombok-jar/default.nix new file mode 100644 index 00000000..70aff43a --- /dev/null +++ b/packages/lombok-jar/default.nix @@ -0,0 +1,25 @@ +{ lib, stdenv, fetchurl }: + +stdenv.mkDerivation rec { + pname = "lombok-jar"; + version = "1.18.30"; + + src = fetchurl { + url = "https://projectlombok.org/downloads/lombok-${version}.jar"; + sha256 = "sha256-1+4SLu4erutFGCqJ/zb8LdCGhY0bL1S2Fcb+97odYBI="; + }; + + buildCommand = '' + mkdir -p $out/share/java + cp $src $out/share/java/lombok.jar + ''; + + meta = { + description = "A library that can write a lot of boilerplate for your Java project"; + platforms = lib.platforms.all; + sourceProvenance = with lib.sourceTypes; [ binaryBytecode ]; + license = lib.licenses.mit; + homepage = "https://projectlombok.org/"; + maintainers = [ lib.maintainers.CrystalGamma ]; + }; +}