emacs-rice/modules/fn-coding.el

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)