diff options
Diffstat (limited to '.config/emacs/settings.org')
| -rw-r--r-- | .config/emacs/settings.org | 639 |
1 files changed, 274 insertions, 365 deletions
diff --git a/.config/emacs/settings.org b/.config/emacs/settings.org index 2e0c1ec..a5d33f0 100644 --- a/.config/emacs/settings.org +++ b/.config/emacs/settings.org @@ -1,213 +1,236 @@ * Initialization -** Customize in different file -#+BEGIN_SRC emacs-lisp - (setq custom-file (locate-user-emacs-file "custom.el")) - (load custom-file :no-error-if-file-is-missing) -#+END_SRC ** Garbage Collection Improvement #+BEGIN_SRC emacs-lisp - (defun my-minibuffer-setup-hook () - (setq gc-cons-threshold most-positive-fixnum)) - (defun my-minibuffer-exit-hook () - (setq gc-cons-threshold 800000000)) +(defun my-minibuffer-setup-hook () + (setq gc-cons-threshold most-positive-fixnum)) + +(defun my-minibuffer-exit-hook () + (setq gc-cons-threshold 800000000)) - (add-hook 'minibuffer-setup-hook #'my-minibuffer-setup-hook) - (add-hook 'minibuffer-exit-hook #'my-minibuffer-exit-hook) +(add-hook 'minibuffer-setup-hook #'my-minibuffer-setup-hook) +(add-hook 'minibuffer-exit-hook #'my-minibuffer-exit-hook) - (defun gc-idle-timer () - "Trigger garbage collection when Emacs is idle for 0.5 seconds." - (run-with-idle-timer 1.2 t 'garbage-collect)) +(defun gc-idle-timer () + "Trigger garbage collection when Emacs is idle for 0.5 seconds." + (run-with-idle-timer 1.2 t 'garbage-collect)) + +(gc-idle-timer) - (gc-idle-timer) #+END_SRC -** Packages + +** List of packages to install #+BEGIN_SRC emacs-lisp - ;; package lists - (require 'package) - (add-to-list 'package-archives '("gnu" . "https://elpa.gnu.org/packages/")) - (add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/")) - (package-initialize) - - ;; use package - (when (< emacs-major-version 29) - (unless (package-installed-p 'use-package) - (unless package-archive-contents - (package-refresh-contents)) - (package-install 'use-package))) - - ;; remove stupid warnings - (add-to-list 'display-buffer-alist - '("\\`\\*\\(Warnings\\|Compile-Log\\)\\*\\'" - (display-buffer-no-window) - (allow-no-window . t))) +(setq my-package-list '( use-package + no-littering + rainbow-delimiters + ansi-color + expand-region + mwim + delsel + multiple-cursors + evil-nerd-commenter + dired-subtree + dracula-theme + nerd-icons + nerd-icons-dired + nerd-icons-completion + nerd-icons-corfu + vertico + marginalia + orderless + consult + magit + lsp-mode + lsp-ui + corfu + yasnippet + yasnippet-snippets)) #+END_SRC +** Packages +#+BEGIN_SRC emacs-lisp +(require 'package) ;; Emacs builtin +;; set package.el repositories +(setq package-archives + '( + ("org" . "https://orgmode.org/elpa/") + ("gnu" . "https://elpa.gnu.org/packages/") + ("melpa" . "https://melpa.org/packages/") + )) + +;; initialize built-in package management +(package-initialize) + +;; update packages list if we are on a new install +(unless package-archive-contents + (package-refresh-contents)) + +;; programmatically install/ensure installed +;; pkgs in your personal list +(dolist (package my-package-list) + (unless (package-installed-p package) + (package-install package))) + +#+END_SRC +** Customize in different file +#+BEGIN_SRC emacs-lisp + (setq custom-file (expand-file-name "customs.el" user-emacs-directory)) + (load custom-file :no-error-if-file-is-missing) +#+END_SRC * Basic changes ** Behaviour #+BEGIN_SRC emacs-lisp - (use-package no-littering) +(use-package no-littering) - (setq make-backup-files nil - create-lockfiles nil - erc-join-buffer 'window - confirm-kill-processes nil) +(setq make-backup-files nil + create-lockfiles nil + erc-join-buffer 'window + confirm-kill-processes nil) - (setq inhibit-startup-message t - backup-inhibited t) +(setq inhibit-startup-message t + backup-inhibited t) #+END_SRC ** Org Mode #+BEGIN_SRC emacs-lisp - (setq org-startup-folded t) + (setq org-startup-folded t + org-src-preserve-indentation t + org-src-tab-acts-natively t + org-edit-src-content-indentation t) #+END_SRC ** UI #+BEGIN_SRC emacs-lisp - (scroll-bar-mode -1) - (tool-bar-mode -1) - (tooltip-mode -1) - (menu-bar-mode -1) +(scroll-bar-mode -1) +(tool-bar-mode -1) +(tooltip-mode -1) +(menu-bar-mode -1) - (column-number-mode +1) - (setq-default fill-column 80) - (global-display-line-numbers-mode t) - (setq display-line-numbers-width-start t) +(column-number-mode +1) +(setq-default fill-column 80) +(global-display-line-numbers-mode t) +(setq display-line-numbers-width-start t) - (use-package rainbow-delimiters - :hook (prog-mode . rainbow-delimiters-mode)) +(use-package rainbow-delimiters + :hook (prog-mode . rainbow-delimiters-mode)) - (use-package ansi-color - :hook (compilation-filter . ansi-color-compilation-filter)) +(use-package ansi-color + :hook (compilation-filter . ansi-color-compilation-filter)) #+END_SRC ** Text Editing #+BEGIN_SRC emacs-lisp - ;; scrolling - (setq scroll-up-aggressively nil - scroll-down-aggressively nil - scroll-conservatively 101 - display-line-numbers-type t) - (setq scroll-step 1) - (setq scroll-margin 8) - (global-set-key (kbd "M-n") 'scroll-up-line) - (global-set-key (kbd "M-p") 'scroll-down-line) - - ;; electric pair - (electric-pair-mode +1) - - ;; improved C-g dwim - (defun prot/keyboard-quit-dwim () - (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) - - ;; expand keybind - (use-package expand-region - :bind("C-=" . er/expand-region)) - - ;; better move beginning and end - (use-package mwim - :bind (("C-a" . mwim-beginning) - ("C-e" . mwim-end-of-line))) - - ;; selected marked text when typing start - (use-package delsel - :ensure nil ; no need to install it as it is built-in - :hook (after-init . delete-selection-mode)) - - (use-package multiple-cursors - :bind (:map global-map - ("C->" . 'mc/mark-next-like-this) - ("C-<" . 'mc/mark-previous-like-this) - ("C-c C->" . 'mc/mark-all-like-this) - :map mc/keymap - ("<return>" . nil))) - - ;; better commenting - (use-package evil-nerd-commenter - :bind ("M-;" . evilnc-comment-or-uncomment-lines)) + +;; tab width +(setq-default tab-width 4) +(setq backward-delete-char-untabify-method "hungry") + +;; scrolling +(setq scroll-up-aggressively nil + scroll-down-aggressively nil + scroll-conservatively 101 + display-line-numbers-type t) +(setq scroll-step 1) +(setq scroll-margin 8) +(global-set-key (kbd "M-n") 'scroll-up-line) +(global-set-key (kbd "M-p") 'scroll-down-line) + +;; electric pair +(electric-pair-mode +1) + +;; improved C-g dwim +(defun prot/keyboard-quit-dwim () + (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) + +;; expand keybind +(use-package expand-region + :bind("C-=" . er/expand-region)) + +;; better move beginning and end +(use-package mwim + :bind (("C-a" . mwim-beginning) + ("C-e" . mwim-end-of-line))) + +;; selected marked text when typing start +(use-package delsel + :ensure nil ; no need to install it as it is built-in + :hook (after-init . delete-selection-mode)) + +(use-package multiple-cursors + :bind (:map global-map + ("C->" . 'mc/mark-next-like-this) + ("C-<" . 'mc/mark-previous-like-this) + ("C-c C->" . 'mc/mark-all-like-this) + :map mc/keymap + ("<return>" . nil))) + +;; better commenting +(use-package evil-nerd-commenter + :bind ("M-;" . evilnc-comment-or-uncomment-lines)) + #+END_SRC -** DIRED + +** Dired #+BEGIN_SRC emacs-lisp - (use-package dired - :ensure nil - :commands (dired) - :hook - ((dired-mode . dired-hide-details-mode) - (dired-mode . hl-line-mode)) - :config - (setq dired-recursive-copies 'always) - (setq dired-recursive-deletes 'always) - (setq dired-dwim-target t) - (setq dired-kill-when-opening-new-dired-buffer t) - (setq dired-listing-switches "-alh --group-directories-first")) - - (use-package dired-subtree - :ensure t - :after dired - :bind - ( :map dired-mode-map - ("<tab>" . dired-subtree-toggle) - ("TAB" . dired-subtree-toggle) - ("<backtab>" . dired-subtree-remove) - ("S-TAB" . dired-subtree-remove)) - :config - (setq dired-subtree-use-backgrounds nil)) - - (use-package casual) - (use-package casual-dired) ; optional if using autoloaded menu - (keymap-set dired-mode-map "C-o" #'casual-dired-tmenu) - (keymap-set dired-mode-map "s" #'casual-dired-sort-by-tmenu) ; optional - (keymap-set dired-mode-map "/" #'casual-dired-search-replace-tmenu) ; optional +(use-package dired + :ensure nil + :commands (dired) + :hook + ((dired-mode . dired-hide-details-mode) + (dired-mode . hl-line-mode)) + :config + (setq dired-recursive-copies 'always) + (setq dired-recursive-deletes 'always) + (setq dired-dwim-target t) + (setq dired-kill-when-opening-new-dired-buffer t) + (setq dired-listing-switches "-alh --group-directories-first")) + +(use-package dired-subtree + :after dired + :bind + ( :map dired-mode-map + ("<tab>" . dired-subtree-toggle) + ("TAB" . dired-subtree-toggle) + ("<backtab>" . dired-subtree-remove) + ("S-TAB" . dired-subtree-remove)) + :config + (setq dired-subtree-use-backgrounds nil)) #+END_SRC * Style -#+begin_src emacs-lisp +#+BEGIN_SRC emacs-lisp - ;; selected frame transparent - (set-frame-parameter (selected-frame) 'alpha '(90 . 90)) - (add-to-list 'default-frame-alist '(alpha . (90 . 90))) +(use-package dracula-theme) +(load-theme 'dracula) - ;; make frame transparent - (set-frame-parameter nil 'alpha-background 75) - (add-to-list 'default-frame-alist '(alpha-background . 75)) +(set-face-attribute 'show-paren-match nil :background "dark violet" :foreground "black") -#+end_src -** Fonts -#+BEGIN_SRC emacs-lisp - (let ((mono-spaced-font "Monospace") - (proportionately-spaced-font "Sans")) - (set-face-attribute 'default nil :family mono-spaced-font :height 100) - (set-face-attribute 'fixed-pitch nil :family mono-spaced-font :height 1.0) - (set-face-attribute 'variable-pitch nil :family proportionately-spaced-font :height 1.0)) #+END_SRC -** Themes -#+BEGIN_SRC emacs-lisp - (use-package doom-themes - :config - (setq doom-themes-enable-bold t - doom-themes-enable-italic t) - (doom-themes-org-config)) - (load-theme `doom-badger t) -#+END_SRC -** Icons +*** Icons #+BEGIN_SRC emacs-lisp - (use-package nerd-icons - :ensure t) + +(use-package nerd-icons) + +(use-package nerd-icons-dired + :ensure t + :hook + (dired-mode . nerd-icons-dired-mode)) (use-package nerd-icons-completion :ensure t @@ -221,247 +244,133 @@ :config (add-to-list 'corfu-margin-formatters #'nerd-icons-corfu-formatter)) -(use-package nerd-icons-dired - :ensure t - :hook - (dired-mode . nerd-icons-dired-mode)) #+END_SRC -** Smooth Scrolling -#+BEGIN_SRC emacs-lisp - - -#+END_SRC -** Diminish +* Minibuffer completion #+BEGIN_SRC emacs-lisp - (use-package diminish - :diminish flymake-mode - :diminish flycheck-mode - :diminish eldoc-mode - :diminish projectile-mode) -#+END_SRC -* Completion -#+BEGIN_SRC emacs-lisp - - (use-package vertico - :custom - (vertico-count 15) - :diminish vertico-mode - :bind (:map vertico-map +(use-package vertico + :ensure nil + :custom + (vertico-count 15) + :diminish vertico-mode + :bind (:map vertico-map ("C-n" . vertico-next) ("C-p" . vertico-previous)) - :init - (vertico-mode t)) - - (use-package vertico-directory - :after vertico - :ensure nil - ;; More convenient directory navigation commands - :bind (:map vertico-map + :init + (vertico-mode t)) + +(use-package vertico-directory + :after vertico + :ensure nil + + ;; More convenient directory navigation commands + :bind (:map vertico-map ("RET" . vertico-directory-enter) ("DEL" . vertico-directory-delete-char) ("M-DEL" . vertico-directory-delete-word))) - (use-package consult - :custom - ;; Disable preview - (consult-preview-key nil) - :bind - (("C-x b" . 'consult-buffer) ;; Switch buffer, including recentf and bookmarks - ("M-l" . 'consult-git-grep) ;; Search inside a project - ("M-y" . 'consult-yank-pop) ;; Paste by selecting the kill-ring - ("M-s" . 'consult-line) ;; Search current buffer, like swiper - ("C-c i" . 'consult-imenu) ;; Search the imenu - )) - - (use-package marginalia - :after vertico - :custom - (marginalia-annotators '(marginalia-annotators-heavy marginalia-annotators-light nil)) - :config - (marginalia-mode)) - - (use-package orderless - :config - (setq completion-styles '(orderless partial-completion basic) +(use-package marginalia + :after vertico + :custom + (marginalia-annotators '(marginalia-annotators-heavy marginalia-annotators-light nil)) + :config + (marginalia-mode)) + +(use-package orderless + :config + (setq completion-styles '(orderless partial-completion basic) completion-category-defaults nil completion-category-overrides '((file (styles . (partial-completion)))))) - (use-package embark - :bind - (("C-." . embark-act) ;; Begin the embark process - ("C-;" . embark-dwim) ;; good alternative: M-. - ("C-h B" . embark-bindings)) ;; alternative for `describe-bindings' - :config - (use-package embark-consult)) - - (use-package savehist - :ensure nil ; it is built-in - :hook (after-init . savehist-mode)) +(use-package savehist + :ensure nil ; it is built-in + :hook (after-init . savehist-mode)) #+END_SRC -* Development -** Magit -#+BEGIN_SRC emacs-lisp - (use-package transient) - (use-package magit - :bind (("C-x g" . magit-status)) - :custom - (magit-display-buffer-function #'magit-display-buffer-same-window-except-diff-v1)) -#+END_SRC -** Projectile -#+BEGIN_SRC emacs-lisp - (use-package projectile - :init - (projectile-mode t) - :bind (:map projectile-mode-map - ("C-c p" . projectile-command-map))) -#+END_SRC - -** Language Modes +* Misc Binds #+BEGIN_SRC emacs-lisp - (use-package markdown-mode - :mode ("\\.md\\'" . markdown-mode)) - (use-package cmake-mode) - (use-package cmake-font-lock) - - (use-package glsl-mode) +;; shortcuts +(use-package consult + :custom + ;; Disable preview + (consult-preview-key nil) + :bind + (("C-x b" . 'consult-buffer) ;; Switch buffer, including recentf and bookmarks + ("M-l" . 'consult-git-grep) ;; Search inside a project + ("M-y" . 'consult-yank-pop) ;; Paste by selecting the kill-ring + ("M-s" . 'consult-line) ;; Search current buffer, like swiper + ("C-c i" . 'consult-imenu) ;; Search the imenu + )) + +(global-set-key (kbd "C-c f") 'ff-find-other-file) #+END_SRC - -** yasnippet +* Development +** Magit #+BEGIN_SRC emacs-lisp - (use-package yasnippet - :config - (yas-global-mode t) - :diminish yas-minor-mode) +(use-package transient) - (use-package yasnippet-snippets) +(use-package magit + :bind (("C-x g" . magit-status)) + :custom + (magit-display-buffer-function #'magit-display-buffer-same-window-except-diff-v1)) #+END_SRC - ** LSP +*** lsp-mode #+BEGIN_SRC emacs-lisp - - (use-package lsp-mode - :commands (lsp lsp-deferred) - :init - (setq lsp-keymap-prefix "C-c l" - lsp-headerline-breadcrumb-enable nil - lsp-lens-enable nil - lsp-completion-enable-additional-text-edit nil) - (defun my/lsp-mode-setup-completion () - (setf (alist-get 'styles (alist-get 'lsp-capf completion-category-defaults)) - '(orderless))) ;; Configure orderless - :hook ((lsp-completion-mode . my/lsp-mode-setup-completion) - (c-mode . lsp-deferred) - (c++-mode . lsp-deferred) - (python-mode . lsp-deferred) - (csharp-mode . lsp-deferred)) - - :custom - (lsp-completion-provider :none) ; corfu - (lsp-idle-delay 0.05) - - ) - - (use-package lsp-ui - :hook (lsp-mode . lsp-ui-mode) - :bind ( +(use-package lsp-mode + :init + (setq lsp-keymap-prefix "C-c l" + lsp-headerline-breadcrumb-enable nil + lsp-completion-enable-additional-text-edit nil + lsp-completion-provider :none + lsp-idle-delay 0.05) + :hook (;; automatic lsp + (c++-mode . lsp)) + :commands lsp) + +;; ui +(use-package lsp-ui + :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) )) - #+END_SRC -** Flycheck +*** lsp-mode performance #+BEGIN_SRC emacs-lisp - ;; (use-package flycheck - ;; :config - ;; (add-hook 'after-init-hook #'global-flycheck-mode)) -#+END_SRC -** Corfu -#+BEGIN_SRC emacs-lisp - (use-package corfu - :ensure t - :custom - (corfu-cycle t) - (corfu-auto t) - (corfu-auto-prefix 2) - (corfu-auto-delay 0.05) - (corfu-popupinfo-delay '(0.2 . 0.1)) - (corfu-preview-current 'insert) - (corfu-preselect 'first) - (corfu-on-exact-match nil) - :bind (:map corfu-map - ("C-g" . corfu-quit)) - :init - (global-corfu-mode) - (corfu-history-mode) - (corfu-popupinfo-mode)) - - (defun corfu-lsp-setup () - (setq-local completion-styles '(orderless) - completion-category-defaults nil)) - (add-hook 'lsp-completion-mode-hook #'corfu-lsp-setup) +(setq read-process-output-max (* 1024 1024)) ;; 1mb + #+END_SRC -** C Mode Hook +** Text Completion #+BEGIN_SRC emacs-lisp - (defun my-c-mode-common-hook () - ;; my customizations for all of c-mode, c++-mode, objc-mode, java-mode - (setq c-default-style "k&r" - c-basic-offset 4 - tab-width 4 - indent-tabs-mode t - backward-delete-char-untabify-method "hungry") - (c-set-offset 'arglist-intro '+) - (add-to-list 'c-offsets-alist '(arglist-close . c-lineup-close-paren))) - (add-hook 'c-mode-common-hook 'my-c-mode-common-hook) +(use-package corfu + :bind (:map corfu-map + ("C-g" . corfu-quit)) + :init + (global-corfu-mode) + (corfu-history-mode)) -#+END_SRC +(global-completion-preview-mode) -** LSP Booster -#+BEGIN_SRC emacs-lisp - (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) #+END_SRC -** Keybinds +** Snippets #+BEGIN_SRC emacs-lisp - (global-set-key (kbd "C-c e") 'consult-flymake) - (global-set-key (kbd "C-c f") 'ff-find-other-file) + +(use-package yasnippet + :config + (yas-global-mode t) + :diminish yas-minor-mode) + +(use-package yasnippet-snippets) #+END_SRC |
