From 7fdc76d1c071b400de3170cfcb1d873111385638 Mon Sep 17 00:00:00 2001
From: Jessie Hildebrandt <jessieh@jessieh.net>
Date: Mon, 27 Jun 2022 15:07:30 -0400
Subject: [PATCH] Add ligature support (Emacs >28)

---
 init.el | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 54 insertions(+)

diff --git a/init.el b/init.el
index 1d7eb1e..2fecbd8 100644
--- a/init.el
+++ b/init.el
@@ -418,6 +418,41 @@
 ;; (Emacs 27+ on some systems may not have a monocolor fallback font set after multicolor emoji fonts.)
 (set-fontset-font t 'symbol "Symbola" nil 'append)
 
+;; Download and configure ligature.el to enable font ligatures in prog-mode. (Emacs >28)
+(when (>= emacs-major-version 28)
+  (unless (file-directory-p (concat user-emacs-directory "/ligature"))
+    (make-directory (concat user-emacs-directory "/ligature")))
+  (unless (file-exists-p (concat user-emacs-directory "/ligature/ligature.el"))
+    (url-copy-file "https://raw.githubusercontent.com/mickeynp/ligature.el/master/ligature.el" (concat user-emacs-directory "/ligature/ligature.el") t))
+  (use-package ligature
+    :load-path
+    "ligature"
+    :config
+    (ligature-set-ligatures 'prog-mode '("|||>" "<|||" "<==>" "<!--" "####" "~~>" "***" "||=" "||>"
+                                         ":::" "::=" "=:=" "===" "==>" "=!=" "=>>" "=<<" "=/=" "!=="
+                                         "!!." ">=>" ">>=" ">>>" ">>-" ">->" "->>" "-->" "---" "-<<"
+                                         "<~~" "<~>" "<*>" "<||" "<|>" "<$>" "<==" "<=>" "<=<" "<->"
+                                         "<--" "<-<" "<<=" "<<-" "<<<" "<+>" "</>" "###" "#_(" "..<"
+                                         "..." "+++" "/==" "///" "_|_" "www" "&&" "^=" "~~" "~@" "~="
+                                         "~>" "~-" "**" "*>" "*/" "||" "|}" "|]" "|=" "|>" "|-" "{|"
+                                         "[|" "]#" "::" ":=" ":>" ":<" "$>" "==" "=>" "!=" "!!" ">:"
+                                         ">=" ">>" ">-" "-~" "-|" "->" "-<" "<~" "<*" "<|" "<:" "<$"
+                                         "<=" "<>" "<-" "<<" "<+" "</" "#{" "#[" "#:" "#=" "#!" "##"
+                                         "#(" "#?" "#_" "%%" ".=" ".-" ".." ".?" "+>" "++" "?:" "?="
+                                         "?." "??" ";;" "/*" "/=" "/>" "//" "__" "~~" "(*" "*)" "://"
+                                         "=~" "!~" "\\\\" "#####" "--" "---"))
+    (ligature-set-ligatures 'prog-mode '(("-" (rx (| (+ (: (? "-") (? (| "<" ">" "<<" ">>" "|" "||"))))
+                                                     (| "~" ))))
+                                         ("=" (rx (| (+ (: (? "=") (? (| "<" ">" "<<" ">>" "|" "||" "/" "//" ":" "!"))))
+                                                     (| "~" ))))
+                                         ("#" (rx (| (+ "#")
+                                                     (| "{" "[" ":" "=" "!" "(" "?" "_"))))
+                                         ("/" (rx (| (+ "/")
+                                                     (| "==" "*" "=" ">"))))
+                                         ("0" (rx "x" (+ hex)))))
+    :hook
+    (prog-mode . ligature-mode)))
+
 ;;====================
 ;; Theme
 ;;====================
@@ -629,6 +664,24 @@
    ("M-." . lsp-ui-peek-find-definitions)
    ("M-?" . lsp-ui-peek-find-references)))
 
+;;====================
+;; SLIME (Lisp Interaction Framework)
+;;====================
+
+;; Load SLIME
+(use-package slime
+  :config
+  (setq inferior-lisp-program (executable-find "sbcl"))
+  :commands
+  (slime))
+
+;; Load SLIME-docker
+(use-package slime-docker
+  :custom
+  (slime-docker-program "sbcl")
+  :commands
+  (slime-docker))
+
 ;;====================
 ;; Package-Lint (Elisp Package Linter)
 ;;====================
@@ -936,6 +989,7 @@
   :demand
   t
   :custom
+  (fussy-filter-fn 'fussy-filter-fast)
   (completion-styles '(fussy basic))
   (completion-category-defaults nil)
   (completion--category-overrides nil))