diff options
Diffstat (limited to 'user/emacs')
-rw-r--r-- | user/emacs/init.el | 129 |
1 files changed, 115 insertions, 14 deletions
diff --git a/user/emacs/init.el b/user/emacs/init.el index 69c71d00..af60817a 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,6 +155,15 @@ (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 @@ -156,6 +183,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 +223,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 +256,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-this-buffer)) (use-package avy :defer 2 @@ -411,8 +472,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 +486,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 +648,27 @@ _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 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 +774,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) @@ -741,6 +829,12 @@ _C-k_: prev _u_pper _=_: upper/lower _s_mart resolve :general (:keymaps 'comint-mode-map "C-c C-l" #'counsel-shell-history)) +(use-package chatgpt-shell + :defer 5 + :config (progn + (chatgpt-shell-ollama-load-models :override t) + (setq chatgpt-shell-model-version "llama3.3"))) + ;;; Editing (setq-default tab-always-indent 'complete @@ -793,12 +887,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))) @@ -1058,10 +1159,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 +1206,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 +1331,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 |