From 593abb33df7dc81e4aa7ab740f9f2155abce9677 Mon Sep 17 00:00:00 2001 From: Rawley <75388349+rawleyfowler@users.noreply.github.com> Date: Mon, 16 Oct 2023 09:22:55 -0600 Subject: [PATCH] Add Java-LSP and a few nice defaults --- init.el | 122 ++++++++++++++++++++++---------------------------------- 1 file changed, 48 insertions(+), 74 deletions(-) diff --git a/init.el b/init.el index 9e8d450..06af4ef 100644 --- a/init.el +++ b/init.el @@ -2,20 +2,24 @@ ;;; Commentary: ;;; A simple Emacs configuration with Evil and Ivy, for Scala and Perl development. -(add-to-list 'default-frame-alist '(font . "JetBrainsMono Nerd Font-13")) -(setq - backup-by-copying t ; don't clobber symlinks - backup-directory-alist '(("." . "~/.saves")) ; don't litter my fs tree - delete-old-versions t - kept-new-versions 6 - kept-old-versions 2 - version-control t) +;;; Code: +(if (eq system-type 'darwin) + (set-face-attribute 'default nil :font "Monaco-16") + (add-to-list 'default-frame-alist '(font . "JetBrainsMono Nerd Font-16"))) +(make-directory "~/.emacs_backups/" t) +(make-directory "~/.emacs_autosave/" t) +(setq auto-save-file-name-transforms '((".*" "~/.emacs_autosave/" t))) +(setq backup-directory-alist '(("." . "~/.emacs_backups/"))) (setq package-enable-at-startup nil) (setq visible-bell nil) (setq ring-bell-function 'ignore) (setq shell-file-name "/bin/bash") (setq shell-command-switch "-ic") (setq indent-tabs-mode nil) +(setq require-final-newline t) +(setq frame-inhibit-implied-resize t) +(setq pixel-scroll-precision-mode t) +(setq show-trailing-whitespace t) (setq-default indent-tabs-mode nil) (setq-default tab-width 4) (tool-bar-mode -1) @@ -24,6 +28,8 @@ (show-paren-mode 1) (recentf-mode 1) (global-display-line-numbers-mode 1) +(add-to-list 'image-types 'svg) +(setq require-final-newline t) (defun set-exec-path-from-shell () "Set up Emacs' \='exec-path' and PATH environment." @@ -51,100 +57,69 @@ (package-initialize) -;; Install use-package if not already installed (unless (package-installed-p 'use-package) (package-refresh-contents) (package-install 'use-package)) (require 'use-package) -;; Various modes -(use-package raku-mode - :ensure t) -(use-package web-mode - :ensure t) -(use-package json-mode - :ensure t) -(use-package php-mode - :ensure t) -(use-package dockerfile-mode - :ensure t) +(use-package raku-mode) +(use-package web-mode) +(use-package json-mode) +(use-package dockerfile-mode) -;; Enable defer and ensure by default for use-package -;; Keep auto-save/backup files separate from source code: https://github.com/scalameta/metals/issues/1027 (setq use-package-always-defer t use-package-always-ensure t backup-directory-alist `((".*" . ,temporary-file-directory)) auto-save-file-name-transforms `((".*" ,temporary-file-directory t))) -;; Enable scala-mode for highlighting, indentation and motion commands (use-package scala-mode :interpreter ("scala" . scala-mode)) -;; Enable sbt mode for executing sbt commands (use-package sbt-mode :commands sbt-start sbt-command :config - ;; WORKAROUND: https://github.com/ensime/emacs-sbt-mode/issues/31 - ;; allows using SPACE when in the minibuffer (substitute-key-definition 'minibuffer-complete-word 'self-insert-command minibuffer-local-completion-map) - ;; sbt-supershell kills sbt-mode: https://github.com/hvesalai/emacs-sbt-mode/issues/152 - (setq sbt:program-options '("-Dsbt.supershell=false"))) + (setq sbt:program-options '("-Dsbt.supershell=false"))) -;; Enable nice rendering of diagnostics like compile errors. (use-package flycheck :init (global-flycheck-mode)) (use-package lsp-mode - ;; Optional - enable lsp-mode automatically in scala files - ;; You could also swap out lsp for lsp-deffered in order to defer loading - :hook (scala-mode . lsp) - (lsp-mode . lsp-lens-mode) - :config - ;; Uncomment following section if you would like to tune lsp-mode performance according to - ;; https://emacs-lsp.github.io/lsp-mode/page/performance/ - ;; (setq gc-cons-threshold 100000000) ;; 100mb - ;; (setq read-process-output-max (* 1024 1024)) ;; 1mb - ;; (setq lsp-idle-delay 0.500) - ;; (setq lsp-log-io nil) - ;; (setq lsp-completion-provider :capf) + :hook + (scala-mode . lsp) + (java-mode . lsp) + (lsp-mode . lsp-lens-mode) + :init + (setq lsp-completion-enable t) (setq lsp-prefer-flymake nil) - ;; Makes LSP shutdown the metals server when all buffers in the project are closed. - ;; https://emacs-lsp.github.io/lsp-mode/page/settings/mode/#lsp-keep-workspace-alive (setq lsp-keep-workspace-alive nil)) -;; Add metals backend for lsp-mode (use-package lsp-metals) - -;; Enable nice rendering of documentation on hover -;; Warning: on some systems this package can reduce your emacs responsiveness significally. -;; (See: https://emacs-lsp.github.io/lsp-mode/page/performance/) -;; In that case you have to not only disable this but also remove from the packages since -;; lsp-mode can activate it automatically. (use-package lsp-ui) - -;; lsp-mode supports snippets, but in order for them to work you need to use yasnippet -;; If you don't want to use snippets set lsp-enable-snippet to nil in your lsp-mode settings -;; to avoid odd behavior with snippets and indentation (use-package yasnippet) -;; Use company-capf as a completion provider. -;; -;; To Company-lsp users: -;; Company-lsp is no longer maintained and has been removed from MELPA. -;; Please migrate to company-capf. +(use-package lsp-java + :after lsp) + +(use-package java + :ensure nil + :after lsp-java + :bind (:map java-mode-map ("C-c i" . lsp-java-add-import))) + (use-package company - :hook (scala-mode . company-mode) + :hook + (scala-mode . company-mode) + (tuareg-mode . company-mode) + (java-mode . company-mode) :config (setq lsp-completion-provider :capf)) -;; Posframe is a pop-up tool that must be manually installed for dap-mode (use-package posframe) -;; Use the Debug Adapter Protocol for running tests and debugging (use-package dap-mode :hook (lsp-mode . dap-mode) @@ -235,13 +210,6 @@ )) (add-to-list 'auto-mode-alist '("\\.html.ep\\'" . web-mode)) ; Mojolicious templates -;; Ruby -(use-package robe - :ensure t - :config - (add-hook 'ruby-mode-hook 'robe-mode) - (add-hook 'ruby-ts-mode-hook 'robe-mode)) - ;; OCaml (use-package tuareg :ensure t @@ -252,10 +220,8 @@ (use-package merlin :ensure t - :config - (add-hook 'tuareg-mode-hook #'merlin-mode) - (add-hook 'merlin-mode-hook #'company-mode) - (setq merlin-error-after-save nil)) + :hook + ((tuareg-mode) . #'merlin-mode)) (use-package merlin-eldoc :ensure t @@ -270,6 +236,7 @@ :ensure t :config (add-hook 'tuareg-mode-hook #'utop-minor-mode)) + (custom-set-variables ;; custom-set-variables was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. @@ -277,7 +244,14 @@ ;; If there is more than one, they won't work right. '(delete-selection-mode nil) '(package-selected-packages - '(raku-mode yasnippet utop use-package tree-sitter-langs sbt-mode robe merlin-eldoc lsp-ui lsp-metals ivy-rich flycheck-ocaml evil dune counsel company))) + '(evil-mode ivy-rich counsel dap-mode company yasnippet lsp-ui lsp-metals lsp-mode sbt-mode yaml-mode web-mode tree-sitter-langs spinner smex scala-mode s raku-mode php-mode markdown-mode magit lv json-mode ht flycheck evil dracula-theme dockerfile-mode ctrlf centaur-tabs)) + '(safe-local-variable-values + '((eval setq flycheck-perl-include-path + (add-to-list 'flycheck-perl-include-path + (concat + (expand-file-name + (locate-dominating-file default-directory ".dir-locals.el")) + "lib")))))) (custom-set-faces ;; custom-set-faces was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful.