154 lines
4.8 KiB
EmacsLisp
154 lines
4.8 KiB
EmacsLisp
;; -*- lexical-binding: t; -*-
|
|
|
|
(use-package apheleia
|
|
:defer t
|
|
:bind ("C-c t a" . apheleia-mode)
|
|
:init (apheleia-global-mode)
|
|
:config
|
|
;; Set custom formatting commands
|
|
(dolist (formatter-cmd '(
|
|
(shfmt . ("shfmt" "-i" "4" "-ci" "-kp" "-sr"))
|
|
|
|
|
|
))
|
|
(add-to-list #'apheleia-formatters formatter-cmd))
|
|
|
|
;; Set custom formatters for modes
|
|
(dolist (formatter-mode '((emacs-lisp-mode . lisp-indent)
|
|
(clojure-mode . lisp-indent)
|
|
|
|
))
|
|
(add-to-list #'apheleia-mode-alist formatter-mode)))
|
|
|
|
|
|
;; Posframe is a pop-up tool that must be manually installed for dap-mode
|
|
(use-package posframe)
|
|
|
|
(use-package ripgrep)
|
|
|
|
;; Use the Debug Adapter Protocol for running tests and debugging
|
|
(use-package dap-mode
|
|
:hook
|
|
(lsp-mode . dap-mode)
|
|
(lsp-mode . dap-ui-mode))
|
|
|
|
(use-package yaml-mode
|
|
:mode "\\.ya?ml\\'")
|
|
|
|
(use-package lsp-mode
|
|
:straight (:type built-in)
|
|
;; 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)
|
|
(lsp-completion-mode . my/lsp-mode-setup-completion)
|
|
:init
|
|
(defun my/orderless-dispatch-flex-first (_pattern index _total)
|
|
(and (eq index 0) 'orderless-flex))
|
|
|
|
(defun my/lsp-mode-setup-completion ()
|
|
(setf (alist-get 'styles (alist-get 'lsp-capf completion-category-defaults))
|
|
'(orderless))
|
|
;; Optionally configure the first word as flex filtered.
|
|
(add-hook 'orderless-style-dispatchers #'my/orderless-dispatch-flex-first nil 'local)
|
|
;; Optionally configure the cape-capf-buster.
|
|
(setq-local completion-at-point-functions (list (cape-capf-buster #'lsp-completion-at-point))))
|
|
|
|
: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 lsp-idle-delay 0.500)
|
|
(setq lsp-log-io nil)
|
|
(setq lsp-completion-provider nil)
|
|
(setq lsp-modeline-code-actions-segments '(count name))
|
|
(setq lsp-headerline-breadcrumb-segments '(path symbols))
|
|
(setq lsp-prefer-flymake t)
|
|
;; 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)
|
|
(setq lsp-auto-execute-action nil)
|
|
(setq lsp-nix-nil-formatter ["nixfmt"])
|
|
|
|
(with-eval-after-load 'lsp-mode
|
|
(add-to-list 'lsp-file-watch-ignored-directories "[/\\\\]\\.bloop\\'")
|
|
(add-to-list 'lsp-file-watch-ignored-directories "[/\\\\]\\.metals\\'")
|
|
(add-to-list 'lsp-file-watch-ignored-directories "[/\\\\]\\.ammonite\\'")
|
|
(add-to-list 'lsp-file-watch-ignored-directories "[/\\\\]\\.ivy2\\'")
|
|
(add-to-list 'lsp-file-watch-ignored-directories "[/\\\\]\\.sbt\\'")
|
|
(add-to-list 'lsp-file-watch-ignored-directories "[/\\\\]target\\'")
|
|
(add-to-list 'lsp-file-watch-ignored-directories "[/\\\\]project/target\\'")
|
|
(add-to-list 'lsp-file-watch-ignored-directories "[/\\\\]project/\\..+\\'")
|
|
(add-to-list 'lsp-file-watch-ignored-directories "[/\\\\]dist\\'")))
|
|
|
|
(use-package lsp-ui
|
|
:config
|
|
(setq lsp-ui-sideline-show-diagnostics t)
|
|
(setq lsp-ui-sideline-show-code-actions t)
|
|
(setq lsp-ui-sideline-update-mode 'line)
|
|
(setq lsp-ui-peek-enable t)
|
|
(setq lsp-ui-doc-enable t)
|
|
(setq lsp-ui-doc-side 'right)
|
|
(setq lsp-ui-doc-position 'bottom)
|
|
(setq lsp-ui-doc-delay 3)
|
|
(setq lsp-ui-doc-show-with-cursor t)
|
|
(setq lsp-ui-doc-show-with-mouse t))
|
|
|
|
(use-package lsp-treemacs
|
|
:init
|
|
(lsp-treemacs-sync-mode 1))
|
|
|
|
(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")))
|
|
|
|
(use-package nix-lsp
|
|
:straight (:type built-in)
|
|
:after (lsp-mode)
|
|
:custom
|
|
(lsp-nix-nil-formatter ["nixfmt"]))
|
|
|
|
(use-package nix-mode
|
|
:hook (nix-mode . lsp-deferred)
|
|
:mode "\\.nix\\'")
|
|
|
|
(use-package company-nixos-options
|
|
:after (company-mode)
|
|
:custom
|
|
(add-to-list 'company-backends 'company-nixos-options))
|
|
|
|
;; Add metals backend for lsp-mode
|
|
(use-package
|
|
lsp-metals
|
|
:straight (:type built-in))
|
|
|
|
(use-package dockerfile-mode
|
|
:init
|
|
(require 'dockerfile-mode))
|
|
|
|
(use-package tree-sitter
|
|
:config
|
|
(global-tree-sitter-mode))
|
|
|
|
(use-package tree-sitter-langs)
|
|
|
|
(use-package yasnippet
|
|
:hook (prog-mode . yas-minor-mode)
|
|
:config
|
|
(yas-reload-all))
|
|
|
|
|
|
(provide 'fn-coding)
|