summaryrefslogtreecommitdiff
path: root/.config/emacs/init.el
diff options
context:
space:
mode:
authorJack Jamison <jackqjamison@gmail.com>2026-05-05 21:53:16 -0400
committerJack Jamison <jackqjamison@gmail.com>2026-05-05 21:53:16 -0400
commitbe8c956b0e819f2db0c6ae3598b6590b62982a83 (patch)
tree9de8204882f8894776bd34f83af2800130bb87b5 /.config/emacs/init.el
parent6ad4d3dfd32b569f9485d24f80a768ed3ca19e46 (diff)
been a while
Diffstat (limited to '.config/emacs/init.el')
-rw-r--r--.config/emacs/init.el235
1 files changed, 160 insertions, 75 deletions
diff --git a/.config/emacs/init.el b/.config/emacs/init.el
index 9f80569..b6e6b38 100644
--- a/.config/emacs/init.el
+++ b/.config/emacs/init.el
@@ -33,6 +33,11 @@
(run-with-idle-timer 1.2 t 'garbage-collect))
(gc-idle-timer)
+;; diminish
+(use-package diminish
+ :diminish auto-revert-mode
+ :demand t)
+
;; customize in different file
(setq custom-file (expand-file-name "customs.el" user-emacs-directory))
(load custom-file :no-error-if-file-is-missing)
@@ -90,6 +95,7 @@
;; rainbow delimiters
(use-package rainbow-delimiters
+ :diminish
:hook (prog-mode . rainbow-delimiters-mode))
;; ansi color in compilation
@@ -165,10 +171,12 @@
(use-package evil-collection
:after evil
+ :diminish evil-collection-unimpaired-mode
:config
(evil-collection-init))
(use-package evil-paste-indent
+ :diminish
:vc (:url "https://github.com/Schievel1/evil-paste-indent"
:rev :newest)
:config (global-evil-paste-indent-mode t))
@@ -180,6 +188,9 @@
:config
(load-theme 'doom-one))
+;; font
+(add-to-list 'default-frame-alist '(font . "Fantasque Sans Mono-12"))
+
;; (use-package dracula-theme
;; :demand t
;; :config
@@ -220,6 +231,7 @@
;; rainbow mode
(use-package rainbow-mode
+ :diminish rainbow-mode
:hook (after-change-major-mode . rainbow-mode))
;; == minibuffer completion
@@ -291,80 +303,124 @@
:custom
(magit-display-buffer-function #'magit-display-buffer-same-window-except-diff-v1))
+;; == helpful
+(use-package helpful
+ :bind
+ ([remap describe-command] . helpful-command)
+ ([remap describe-function] . helpful-callable)
+ ([remap describe-variable] . helpful-variable)
+ ([remap describe-key] . helpful-key))
+
;; == flycheck
-(use-package flycheck)
+;; (use-package flycheck)
;; == editorconfig
(editorconfig-mode 1)
(add-hook 'prog-mode 'editorconfig-apply)
;; == lsp
-(use-package lsp-mode
- :custom
- (lsp-keymap-prefix "C-c l")
- (lsp-headerline-breadcrumb-enable nil)
- (lsp-completion-enable-additional-text-edit nil)
- (lsp-enable-on-type-formatting nil)
- (lsp-enable-symbol-highlighting nil)
- (lsp-completion-provider :none)
- (lsp-idle-delay 0.1)
- (lsp-enable-indentation nil)
- :hook ((c++-mode . lsp-deferred)
- (c-mode . lsp-deferred)
- (typst-ts-mode . lsp-deferred)
- (java-mode . lsp-deferred))
- :commands lsp
- :bind
- (("C-c s" . lsp-signature-activate)))
+;; (use-package lsp-mode
+;; :custom
+;; (lsp-keymap-prefix "C-c l")
+;; (lsp-headerline-breadcrumb-enable nil)
+;; (lsp-completion-enable-additional-text-edit nil)
+;; (lsp-enable-on-type-formatting nil)
+;; (lsp-enable-symbol-highlighting nil)
+;; (lsp-completion-provider :none)
+;; (lsp-idle-delay 0.1)
+;; (lsp-enable-indentation nil)
+;; :hook ((c++-mode . lsp-deferred)
+;; (c-mode . lsp-deferred)
+;; (typst-ts-mode . lsp-deferred)
+;; (java-mode . lsp-deferred))
+;; :commands lsp
+;; :bind
+;; (("C-c s" . lsp-signature-activate)))
-(use-package lsp-ui
- :after lsp-mode
- :commands lsp-ui-mode
- :hook (lsp-mode . lsp-ui-mode)
- :bind
- (("C-c r" . lsp-ui-peek-find-references)
- ("C-c d" . lsp-ui-peek-find-definitions)))
+;; (use-package lsp-ui
+;; :after lsp-mode
+;; :commands lsp-ui-mode
+;; :hook (lsp-mode . lsp-ui-mode)
+;; :bind
+;; (("C-c r" . lsp-ui-peek-find-references)
+;; ("C-c d" . lsp-ui-peek-find-definitions)))
;; lsp booster
-(setq read-process-output-max (* 1024 1024)) ;; 1mb
-(defun lsp-booster--advice-json-parse (old-fn &rest args)
- "Try to parse bytecode instead of json."
- (or
- (when (equal (following-char) ?#)
- (let ((bytecode (read (current-buffer))))
- (when (byte-code-function-p bytecode)
- (funcall bytecode))))
- (apply old-fn args)))
-(advice-add (if (progn (require 'json)
- (fboundp 'json-parse-buffer))
- 'json-parse-buffer
- 'json-read)
- :around
- #'lsp-booster--advice-json-parse)
-
-(defun lsp-booster--advice-final-command (old-fn cmd &optional test?)
- "Prepend emacs-lsp-booster command to lsp CMD."
- (let ((orig-result (funcall old-fn cmd test?)))
- (if (and (not test?) ;; for check lsp-server-present?
- (not (file-remote-p default-directory)) ;; see lsp-resolve-final-command, it would add extra shell wrapper
- lsp-use-plists
- (not (functionp 'json-rpc-connection)) ;; native json-rpc
- (executable-find "emacs-lsp-booster"))
- (progn
- (when-let ((command-from-exec-path (executable-find (car orig-result)))) ;; resolve command from exec-path (in case not found in $PATH)
- (setcar orig-result command-from-exec-path))
- (message "Using emacs-lsp-booster for %s!" orig-result)
- (cons "emacs-lsp-booster" orig-result))
- orig-result)))
-(advice-add 'lsp-resolve-final-command :around #'lsp-booster--advice-final-command)
+;; (setq read-process-output-max (* 1024 1024)) ;; 1mb
+;; (defun lsp-booster--advice-json-parse (old-fn &rest args)
+;; "Try to parse bytecode instead of json."
+;; (or
+;; (when (equal (following-char) ?#)
+;; (let ((bytecode (read (current-buffer))))
+;; (when (byte-code-function-p bytecode)
+;; (funcall bytecode))))
+;; (apply old-fn args)))
+;; (advice-add (if (progn (require 'json)
+;; (fboundp 'json-parse-buffer))
+;; 'json-parse-buffer
+;; 'json-read)
+;; :around
+;; #'lsp-booster--advice-json-parse)
+
+;; (defun lsp-booster--advice-final-command (old-fn cmd &optional test?)
+;; "Prepend emacs-lsp-booster command to lsp CMD."
+;; (let ((orig-result (funcall old-fn cmd test?)))
+;; (if (and (not test?) ;; for check lsp-server-present?
+;; (not (file-remote-p default-directory)) ;; see lsp-resolve-final-command, it would add extra shell wrapper
+;; lsp-use-plists
+;; (not (functionp 'json-rpc-connection)) ;; native json-rpc
+;; (executable-find "emacs-lsp-booster"))
+;; (progn
+;; (when-let ((command-from-exec-path (executable-find (car orig-result)))) ;; resolve command from exec-path (in case not found in $PATH)
+;; (setcar orig-result command-from-exec-path))
+;; (message "Using emacs-lsp-booster for %s!" orig-result)
+;; (cons "emacs-lsp-booster" orig-result))
+;; orig-result)))
+;; (advice-add 'lsp-resolve-final-command :around #'lsp-booster--advice-final-command)
;; == eglot
-;; (use-package eglot
-;; :ensure nil
-;; :config
-;; (add-to-list 'eglot-ignored-server-capabilities ':inlayHintProvider)
-;; (add-to-list 'eglot-ignored-server-capabilities ':documentOnTypeFormattingProvider)
-;; (add-hook 'eglot-mode-hook 'flymake-mode))
+(use-package eglot
+ :ensure nil
+ :bind
+ (("C-c l a" . eglot-code-actions))
+ (("C-c l r" . eglot-rename))
+ :hook
+ (eglot-managed-mode . (lambda () (setq-local eldoc-documentation-function 'eldoc-documentation-enthusiast)))
+ (eglot-mode-hook . flymake-mode)
+ :config
+ (add-to-list 'eglot-ignored-server-capabilities ':inlayHintProvider)
+ (add-to-list 'eglot-ignored-server-capabilities ':documentOnTypeFormattingProvider)
+ (add-to-list 'eglot-ignored-server-capabilities ':documentHighlightProvider)
+ (add-to-list 'eglot-server-programs
+ '((c-ts-mode c++-ts-mode c-mode c++-mode)
+ . ("clangd"
+ "-j=8"
+ "--log=error"
+ "--malloc-trim"
+ "--background-index"
+ "--completion-style=detailed"
+ "--pch-storage=memory"
+ "--header-insertion=never"
+ "--header-insertion-decorators=0")))
+ :custom
+ (eglot-send-changes-idle-time 0.1))
+
+(use-package eldoc
+ :ensure nil
+ :config
+ (setq-default eldoc-documentation-strategy 'eldoc-documentation-enthusiast)
+ (setq-default eldoc-minor-mode-string ""))
+
+(use-package sideline-flymake)
+(use-package sideline
+ :diminish
+ :hook
+ ((flymake-mode . sideline-mode))
+ :init
+ (setq sideline-backends-right '(sideline-flymake)
+ sideline-backends-right-skip-current-line nil
+ sideline-order-right 'up
+ sideline-priority 100))
;; == dumb jump
(use-package dumb-jump
@@ -391,20 +447,27 @@
:init
(add-hook 'completion-at-point-functions #'cape-dabbrev)
(add-hook 'completion-at-point-functions #'cape-file)
- (defun my/lsp-capf-busted ()
- "Return an uncached LSP completion function."
- (cape-capf-buster #'lsp-completion-at-point))
- (add-hook 'lsp-completion-mode-hook
- (lambda ()
- (setq-local completion-at-point-functions
- (list (my/lsp-capf-busted))))))
-
-(global-completion-preview-mode)
-(global-set-key (kbd "M-n") 'completion-preview-next-candidate)
-(global-set-key (kbd "M-p") 'completion-preview-prev-candidate)
+ :config
+ (advice-add 'eglot-completion-at-point :around #'cape-wrap-buster))
+ ;; (defun my/lsp-capf-busted ()
+ ;; "Return an uncached LSP completion function."
+ ;; (cape-capf-buster #'lsp-completion-at-point))
+ ;; (add-hook 'lsp-completion-mode-hook
+ ;; (lambda ()
+ ;; (setq-local completion-at-point-functions
+ ;; (list (my/lsp-capf-busted))))))
+
+(use-package completion-preview
+ :ensure nil
+ :diminish
+ :config
+ (global-completion-preview-mode)
+ (global-set-key (kbd "M-n") 'completion-preview-next-candidate)
+ (global-set-key (kbd "M-p") 'completion-preview-prev-candidate))
;; == snippets
(use-package yasnippet
+ :diminish yas-minor-mode yas-global-mode
:config
(yas-reload-all)
:hook
@@ -519,6 +582,19 @@
(add-hook 'vterm-copy-mode-hook #'my-vterm-copy-mode-evil-setup))
;; == languages
+;; (setq treesit-font-lock-level 4)
+;; (setq treesit-language-source-alist
+;; '((cpp "https://github.com/tree-sitter/tree-sitter-cpp")
+;; (c "https://github.com/tree-sitter/tree-sitter-c")
+;; (python "https://github.com/tree-sitter/tree-sitter-python")))
+;; (dolist (lang treesit-language-source-alist)
+;; (unless (treesit-language-available-p (car lang))
+;; (treesit-install-language-grammar (car lang))))
+;; (setq treesit-load-name-override-list
+;; '((c++ "libtree-sitter-cpp")))
+;; (setq major-mode-remap-alist '((c-mode . c-ts-mode)
+;; (c++-mode . c++-ts-mode)
+;; (python-mode . python-ts-mode)))
;; === c mode
(defun my-c-mode-common-hook ()
@@ -531,11 +607,19 @@
(add-to-list 'c-offsets-alist '(arglist-close . c-lineup-close-paren)))
(add-hook 'c-mode-common-hook 'my-c-mode-common-hook)
+;; === odin mode
+(use-package odin-mode
+ :vc (:url "https://github.com/mattt-b/odin-mode"
+ :rev :newest))
+
+;; === markdown
+(add-hook 'markdown-mode-hook #'auto-fill-mode)
+
;; == proj
(require 'proj)
(setq
- proj-locations '("~/development/" "~/opt/" "~/classes/psoft/" "~/classes/parallel-programming/" "~/classes/operating-systems/")
- proj-find-params '("-mindepth 1" "-maxdepth 1" "-path '*/.git'" "-prune -o" "-type d" "-print"))
+ proj-locations '(("~/development/" . 1) ("~/opt/" . 1) ("~/classes/" . 2) ("~/dotfiles/" . 0) ("~/dotfiles/.config/emacs/lisp/" . 1))
+ proj-grep-function 'consult-ripgrep)
(global-set-key (kbd "C-x b") `proj-switch-to-buffer)
(global-set-key (kbd "C-c b") `switch-to-buffer)
@@ -543,6 +627,7 @@
(global-set-key (kbd "C-x k") `proj-kill-buffer)
(global-set-key (kbd "C-c k") `kill-buffer)
+
;; == toggle-window
(require 'toggle-window)
(global-set-key (kbd "C-c w") 'toggle-window)