diff options
| author | cashmere <cashmere@autistici.org> | 2025-10-11 04:49:10 +0200 |
|---|---|---|
| committer | cashmere <cashmere@autistici.org> | 2025-10-11 04:49:10 +0200 |
| commit | 27ceb78dd18b97a71fe73758bb81818e92ae7c78 (patch) | |
| tree | 1b683e67a6877643bc164ac02b3193f66092b50a /config.el | |
| parent | baa0a52c5f4bf22b44bb22071d57f73551db094d (diff) | |
| download | emacs-27ceb78dd18b97a71fe73758bb81818e92ae7c78.tar.gz | |
backup
Diffstat (limited to 'config.el')
| -rw-r--r-- | config.el | 373 |
1 files changed, 242 insertions, 131 deletions
@@ -1,19 +1,13 @@ ;;; config.el --- Emacs-Kick --- A feature rich Emacs config for (neo)vi(m)mers -*- lexical-binding: t; -*- ;; (setenv "LSP_USE_PLISTS" "true") -(setq gc-cons-threshold #x40000000) - -;; (setq read-process-output-max (* 1024 1024 4)) - -;; (setq package-enable-at-startup nil) - -(set-language-environment "UTF-8") -(setq locale-coding-system 'utf-8) -(prefer-coding-system 'utf-8) -(set-default-coding-systems 'utf-8) -(set-terminal-coding-system 'utf-8) -(set-keyboard-coding-system 'utf-8) -(set-selection-coding-system 'utf-8) +;; (setq debug-on-error '(wrong-type-argument)) +;; (setq gc-cons-threshold #x40000000) +;; (setq gc-cons-threshold 50000000) +;; (setenv "LSP_USE_PLISTS" "true") +(setq gc-cons-threshold 100000000) +(add-hook 'emacs-startup-hook + (lambda () (setq gc-cons-threshold (* 50 1024 1024)))) (setq create-lockfiles nil) (setq make-backup-files nil) @@ -28,16 +22,13 @@ (setq kept-new-versions 5) (setq kept-old-versions 5) -(setq default-frame-alist - '((alpha-background . 90) - (undecorated . t))) - ;;; EMACS ;; This is biggest one. Keep going, plugins (oops, I mean packages) will be shorter :) (use-package emacs :straight nil :ensure nil :custom ;; Set custom variables to configure Emacs behavior. + (setq modify-coding-system-alist 'file "" 'utf-8) (column-number-mode t) ;; Display the column number in the mode line. (auto-save-default nil) ;; Disable automatic saving of buffers. (create-lockfiles nil) ;; Prevent the creation of lock files when editing. @@ -66,8 +57,6 @@ :hook ;; Add hooks to enable specific features in certain modes. (prog-mode . display-line-numbers-mode) (org-mode . display-line-numbers-mode) - ;; (org-mode . (lambda () (display-line-numbers-mode -1))) - :config (add-to-list 'custom-theme-load-path user-emacs-directory) @@ -150,40 +139,40 @@ ;; Note: I have left some commented-out code below that may facilitate your ;; Emacs journey later on. These configurations can be useful for displaying ;; other types of buffers in side windows, allowing for a more organized workspace. -(use-package window - :straight nil - :ensure nil ;; This is built-in, no need to fetch it. - :custom - (display-buffer-alist - '( - ;; ("\\*.*e?shell\\*" - ;; (display-buffer-in-side-window) - ;; (window-height . 0.25) - ;; (side . bottom) - ;; (slot . -1)) + (use-package window + :straight nil + :ensure nil ;; This is built-in, no need to fetch it. + :custom + (display-buffer-alist + '( + ;; ("\\*.*e?shell\\*" + ;; (display-buffer-in-side-window) + ;; (window-height . 0.25) + ;; (side . bottom) + ;; (slot . -1)) - ("\\*\\(Backtrace\\|Warnings\\|Compile-Log\\|[Hh]elp\\|Messages\\|Bookmark List\\|Ibuffer\\|Occur\\|eldoc.*\\)\\*" - (display-buffer-in-side-window) - (window-height . 0.25) - (side . bottom) - (slot . 0)) + ("\\*\\(Backtrace\\|Warnings\\|Compile-Log\\|[Hh]elp\\|Messages\\|Bookmark List\\|Ibuffer\\|Occur\\|eldoc.*\\)\\*" + (display-buffer-in-side-window) + (window-height . 0.25) + (side . bottom) + (slot . 0)) - ;; Example configuration for the LSP help buffer, - ;; keeps it always on bottom using 25% of the available space: - ("\\*\\(lsp-help\\)\\*" - (display-buffer-in-side-window) - (window-height . 0.25) - (side . bottom) - (slot . 0)) + ;; Example configuration for the LSP help buffer, + ;; keeps it always on bottom using 25% of the available space: + ("\\*\\(lsp-help\\)\\*" + (display-buffer-in-side-window) + (window-height . 0.25) + (side . bottom) + (slot . 0)) - ;; Configuration for displaying various diagnostic buffers on - ;; bottom 25%: - ("\\*\\(Flymake diagnostics\\|xref\\|ivy\\|Swiper\\|Completions\\)" - (display-buffer-in-side-window) - (window-height . 0.25) - (side . bottom) - (slot . 1)) - ))) + ;; Configuration for displaying various diagnostic buffers on + ;; bottom 25%: + ("\\*\\(Flymake diagnostics\\|xref\\|ivy\\|Swiper\\|Completions\\)" + (display-buffer-in-side-window) + (window-height . 0.25) + (side . bottom) + (slot . 1)) + ))) (use-package dired :straight nil @@ -282,9 +271,9 @@ (use-package eldoc :straight nil :ensure nil ;; This is built-in, no need to fetch it. - :after eglot + :after lsp-mode :config - (setq eldoc-idle-delay 0.0001) ;; Automatically fetch doc help + (setq eldoc-idle-delay 0.001) ;; Automatically fetch doc help (setq eldoc-echo-area-use-multiline-p t) ;; We use the "K" floating help instead ;; set to t if you want docs on the echo area (setq eldoc-help-at-pt t) @@ -292,6 +281,19 @@ :init (global-eldoc-mode)) +(use-package eldoc-box + :ensure t + :straight t + :defer t + :config + (setq eldoc-box-clear-with-C-g t) + (setq eldoc-box-only-multiline-doc nil) + (setq eldoc-box-frame-parameters + '((internal-border-width . 2) + (border-width . 1) + (left-fringe . 8) + (right-fringe . 8)))) + (use-package flymake :straight nil :ensure nil ;; This is built-in, no need to fetch it. @@ -302,6 +304,10 @@ '((error "!»" compilation-error) (warning "»" compilation-warning) (note "»" compilation-info)))) +(setq trusted-content + '("~/.emacs.d/config.el" + "~/.emacs.d/init.el")) + (use-package xref :straight nil :ensure nil) @@ -369,7 +375,6 @@ (use-package org-modern :ensure t - :straight t ) (with-eval-after-load 'org (global-org-modern-mode)) @@ -383,7 +388,7 @@ org-agenda-remove-tags t) (use-package org-super-agenda - :after org + :defer t :config (setq org-super-agenda-header-prefix "\n ") ;; Hide the thin width char glyph @@ -438,8 +443,7 @@ denote-directory (expand-file-name "~/org/"))) :ensure t) (use-package which-key - :straight nil - :ensure nil + :ensure t :defer t :hook (after-init . which-key-mode) @@ -486,6 +490,7 @@ denote-directory (expand-file-name "~/org/"))) ;; It integrates well with other completion frameworks like Vertico, enabling ;; features like previews and enhanced register management. It's useful for ;; navigating buffers, files, and xrefs with ease. + (use-package consult :ensure t :straight t @@ -493,8 +498,8 @@ denote-directory (expand-file-name "~/org/"))) :init (advice-add #'register-preview :override #'consult-register-window) - ;; (setq xref-show-xrefs-function #'consult-xref - ;; xref-show-definitions-function #'consult-xref) + (setq xref-show-xrefs-function #'consult-xref + xref-show-definitions-function #'consult-xref) :config (setq consult-buffer-filter @@ -622,18 +627,20 @@ completion-category-overrides '((file (styles partial-completion))))) ;; Customi (use-package typst-ts-mode :straight t :mode "\\.typ\\'" - :hook (typst-ts-mode . eglot-ensure) + ;; :hook (typst-ts-mode . eglot-ensure) :config :defer t - (with-eval-after-load 'eglot - (add-to-list 'eglot-server-programs - `(typst-ts-mode . ,(eglot-alternatives '("tinymist" "typst-lsp")))))) + ;; (with-eval-after-load 'eglot + ;; (add-to-list 'eglot-server-programs + ;; `(typst-ts-mode . ,(eglot-alternatives '("tinymist" "typst-lsp"))))) + ) (use-package rustic :ensure t :defer t - :custom - (rustic-lsp-client 'eglot)) + ;; :custom + ;; (rustic-lsp-client 'eglot) + ) ;; Make sure rustic gets activated in the org-src block and add the original file's source code. (defun my-read-file-to-string (file) @@ -666,45 +673,105 @@ completion-category-overrides '((file (styles partial-completion))))) ;; Customi (when (eq major-mode 'rustic-mode) (my-delete-hidden-text))) -(use-package eglot - :ensure nil - :straight nil - :hook ((rustic-mode . eglot-ensure) - (nix-mode . eglot-ensure) - (python-mode . eglot-ensure) - ;; (eglot-managed-mode . (lambda () (eldoc-mode -1))) - ) - :bind (:map eglot-mode-map - ("M-<return>" . eglot-code-actions) - ("C-M-." . xref-find-references) - ("C-c r" . eglot-rename)) - :config - (add-to-list 'eglot-server-programs - `(python-mode - . ,(eglot-alternatives '(("basedpyright-langserver" "--stdio") - ("pyright-langserver" "--stdio") - "jedi-language-server" - "pylsp")))) - (setq eldoc-echo-area-use-multiline-p nil - eglot-inlay-hints-mode -1) - (add-to-list 'eglot-server-programs '(nix-mode . ("nixd")))) +(use-package yasnippet + :ensure t + :after lsp-mode + :hook ((prog-mode . yas-minor-mode) + (org-mode . yas-minor-mode))) -(use-package eglot-booster -:straight ( eglot-booster :type git :host nil :repo "https://github.com/jdtsmith/eglot-booster") -:after eglot -:config (eglot-booster-mode)) +(use-package yasnippet-snippets + :ensure t + :after yasnippet) -(use-package consult-eglot - :straight t - :after (consult eglot)) +;; (use-package eglot +;; :ensure nil +;; :straight nil +;; :hook ((rustic-mode . eglot-ensure) +;; (nix-mode . eglot-ensure) +;; (python-mode . eglot-ensure) +;; (eglot-managed-mode . (lambda () (eglot-inlay-hints-mode -1))) +;; ) +;; :bind (:map eglot-mode-map +;; ("M-<return>" . eglot-code-actions) +;; ("C-M-." . xref-find-references) +;; ("C-c r" . eglot-rename)) +;; :config +;; (add-to-list 'eglot-server-programs +;; `(python-mode +;; . ,(eglot-alternatives '(("basedpyright-langserver" "--stdio") +;; ("pyright-langserver" "--stdio") +;; "jedi-language-server" +;; "pylsp")))) +;; (setq eldoc-echo-area-use-multiline-p nil) +;; (add-to-list 'eglot-server-programs '(nix-mode . ("nixd")))) -(use-package olivetti +;; (use-package consult-eglot +;; :straight t +;; :after (consult eglot)) +(use-package lsp-mode :ensure t - :defer t) + :straight t + :defer t + :hook (;; Replace XXX-mode with concrete major mode (e.g. python-mode) + (lsp-mode . lsp-enable-which-key-integration) ;; Integrate with Which Key + ((js-mode ;; Enable LSP for JavaScript + tsx-ts-mode ;; Enable LSP for TSX + typescript-ts-base-mode ;; Enable LSP for TypeScript + css-mode ;; Enable LSP for CSS + go-ts-mode ;; Enable LSP for Go + js-ts-mode ;; Enable LSP for JavaScript (TS mode) + prisma-mode ;; Enable LSP for Prisma + python-base-mode ;; Enable LSP for Python + ruby-base-mode ;; Enable LSP for Ruby + rust-ts-mode ;; Enable LSP for Rust + nix-mode + web-mode) . lsp-deferred)) ;; Enable LSP for Web (HTML) + :commands lsp + :custom + (lsp-keymap-prefix "C-c l") ;; Set the prefix for LSP commands. + (lsp-inlay-hint-enable nil) ;; Usage of inlay hints. + (lsp-completion-provider :none) ;; Disable the default completion provider. + (lsp-session-file (locate-user-emacs-file ".lsp-session")) ;; Specify session file location. + (lsp-log-io nil) ;; Disable IO logging for speed. + (lsp-idle-delay 0.5) ;; Set the delay for LSP to 0 (debouncing). + (lsp-keep-workspace-alive nil) ;; Disable keeping the workspace alive. + ;; Core settings + (lsp-enable-xref t) ;; Enable cross-references. + (lsp-auto-configure t) ;; Automatically configure LSP. + (lsp-enable-links nil) ;; Disable links. + (lsp-eldoc-enable-hover t) ;; Enable ElDoc hover. + (lsp-enable-file-watchers nil) ;; Disable file watchers. + (lsp-enable-folding nil) ;; Disable folding. + (lsp-enable-imenu t) ;; Enable Imenu support. + (lsp-enable-indentation nil) ;; Disable indentation. + (lsp-enable-on-type-formatting nil) ;; Disable on-type formatting. + (lsp-enable-suggest-server-download t) ;; Enable server download suggestion. + (lsp-enable-symbol-highlighting t) ;; Enable symbol highlighting. + (lsp-enable-text-document-color t) ;; Enable text document color. + ;; Modeline settings + (lsp-modeline-code-actions-enable nil) ;; Keep modeline clean. + (lsp-modeline-diagnostics-enable nil) ;; Use `flymake' instead. + (lsp-modeline-workspace-status-enable t) ;; Display "LSP" in the modeline when enabled. + (lsp-signature-doc-lines 1) ;; Limit echo area to one line. + (lsp-eldoc-render-all t) ;; Render all ElDoc messages. + ;; Completion settings + (lsp-completion-enable t) ;; Enable completion. + (lsp-completion-enable-additional-text-edit t) ;; Enable additional text edits for completions. + (lsp-enable-snippet nil) ;; Disable snippets + (lsp-completion-show-kind t) ;; Show kind in completions. + ;; Lens settings + (lsp-lens-enable t) ;; Enable lens support. + ;; Headerline settings + (lsp-headerline-breadcrumb-enable-symbol-numbers nil) ;; Enable symbol numbers in the headerline. + (lsp-headerline-breadcrumb-enable nil) + ;; (lsp-headerline-arrow "▶") ;; Set arrow for headerline. + (lsp-headerline-breadcrumb-enable-diagnostics nil) ;; Disable diagnostics in headerline. + (lsp-headerline-breadcrumb-icons-enable nil) ;; Disable icons in breadcrumb. + ;; Semantic settings + (lsp-semantic-tokens-enable nil)) ;; Disable semantic tokens. -(use-package eldoc-box +(use-package olivetti :ensure t - :straight t :defer t) (use-package diff-hl @@ -810,8 +877,8 @@ completion-category-overrides '((file (styles partial-completion))))) ;; Customi (define-key evil-inner-text-objects-map "b" 'evil-textobj-anyblock-inner-block) (define-key evil-outer-text-objects-map "b" 'evil-textobj-anyblock-a-block) - (define-key evil-inner-text-objects-map "q" 'evil-textobj-anyblock-inner-quote) - (define-key evil-outer-text-objects-map "q" 'evil-textobj-anyblock-a-quote) + ;; (define-key evil-inner-text-objects-map "q" 'evil-textobj-anyblock-inner-quote) + ;; (define-key evil-outer-text-objects-map "q" 'evil-textobj-anyblock-a-quote) (setq evil-textobj-anyblock-blocks '(("(" . ")") @@ -819,6 +886,29 @@ completion-category-overrides '((file (styles partial-completion))))) ;; Customi ("\\[" . "\\]") ("<" . ">")))) +(evil-define-text-object my-evil-textobj-anyblock-inner-quote + (count &optional beg end type) + "Select the closest outer quote." + (let ((evil-textobj-anyblock-blocks + '(("'" . "'") + ("\"" . "\"") + ("`" . "'") + ("“" . "”")))) + (evil-textobj-anyblock--make-textobj beg end type count nil))) + +(evil-define-text-object my-evil-textobj-anyblock-a-quote + (count &optional beg end type) + "Select the closest outer quote." + (let ((evil-textobj-anyblock-blocks + '(("'" . "'") + ("\"" . "\"") + ("`" . "'") + ("“" . "”")))) + (evil-textobj-anyblock--make-textobj beg end type count t))) + +(define-key evil-inner-text-objects-map "q" 'my-evil-textobj-anyblock-inner-quote) +(define-key evil-outer-text-objects-map "q" 'my-evil-textobj-anyblock-a-quote) + (use-package avy :ensure t :straight t @@ -1143,9 +1233,9 @@ mode-line-buffer-identification (defvar cashmere/font-height 170) -(when (member "Maple Mono NF" (font-family-list)) - (set-face-attribute 'default nil :font "Maple Mono NF" :height cashmere/font-height) - (set-face-attribute 'fixed-pitch nil :family "Maple Mono NF" :height cashmere/font-height)) +(when (member "Fragment Mono" (font-family-list)) + (set-face-attribute 'default nil :font "Fragment Mono" :height cashmere/font-height) + (set-face-attribute 'fixed-pitch nil :family "Fragment Mono" :height cashmere/font-height)) (when (member "Maple Mono NF" (font-family-list)) (set-face-attribute 'variable-pitch nil :family "Maple Mono NF" :height cashmere/font-height)) @@ -1274,6 +1364,14 @@ mode-line-buffer-identification :ensure t :defer t) +(defun my/lsp-describe-and-jump () + "Show hover documentation and jump to *lsp-help* buffer." + (interactive) + (lsp-describe-thing-at-point) + (let ((help-buffer "*lsp-help*")) + (when (get-buffer help-buffer) + (switch-to-buffer-other-window help-buffer)))) + (use-package pdf-tools :ensure t :magic ("%PDF" . pdf-view-mode) @@ -1281,13 +1379,12 @@ mode-line-buffer-identification (pdf-tools-install :no-query) :hook (pdf-view-mode . (lambda () (display-line-numbers-mode -1)))) -;; (setq ) - (my-leader + "SPC" '(projectile-switch-project :wk "switch project") "sp" '(consult-ripgrep :wk "search project") "/" '(consult-line :wk "search buffer") "." '(find-file :wk "find file") - "," '(bufler-switch-buffer :wk "switch buffer") + "," '(consult-buffer :wk "switch buffer") ":" (lambda () (interactive) (execute-extended-command nil)) "d" '(:ignore t :wk "denote") @@ -1326,7 +1423,7 @@ mode-line-buffer-identification "g" '(:ignore t :wk "git/goto") "gg" '(magit-status :wk "status") "gl" '(magit-log-current :wk "log") - "gd" '(xref-find-definitions :wk "go to definition") ; sowohl hier als auch unter code + "gd" '(xref-find-definitions :wk "go to definition") "gs" '(magit-status :wk "status") "gb" '(vc-annotate :wk "blame") @@ -1348,17 +1445,17 @@ mode-line-buffer-identification "wo" '(delete-other-windows :wk "delete others") "c" '(:ignore t :wk "code") - "ca" '(eglot-code-actions :wk "code actions") - "cd" '(xref-find-definitions :wk "go to definition") ; sowohl hier als auch unter g - "cD" '(xref-find-references :wk "find references") - "cr" '(eglot-rename :wk "lsp rename") - "ch" '(eglot-help-at-point :wk "help at point") - "cf" '(eglot-format :wk "format") - "ci" '(eglot-find-implementation :wk "implementation") - "ct" '(eglot-find-typeDefinition :wk "type definition") - "cs" '(consult-eglot-symbols :wk "workspace symbols") - "cS" '(eglot-shutdown :wk "shutdown lsp") - "cR" '(eglot-reconnect :wk "restart lsp") + "ca" '(lsp-code-action :wk "code actions") + ;; "cd" '(xref-find-definitions :wk "go to definition") + ;; "cD" '(xref-find-references :wk "find references") + "cr" '(lsp-rename :wk "lsp rename") + ;; "ch" '(eglot-help-at-point :wk "help at point") + "cf" '(lsp-format-buffer :wk "format") + ;; "ci" '(eglot-find-implementation :wk "implementation") + ;; "ct" '(eglot-find-typeDefinition :wk "type definition") + ;; "cs" '(consult-eglot-symbols :wk "workspace symbols") + ;; "cS" '(eglot-shutdown :wk "shutdown lsp") + ;; "cR" '(eglot-reconnect :wk "restart lsp") "m" '(:ignore t :wk "mode") "mp" (list (lambda () @@ -1376,6 +1473,34 @@ mode-line-buffer-identification "u" '(undo-tree-visualize :wk "undo tree") "P" '(consult-yank-from-kill-ring :wk "paste history")) +;; (defun my/evil-eldoc-box-lookup () +;; "Show documentation using eldoc-box." +;; (interactive) +;; (cond +;; ((and (fboundp 'eglot-managed-p) (eglot-managed-p)) +;; (eldoc-box-help-at-point)) +;; (t +;; (call-interactively 'describe-symbol)))) + +(general-def 'normal 'override + "K" 'my/lsp-describe-and-jump) + +(defun my/ibuffer-smart () + (interactive) + (ibuffer) + (local-set-key (kbd "RET") + (lambda () + (interactive) + (ibuffer-visit-buffer) + (kill-buffer "*Ibuffer*"))) + (local-set-key (kbd "q") + (lambda () + (interactive) + (kill-buffer "*Ibuffer*")))) + +(my-leader + "bi" 'my/ibuffer-smart) + (my-local-leader "a" '(org-agenda :wk "org agenda") "t" '(eat :wk "terminal") @@ -1456,20 +1581,6 @@ mode-line-buffer-identification (general-def 'normal eat-mode-map "C-l" 'eat-reset) -;; (defun my-toggle-org-tree-indirect-buffer () -;; (interactive) -;; (if (and (boundp 'my-org-indirect-buffer) -;; my-org-indirect-buffer -;; (buffer-live-p my-org-indirect-buffer)) -;; (progn -;; (kill-buffer my-org-indirect-buffer) -;; (setq my-org-indirect-buffer nil)) -;; (org-tree-to-indirect-buffer) -;; (setq my-org-indirect-buffer (current-buffer)) -;; (delete-other-windows))) - -;; (evil-define-key 'normal 'org (kbd "z n") 'my-toggle-org-tree-indirect-buffer) - (define-key minibuffer-local-map [escape] 'abort-recursive-edit) (define-key minibuffer-local-ns-map [escape] 'abort-recursive-edit) (define-key minibuffer-local-completion-map [escape] 'abort-recursive-edit) |
