Configure
Install the packages.
(with-eval-after-load 'package
(add-to-list 'package-selected-packages 'fennel-mode))
;; (let ((src-directory (file-name-concat org-directory "src" "fennel-mode")))
;; (add-to-list 'load-path src-directory)
;; (autoload #'fennel-mode (file-name-concat src-directory "fennel-mode") nil t)
;; (add-to-list 'auto-mode-alist '("\\.fnl\\'" . fennel-mode)))
Enable LSP automatically.
(with-eval-after-load 'fennel-mode
(add-hook 'fennel-mode-hook #'eglot-ensure))
Enable the improved “proto” (protocol-based) REPL.
(with-eval-after-load 'fennel-mode
(add-hook 'fennel-mode-hook #'fennel-proto-repl-minor-mode))
Disable subpar Xref-like functionality in favor of TAGS.
(with-eval-after-load 'fennel-mode
(keymap-set fennel-mode-map "M-." nil)
(keymap-set fennel-mode-map "M-," nil))
Enable structural editing with Paredit.
(with-eval-after-load 'fennel-mode
(add-hook 'fennel-mode-hook #'paredit-mode)
(add-hook 'fennel-repl-mode-hook #'paredit-mode))
Add support for literate programming with Org Babel.
(with-eval-after-load 'org
(require 'ob-fennel))
Do not switch to REPL when reloading with C-c C-k (fennel-reload).
(with-eval-after-load 'fennel-mode
(setopt fennel-mode-switch-to-repl-after-reload nil))
Show the fill column.
(with-eval-after-load 'fennel-mode
(add-hook 'fennel-mode-hook
#'display-fill-column-indicator-mode))
Enable code folding.
(with-eval-after-load 'fennel-mode
(add-hook 'fennel-mode-hook #'outline-minor-mode))
Replace lambda followed by SPC with the lambda symbol λ.
(with-eval-after-load 'fennel-mode
(define-abbrev-table 'fennel-mode-abbrev-table '(("lambda" "λ")))
(add-hook 'fennel-mode-hook #'abbrev-mode))
Use the development version of fennel-ls in ~/src.
(with-eval-after-load 'eglot
(add-to-list 'eglot-server-programs
(cons 'fennel-mode
(list (file-name-concat org-directory
"src"
"fennel-ls"
"fennel-ls")))))