;;; -*- lexical-binding: t; -*- (setq tab-stop-list (number-sequence 4 200 4)) (use-package eglot :elpaca nil :config (setq eglot-events-buffer-size 0)) (use-package puni :defer t :init (puni-global-mode) :config (keymap-set puni-mode-map "C-w" nil) :bind (("C-" . puni-slurp-forward) ("C-" . puni-slurp-backward))) (add-hook 'prog-mode-hook 'subword-mode) ;; Only used to get better eglot snippets. (use-package yasnippet :config ;;(add-to-list 'yas-snippet-dirs (expand-file-name "yasnippets" user-emacs-directory)) (yas-global-mode)) (use-package tempel ;; Require trigger prefix before template name when completing. ;; :custom ;; (tempel-trigger-prefix "<") :bind (("M-+" . tempel-complete) ;; Alternative tempel-expand ("M-*" . tempel-insert)) :init ;; Setup completion at point (defun tempel-setup-capf () ;; Add the Tempel Capf to `completion-at-point-functions'. ;; `tempel-expand' only triggers on exact matches. Alternatively use ;; `tempel-complete' if you want to see all matches, but then you ;; should also configure `tempel-trigger-prefix', such that Tempel ;; does not trigger too often when you don't expect it. NOTE: We add ;; `tempel-expand' *before* the main programming mode Capf, such ;; that it will be tried first. (setq-local completion-at-point-functions (cons #'tempel-expand completion-at-point-functions))) (add-hook 'conf-mode-hook 'tempel-setup-capf) (add-hook 'prog-mode-hook 'tempel-setup-capf) (add-hook 'text-mode-hook 'tempel-setup-capf) ;; Optionally make the Tempel templates available to Abbrev, ;; either locally or globally. `expand-abbrev' is bound to C-x '. ;; (add-hook 'prog-mode-hook #'tempel-abbrev-mode) ;; (global-tempel-abbrev-mode) ) (use-package rustic :after eglot :bind (("C-c C-r C-s" . rustic-popup) ("C-c C-r C-n" . kj/rustic-nextest-all)) :config (defun kj/rustic-nextest-all () (interactive) (setq rustic-cargo-nextest-exec-command "nextest run --run-ignored all") (rustic-cargo-run-nextest)) (setq ;; eglot seems to be the best option right now. rustic-lsp-client 'eglot rustic-format-on-save nil ;; Prevent automatic syntax checking, which was causing lags and stutters. ;; eglot-send-changes-idle-time (* 60 60) ) :hook (rustic-mode . eglot-ensure) ;; Disable the annoying doc popups in the minibuffer. ;; (add-hook 'eglot-managed-mode-hook (lambda () (eldoc-mode -1))) ) (use-package markdown-mode :ensure t :mode ("README\\.md\\'" . gfm-mode) :init (setq markdown-command "multimarkdown")) (use-package nix-mode :mode "\\.nix\\'") (use-package ledger-mode :mode "\\.journal") (use-package unobtrusive-magit-theme) (use-package editorconfig :ensure t :config (editorconfig-mode 1) ;; Don't run on remote directories. (advice-add 'editorconfig-apply :before-until 'kj/default-directory-remote-p)) (use-package clojure-mode) ;; Devicetree mode for keyboard configs. (use-package dts-mode :mode "\\.keymap\\'") (use-package yaml-mode :mode "\\.\(yml|yaml\)\\'") ;; (use-package ansi-color ;; :hook (compilation-filter . ansi-color-compilation-filter)) (use-package diff-hl :config (add-hook 'magit-pre-refresh-hook 'diff-hl-magit-pre-refresh) (add-hook 'magit-post-refresh-hook 'diff-hl-magit-post-refresh) (global-diff-hl-mode)) (use-package graphviz-dot-mode :ensure t) (use-package haskell-mode) (use-package tidal :config (setq tidal-boot-script-path "~/projects/audio/BootTidal.hs")) (use-package ess) ;; (use-package sly ;; :custom ;; (inferior-lisp-program "sbcl")) (use-package slime :custom (inferior-lisp-program "sbcl") :config (load (expand-file-name "~/.cache/quicklisp/slime-helper.el")) ;; Replace "sbcl" with the path to your implementation (setq inferior-lisp-program "sbcl") (slime-setup '(slime-fancy slime-asdf))) (use-package exercism) (defun kj/run-exercism-test () (interactive) (let* ((directory default-directory) (exercise (and (string-match (rx (* anychar) "/" (group (+ (not "/"))) "/" eol) directory) (match-string 1 directory))) (test-file (concat directory exercise "-test.lisp"))) (unless (file-exists-p test-file) (error "Not found: %s" test-file)) (slime-switch-to-output-buffer) (slime-cd directory) (slime-load-file test-file) (slime-eval (list (intern (concat exercise "-test:run-tests")))))) (provide 'kj-development)