diff options
Diffstat (limited to 'user/emacs')
-rw-r--r-- | user/emacs/init.el | 167 |
1 files changed, 151 insertions, 16 deletions
diff --git a/user/emacs/init.el b/user/emacs/init.el index 69c71d00..5d5c1cb3 100644 --- a/user/emacs/init.el +++ b/user/emacs/init.el @@ -31,6 +31,8 @@ (interactive) (load-file user-init-file)) +(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t) + (setq use-package-enable-imenu-support t) (require 'use-package) (setq use-package-always-demand (daemonp) @@ -73,15 +75,14 @@ (when (or (daemonp) window-system) + (use-package doom-themes + :config (progn + (load-theme 'doom-one-light :noconfirm) + (doom-themes-org-config))) (use-package stimmung-themes + :disabled t :config (progn - (require 'stimmung-themes-light-theme) - (let ((light-mode-theme 'stimmung-themes-light) - (dark-mode-theme 'stimmung-themes-dark) - (original-stimmung-themes-string stimmung-themes-string)) - (load-theme light-mode-theme :noconfirm :noenable) - (load-theme dark-mode-theme :noconfirm :noenable) - (enable-theme light-mode-theme) + (let ((original-stimmung-themes-string stimmung-themes-string)) (defun toggle-stimmung-string-highlighting () (interactive) (let ((current-theme (car custom-enabled-themes))) @@ -90,6 +91,23 @@ original-stimmung-themes-string)) (load-theme current-theme :noconfirm))))))) +(let ((light-mode-theme 'doom-one-light) + (dark-mode-theme 'doom-one)) + (load-theme light-mode-theme :noconfirm :noenable) + (load-theme dark-mode-theme :noconfirm :noenable) + (enable-theme light-mode-theme) + (defun my/switch-theme-variant (mode) + (interactive (list + (intern (completing-read "Make it: " '("light" "dark") nil t)))) + (cond + ((eq mode 'dark) + (disable-theme light-mode-theme) + (enable-theme dark-mode-theme)) + ((eq mode 'light) + (disable-theme dark-mode-theme) + (enable-theme light-mode-theme))) + (modify-all-frames-parameters '((ns-appearance mode))))) + (global-set-key (kbd "<pinch>") 'ignore) (global-set-key (kbd "<C-wheel-up>") 'ignore) (global-set-key (kbd "<C-wheel-down>") 'ignore) @@ -137,12 +155,27 @@ (setq-default display-line-numbers 'relative display-line-numbers-widen t display-line-numbers-width 4) + +(defun turn-off-display-line-numbers-mode () + (interactive) + (display-line-numbers-mode -1)) + +(defun turn-on-display-line-numbers-mode () + (interactive) + (display-line-numbers-mode (default-value 'display-line-numbers))) + (setq frame-resize-pixelwise t window-resize-pixelwise t display-buffer-alist `(("\\*\\(?:shell\\|compilation\\)\\*" display-buffer-in-side-window (side . bottom) (slot . 0) (preserve-size . (nil . t)) (no-other-window . t) (no-delete-other-windows . t)))) +(use-package buffer-terminator + :defer 60 + :config (progn + (buffer-terminator-mode +1) + (setq buffer-terminator-verbose nil))) + (defun noct-relative () "Show relative line numbers." (when display-line-numbers @@ -156,6 +189,13 @@ (add-hook 'evil-insert-state-entry-hook #'noct-absolute) (add-hook 'evil-insert-state-exit-hook #'noct-relative) +(use-package ultra-scroll + :defer 1 + :config (progn + (setq scroll-margin 0 + scroll-conservatively 101) + (ultra-scroll-mode +1))) + ;;; Encoding (setq-default bidi-paragraph-direction 'left-to-right @@ -189,6 +229,32 @@ With two prefix arguments, write out the day and month name." ;;; Keybindings +(defun prot/keyboard-quit-dwim () + "Do-What-I-Mean behaviour for a general `keyboard-quit'. + +The generic `keyboard-quit' does not do the expected thing when +the minibuffer is open. Whereas we want it to close the +minibuffer, even without explicitly focusing it. + +The DWIM behaviour of this command is as follows: + +- When the region is active, disable it. +- When a minibuffer is open, but not focused, close the minibuffer. +- When the Completions buffer is selected, close it. +- In every other case use the regular `keyboard-quit'." + (interactive) + (cond + ((region-active-p) + (keyboard-quit)) + ((derived-mode-p 'completion-list-mode) + (delete-completion-window)) + ((> (minibuffer-depth) 0) + (abort-recursive-edit)) + (t + (keyboard-quit)))) + +(define-key global-map (kbd "C-g") #'prot/keyboard-quit-dwim) + (when (eq system-type 'darwin) (setq mac-option-modifier 'meta mac-right-option-modifier 'none @@ -196,7 +262,8 @@ With two prefix arguments, write out the day and month name." mac-right-control-modifier 'left mac-command-modifier 'super mac-right-command-modifier 'left - mac-function-modifier 'hyper)) + mac-function-modifier 'hyper) + (define-key global-map (kbd "s-w") #'kill-current-buffer)) (use-package avy :defer 2 @@ -411,8 +478,9 @@ _C-k_: prev _u_pper _=_: upper/lower _s_mart resolve "C-;" #'evil-avy-goto-line) (:states 'normal ";" #'evil-ex) - (:states '(normal motion) - "g s" #'evil-avy-goto-symbol-1)) + (:states '(normal) + "g s" #'consult-imenu + "g S" #'my/ls-consult-symbol)) (add-hook 'c-mode-common-hook ; make b/w/e include underscore as *part* of a word (lambda () (modify-syntax-entry ?_ "w"))) @@ -424,6 +492,10 @@ _C-k_: prev _u_pper _=_: upper/lower _s_mart resolve (use-package evil-collection :demand t + :general ( :keymaps 'evil-collection-unimpaired-mode-map + :states 'normal + "[ d" #'evil-collection-unimpaired-previous-error + "] d" #'evil-collection-unimpaired-next-error) :config (progn (setq evil-collection-magit-use-y-for-yank nil evil-collection-corfu-key-themes '(default magic-return)) @@ -582,6 +654,50 @@ _C-k_: prev _u_pper _=_: upper/lower _s_mart resolve (setq kind-icon-default-face 'corfu-default) (add-to-list 'corfu-margin-formatters #'kind-icon-margin-formatter))) +(use-package minuet + :general ("M-<tab>" #'minuet-show-suggestion) + :config (progn + (setq minuet-provider 'openai-fim-compatible + minuet-n-completions 1 + minuet-context-window 512) + (plist-put minuet-openai-fim-compatible-options :end-point "http://localhost:11434/v1/completions") + (plist-put minuet-openai-fim-compatible-options :name "Ollama") + (plist-put minuet-openai-fim-compatible-options :api-key "TERM") + (plist-put minuet-openai-fim-compatible-options :model "qwen2.5-coder:32b") + (minuet-set-optional-options minuet-openai-fim-compatible-options :max_tokens 256) + (minuet-set-optional-options minuet-openai-fim-compatible-options :top_p 0.9))) + +(defun my/minuet-disable-tabnine () + (when minuet-auto-suggestion-mode + (tabnine-mode -1)) ) +(add-hook 'minuet-auto-suggestion-mode-hook #'my/minuet-disable-tabnine) + +(defun my/tabnine-disable-minuet () + (when tabnine-mode + (minuet-auto-suggestion-mode -1))) +(add-hook 'tabnine-mode-hook #'my/tabnine-disable-minuet) + +(use-package tabnine-core + :config (progn + (with-demoted-errors "TabNine error: %s" + (global-tabnine-mode)) + + (define-key tabnine-completion-map (kbd "TAB") #'tabnine-accept-completion) + (define-key tabnine-completion-map (kbd "<tab>") #'tabnine-accept-completion) + + (define-key tabnine-completion-map (kbd "M-f") #'tabnine-accept-completion-by-word) + (define-key tabnine-completion-map (kbd "M-<return>") #'tabnine-accept-completion-by-line) + (define-key tabnine-completion-map (kbd "C-e") #'tabnine-accept-completion-by-line) + (define-key tabnine-completion-map (kbd "<right>") #'tabnine-accept-completion-by-line) + + (define-key tabnine-completion-map (kbd "C-g") #'tabnine-clear-overlay) + (define-key tabnine-completion-map (kbd "M-[") #'tabnine-next-completion) + (define-key tabnine-completion-map (kbd "M-]") #'tabnine-previous-completion)) + :init (progn + (advice-add 'tabnine-start-process :around #'quiet) + + (add-hook 'kill-emacs-hook #'tabnine-kill-process))) + (use-package tempel :general ("M-+" #'tempel-complete ;; Alternative tempel-expand "M-*" #'tempel-insert @@ -687,6 +803,7 @@ _C-k_: prev _u_pper _=_: upper/lower _s_mart resolve :defer 5 :commands (eshell) :functions (eshell/pwd) + :gfhook #'turn-off-display-line-numbers-mode :general (:keymaps 'eshell-command-map "C-r" #'eshell-history-backwards "C-s" #'eshell-history-forwards) @@ -694,6 +811,7 @@ _C-k_: prev _u_pper _=_: upper/lower _s_mart resolve (with-eval-after-load 'evil-ex (evil-ex-define-cmd "esh[ell]" #'eshell))) :config (progn + (eshell-load-modules eshell-modules-list) (setq eshell-prompt-function (lambda () (concat (eshell/pwd) "\n$ ")) eshell-prompt-regexp "^[$][[:blank:]]" @@ -747,6 +865,9 @@ _C-k_: prev _u_pper _=_: upper/lower _s_mart resolve indent-tabs-mode nil tab-width 4) +(if (fboundp 'kill-ring-deindent-mode) + (kill-ring-deindent-mode +1)) + (electric-pair-mode +1) (use-package ws-butler @@ -793,12 +914,19 @@ _C-k_: prev _u_pper _=_: upper/lower _s_mart resolve ;;;; js (setq js-enabled-frameworks '(javascript)) (add-to-list 'auto-mode-alist '("\\.[cm]js\\'" . js-ts-mode)) +(add-to-list 'auto-mode-alist '("\\.lock" . json-ts-mode)) ;;;; typescript (use-package astro-ts-mode :mode (("\\.astro\\'" . astro-ts-mode))) +(define-derived-mode dnscontrol-mode typescript-ts-mode "DNSControl" + "Major mode for editing configuration of DNSControl." + (if (featurep 'apheleia) + (setq-local apheleia-formatter 'dnscontrol))) +(add-to-list 'auto-mode-alist '("dnsconfig.js\\'" . dnscontrol-mode)) + (autoload 'ansi-color-apply-on-region "ansi-color") (defun colourise-compilation-buffer () (ansi-color-apply-on-region compilation-filter-start (point-max))) @@ -1019,10 +1147,17 @@ paths for the same project." (require 'magit-extras))) (use-package magit-todos - :after magit + :defer 10 :config (progn (magit-todos-mode +1))) +(use-package difftastic + :defer 5) +(use-package difftastic-bindings + :after magit + :config (progn + (difftastic-bindings-mode +1))) + (use-package git-gutter-fringe :defer 5 :config (progn @@ -1058,10 +1193,8 @@ paths for the same project." (setq ispell-extra-args '("--sug-mode=ultra" "--camel-case")) (use-package jinx-mode - :defer 1 - :ghook ('(text-mode-hook - prog-mode-hook - conf-mode-hook)) + :defer 10 + :ghook 'text-mode-hook :general ([remap ispell-word] #'jinx-correct-word [remap evil-prev-flyspell-error] #'jinx-previous [remap evil-next-flyspell-error] #'jinx-next) @@ -1107,6 +1240,7 @@ paths for the same project." js-base-mode-hook css-base-mode-hook lua-mode-hook + markdown-mode-hook nim-mode-hook html-mode-hook nix-mode-hook @@ -1231,6 +1365,7 @@ paths for the same project." '("shfmt")) (setq apheleia-formatters (append apheleia-formatters '((nixpkgs-fmt "nixpkgs-fmt") + (dnscontrol "dnscontrol" "fmt") (golines "golines") (taplo "taplo" "format" "-") (prettier-gotmpl @@ -1263,7 +1398,7 @@ paths for the same project." ";" #'execute-extended-command "a" #'my/ls-code-actions "bb" #'consult-buffer - "bx" #'kill-this-buffer + "bx" #'kill-current-buffer "br" #'revert-buffer "bk" #'kill-buffer "dd" #'dired |