summaryrefslogtreecommitdiff
path: root/modules/prog-lisp.el
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2025-10-12 11:47:26 -0500
committerCraig Jennings <c@cjennings.net>2025-10-12 11:47:26 -0500
commit092304d9e0ccc37cc0ddaa9b136457e56a1cac20 (patch)
treeea81999b8442246c978b364dd90e8c752af50db5 /modules/prog-lisp.el
changing repositories
Diffstat (limited to 'modules/prog-lisp.el')
-rw-r--r--modules/prog-lisp.el126
1 files changed, 126 insertions, 0 deletions
diff --git a/modules/prog-lisp.el b/modules/prog-lisp.el
new file mode 100644
index 00000000..11dc7851
--- /dev/null
+++ b/modules/prog-lisp.el
@@ -0,0 +1,126 @@
+;;; prog-lisp --- Lisp Specific Settings and Functionality -*- lexical-binding: t; coding: utf-8; -*-
+;; author Craig Jennings <c@cjennings.net>
+
+;;; Commentary:
+
+;; ==== Setting up Quicklisp ====
+;; Quicklisp is a library manager for Common Lisp. It works with your existing Common Lisp
+;; implementation to download, install, and load any of over 1,500 libraries with a few
+;; simple commands.
+;; https://www.quicklisp.org/beta/
+
+;; mostly from: https://gist.github.com/jteneycke/7947353
+;; * Install SBCL
+;; sudo pacman -S sbcl # arch
+;; doas pkg install sbcl # bsd
+;; sudo apt-get install sbcl # debian
+
+;; * Install QuickLisp
+;; curl -O http://beta.quicklisp.org/quicklisp.lisp
+;; sbcl --load quicklisp.lisp --eval "(quicklisp-quickstart:install)" --quit
+;; sbcl --load ~/quicklisp/setup.lisp --eval "(ql:add-to-init-file)" --quit
+
+;; * Emacs Config
+;; (load (expand-file-name "~/quicklisp/slime-helper.el"))
+;; ;; Replace "sbcl" with the path to your implementation
+;; (setq inferior-lisp-program "/usr/bin/sbcl")
+
+;; to get readline support in SBCL's REPL, install rlwrap and run it
+;; before sbcl like so:
+
+;; $ rlwrap sbcl
+
+;;; Code:
+(require 'ert)
+
+;; -------------------------------- Elisp Setup --------------------------------
+;; run this on editing an elisp file
+
+(defun cj/elisp-setup ()
+ "My default code preferences for emacs-lisp."
+ (setq-default tab-width 4) ;; set the tab width to 4 spaces
+ (setq-default indent-tabs-mode -1) ;; disable tab characters
+ (setq-default fill-column 120) ;; wrap code at this column
+ (display-fill-column-indicator-mode)) ;; show where the fill-column is
+(add-hook 'emacs-lisp-mode-hook 'cj/elisp-setup)
+
+;; ------------------------------ Emacs Lisp REPL ------------------------------
+
+(use-package ielm
+ :ensure nil ;; built-in
+ :hook (ielm-mode . eldoc-mode)
+ :config (setq ielm-prompt "elisp> "))
+
+;; ----------------------------------- Eldoc -----------------------------------
+
+(use-package eldoc
+ :ensure nil ;; built-in
+ :hook ((c-mode-common emacs-lisp-mode) . eldoc-mode)
+ :custom
+ (eldoc-echo-area-use-multiline-p 3)
+ (eldoc-echo-area-display-truncation-message nil))
+
+;; -------------------------- ERT + Testing Libraries --------------------------
+;; unit/regression testing framework
+;; basic introduction: https://nullprogram.com/blog/2012/08/15/
+;; https://www.gnu.org/software/emacs/manual/html_node/ert/
+;; or: [[info:ert#User Input]]
+
+(use-package ert
+ :ensure nil ;; built-into emacs
+ :defer 1)
+
+;; ---------------------------------- El-Mock ----------------------------------
+
+(use-package el-mock
+ :defer 1) ;; mock/stub framework
+
+;; --------------------------------- Elisp Lint --------------------------------
+
+(use-package elisp-lint
+ :defer 1)
+
+;; ------------------------------ Package Tooling ------------------------------
+
+(use-package package-lint
+ :defer 1)
+
+(use-package flycheck-package
+ :defer 1
+ :after (flycheck package-lint)
+ :config
+ (flycheck-package-setup))
+
+(use-package package-build
+ :defer 1)
+
+;; ----------------------------- Rainbow Delimiters ----------------------------
+
+(use-package rainbow-delimiters
+ :defer .5
+ :hook
+ (emacs-lisp-mode . rainbow-delimiters-mode)
+ (lisp-mode . rainbow-delimiters-mode)
+ :config
+ (set-face-foreground 'rainbow-delimiters-depth-1-face "#c66") ;; red
+ (set-face-foreground 'rainbow-delimiters-depth-2-face "#6c6") ;; green
+ (set-face-foreground 'rainbow-delimiters-depth-3-face "#69f") ;; blue
+ (set-face-foreground 'rainbow-delimiters-depth-4-face "#cc6") ;; yellow
+ (set-face-foreground 'rainbow-delimiters-depth-5-face "#6cc") ;; cyan
+ (set-face-foreground 'rainbow-delimiters-depth-6-face "#c6c") ;; magenta
+ (set-face-foreground 'rainbow-delimiters-depth-7-face "#ccc") ;; light gray
+ (set-face-foreground 'rainbow-delimiters-depth-8-face "#999") ;; medium gray
+ (set-face-foreground 'rainbow-delimiters-depth-9-face "#666")) ;; dark gray
+
+;; -------------------------------- Geiser Guile -------------------------------
+;; Guile support in Emacs
+
+(use-package geiser-guile
+ :defer 1
+ :commands (geiser-guile)
+ :bind ("C-c G" . geiser-guile)
+ :config
+ (setq geiser-guile-binary "/usr/bin/guile"))
+
+(provide 'prog-lisp)
+;;; prog-lisp.el ends here