emacs changes
This commit is contained in:
parent
c53025cdc4
commit
f5d0d4065f
|
@ -0,0 +1,623 @@
|
|||
#+TITLE: Materus Emacs Cfg
|
||||
#+AUTHOR: materus
|
||||
#+DESCRIPTION: materus emacs configuration
|
||||
#+STARTUP: overview
|
||||
#+PROPERTY: header-args :tangle (expand-file-name "init.el" user-emacs-directory)
|
||||
#+OPTIONS: \n:t
|
||||
#+auto_tangle: t
|
||||
|
||||
* Early Init
|
||||
#+begin_src emacs-lisp :tangle (expand-file-name "early-init.el" user-emacs-directory)
|
||||
;;; -*- lexical-binding: t; -*-
|
||||
|
||||
;;; VARIABLES
|
||||
|
||||
|
||||
(setenv "LSP_USE_PLISTS" "true") ; Make lsp-mode use plists
|
||||
|
||||
(setq c-default-style nil) ; Clear default styles for languages, will set them up later
|
||||
(setq default-input-method nil) ; Disable default input method, I'm not using them anyway so far
|
||||
(setq initial-major-mode 'fundamental-mode) ; Use fundamental mode in scratch buffer, speed up loading, not really important when emacs used as daemon
|
||||
(setq auto-save-default nil) ; TODO: configure auto saves, disable for now
|
||||
(setq backup-directory-alist
|
||||
`((".*" . ,(concat user-emacs-directory "var/backups/")))) ; Set backup location
|
||||
(setq auto-save-file-name-transforms
|
||||
`((".*" ,(concat user-emacs-directory "var/recovery/") t))) ; Set auto-save location
|
||||
(setq auto-save-list-file-prefix (concat user-emacs-directory "var/auto-save/sessions/")) ; Set auto-save-list location
|
||||
(setq load-prefer-newer t) ; Prefer newer files to load
|
||||
|
||||
|
||||
(setq package-enable-at-startup nil)
|
||||
(setq package-quickstart nil) ; Disable package quickstart
|
||||
|
||||
(setq inhibit-startup-screen t)
|
||||
|
||||
(setq inhibit-compacting-font-caches t) ; Don't compact fonts
|
||||
|
||||
(set-language-environment "UTF-8") ; Use UTF-8
|
||||
(setq-default buffer-file-coding-system 'utf-8-unix)
|
||||
|
||||
(setq custom-file (concat user-emacs-directory "etc/custom.el")) ; Set custom file location, don't want clutter in main directory
|
||||
(setq custom-theme-directory
|
||||
(concat user-emacs-directory "/etc/materus/themes" )) ; Set custom themes location
|
||||
|
||||
(setq ring-bell-function 'ignore) ; Disable bell
|
||||
|
||||
|
||||
(defvar materus/emacs-gc-cons-threshold (* 64 1024 1024)
|
||||
"The value of `gc-cons-threshold' after Emacs startup.") ; Define after init garbage collector threshold
|
||||
|
||||
|
||||
;;; GARBAGE COLLECTOR
|
||||
(setq gc-cons-threshold most-positive-fixnum) ; Set `gc-cons-threshold' so it won't collectect during initialization
|
||||
|
||||
(add-hook 'emacs-startup-hook
|
||||
(lambda ()
|
||||
(setq gc-cons-threshold materus/emacs-gc-cons-threshold))) ; Set `gc-cons-threshold' to desired value after startup
|
||||
|
||||
|
||||
|
||||
|
||||
;;; FRAMES
|
||||
|
||||
(setq frame-inhibit-implied-resize t)
|
||||
(setq frame-resize-pixelwise t)
|
||||
(setq window-resize-pixelwise t) ; Allow pixelwise resizing of window and frame
|
||||
|
||||
(unless (daemonp)
|
||||
(add-to-list 'initial-frame-alist '(fullscreen . maximized))) ; Start first frame maximized if not running as daemon, daemon frame are set up later in config
|
||||
(setq default-frame-alist ; Set default size for frames
|
||||
'((width . 130)
|
||||
(height . 40)))
|
||||
|
||||
(advice-add #'tty-run-terminal-initialization :override #'ignore)
|
||||
(add-hook 'window-setup-hook
|
||||
(lambda ()
|
||||
(unless (display-graphic-p)
|
||||
(advice-remove #'tty-run-terminal-initialization #'ignore)
|
||||
(tty-run-terminal-initialization (selected-frame) nil t)
|
||||
)))
|
||||
|
||||
|
||||
;;; NATIVE COMPILATION
|
||||
|
||||
(setq native-comp-async-report-warnings-errors nil) ; Silence warnings
|
||||
(setq native-comp-speed 3) ; Set native-comp speed
|
||||
|
||||
(setq native-comp-jit-compilation t
|
||||
;;native-comp-deferred-compilation t
|
||||
package-native-compile t)
|
||||
|
||||
|
||||
;; Setting up native-comp cache location
|
||||
|
||||
(when (and (fboundp 'startup-redirect-eln-cache)
|
||||
(fboundp 'native-comp-available-p)
|
||||
(native-comp-available-p))
|
||||
(startup-redirect-eln-cache
|
||||
(convert-standard-filename
|
||||
(concat user-emacs-directory "var/eln-cache/"))))
|
||||
#+end_src
|
||||
|
||||
* Init Core
|
||||
** TMP
|
||||
#+begin_src emacs-lisp
|
||||
;;; -*- lexical-binding: t; -*-
|
||||
|
||||
(when (not emacs-build-time)
|
||||
(print "WARN: emacs-build-time not set up, using current time")
|
||||
(setq emacs-build-time (decode-time (current-time))))
|
||||
(add-to-list 'load-path (concat user-emacs-directory "etc/materus/extra")) ; Extra load path for packages
|
||||
(defvar electric-pair-inhibit-predicate nil)
|
||||
|
||||
|
||||
|
||||
(defvar elpaca-installer-version 0.11)
|
||||
(defvar elpaca-directory (expand-file-name "var/elpaca/" user-emacs-directory))
|
||||
(defvar elpaca-builds-directory (expand-file-name (concat "builds/" emacs-version "/") elpaca-directory))
|
||||
(defvar elpaca-repos-directory (expand-file-name "repos/" elpaca-directory))
|
||||
(defvar elpaca-order '(elpaca :repo "https://github.com/progfolio/elpaca.git"
|
||||
:ref nil :depth 1 :inherit ignore
|
||||
:files (:defaults "elpaca-test.el" (:exclude "extensions"))
|
||||
:build (:not elpaca--activate-package)))
|
||||
(let* ((repo (expand-file-name "elpaca/" elpaca-repos-directory))
|
||||
(build (expand-file-name "elpaca/" elpaca-builds-directory))
|
||||
(order (cdr elpaca-order))
|
||||
(default-directory repo))
|
||||
(add-to-list 'load-path (if (file-exists-p build) build repo))
|
||||
(unless (file-exists-p repo)
|
||||
(make-directory repo t)
|
||||
(when (<= emacs-major-version 28) (require 'subr-x))
|
||||
(condition-case-unless-debug err
|
||||
(if-let* ((buffer (pop-to-buffer-same-window "*elpaca-bootstrap*"))
|
||||
((zerop (apply #'call-process `("git" nil ,buffer t "clone"
|
||||
,@(when-let* ((depth (plist-get order :depth)))
|
||||
(list (format "--depth=%d" depth) "--no-single-branch"))
|
||||
,(plist-get order :repo) ,repo))))
|
||||
((zerop (call-process "git" nil buffer t "checkout"
|
||||
(or (plist-get order :ref) "--"))))
|
||||
(emacs (concat invocation-directory invocation-name))
|
||||
((zerop (call-process emacs nil buffer nil "-Q" "-L" "." "--batch"
|
||||
"--eval" "(byte-recompile-directory \".\" 0 'force)")))
|
||||
((require 'elpaca))
|
||||
((elpaca-generate-autoloads "elpaca" repo)))
|
||||
(progn (message "%s" (buffer-string)) (kill-buffer buffer))
|
||||
(error "%s" (with-current-buffer buffer (buffer-string))))
|
||||
((error) (warn "%s" err) (delete-directory repo 'recursive))))
|
||||
(unless (require 'elpaca-autoloads nil t)
|
||||
(require 'elpaca)
|
||||
(elpaca-generate-autoloads "elpaca" repo)
|
||||
(let ((load-source-file-function nil)) (load "./elpaca-autoloads"))))
|
||||
(add-hook 'after-init-hook #'elpaca-process-queues)
|
||||
(elpaca `(,@elpaca-order))
|
||||
|
||||
(elpaca elpaca-use-package
|
||||
(elpaca-use-package-mode)
|
||||
(setq elpaca-use-package-by-default t))
|
||||
|
||||
|
||||
|
||||
|
||||
(use-package no-littering
|
||||
:config
|
||||
(require 'recentf)
|
||||
(setq package-quickstart-file
|
||||
(concat user-emacs-directory "var/quickstart/package-quickstart-" emacs-version ".el" ))
|
||||
(add-to-list 'recentf-exclude
|
||||
(recentf-expand-file-name no-littering-var-directory))
|
||||
(add-to-list 'recentf-exclude
|
||||
(recentf-expand-file-name no-littering-etc-directory)))
|
||||
(use-package org
|
||||
:mode (("\\.org$" . org-mode))
|
||||
:hook
|
||||
((org-mode . org-indent-mode)
|
||||
(org-mode . display-line-numbers-mode)
|
||||
)
|
||||
:config
|
||||
(require 'org-mouse)
|
||||
(require 'org-tempo)
|
||||
(setq org-src-window-setup 'current-window)
|
||||
(setq org-latex-pdf-process '("latexmk -xelatex -quiet -shell-escape -f -output-directory=%o %f"))
|
||||
(org-babel-do-load-languages
|
||||
'org-babel-load-languages
|
||||
'((latex . t)
|
||||
(emacs-lisp . t)
|
||||
(shell . t)
|
||||
(css . t)
|
||||
(C . t)
|
||||
(calc . t)
|
||||
(awk . t)
|
||||
(sql . t)
|
||||
(sqlite . t)))
|
||||
(add-hook 'org-mode-hook (lambda ()
|
||||
(setq-local
|
||||
electric-pair-inhibit-predicate
|
||||
`(lambda (c)
|
||||
(if
|
||||
(char-equal c ?<) t (,electric-pair-inhibit-predicate c)))))))
|
||||
(elpaca-wait)
|
||||
|
||||
|
||||
|
||||
;;(load custom-file t)
|
||||
|
||||
|
||||
#+end_src
|
||||
|
||||
** Lexical Binding
|
||||
|
||||
#+begin_src emacs-lisp
|
||||
;;; -*- lexical-binding: t; -*-
|
||||
#+end_src
|
||||
** Font & Text
|
||||
#+begin_src emacs-lisp
|
||||
(when (display-graphic-p)
|
||||
(set-frame-font "Hack Nerd Font" nil t))
|
||||
(setq-default cursor-type '(bar . 2))
|
||||
(setq truncate-string-ellipsis "…")
|
||||
|
||||
|
||||
(setq text-mode-ispell-word-completion nil) ; Disable ispell
|
||||
(global-completion-preview-mode 1)
|
||||
#+end_src
|
||||
|
||||
** Frame
|
||||
#+begin_src emacs-lisp
|
||||
(when (daemonp)
|
||||
(add-hook 'after-make-frame-functions
|
||||
(lambda (frame) (when (= (length (frame-list)) 2)
|
||||
(set-frame-parameter frame 'fullscreen 'maximized))
|
||||
(select-frame-set-input-focus frame) )))
|
||||
(global-tab-line-mode 1)
|
||||
(setq window-divider-default-bottom-width 1)
|
||||
(setq window-divider-default-right-width 1)
|
||||
(window-divider-mode 1)
|
||||
(tool-bar-mode -1)
|
||||
(setq-default display-line-numbers-width 3)
|
||||
(setq-default display-line-numbers-widen t)
|
||||
|
||||
(defun startup-screen-advice (orig-fun &rest args)
|
||||
(when (= (seq-count #'buffer-file-name (buffer-list)) 0)
|
||||
(apply orig-fun args)))
|
||||
(advice-add 'display-startup-screen :around #'startup-screen-advice) ; Hide startup screen if started with file
|
||||
#+end_src
|
||||
** Mouse
|
||||
Setting up mouse
|
||||
#+begin_src emacs-lisp
|
||||
(context-menu-mode 1)
|
||||
(setq mouse-wheel-follow-mouse 't)
|
||||
(setq scroll-step 1)
|
||||
(setq mouse-drag-and-drop-region t)
|
||||
(xterm-mouse-mode 1)
|
||||
(pixel-scroll-precision-mode 1)
|
||||
(setq-default pixel-scroll-precision-large-scroll-height 10.0)
|
||||
#+end_src
|
||||
* Packages
|
||||
** Theme
|
||||
#+begin_src emacs-lisp
|
||||
(use-package dracula-theme :config
|
||||
(if (daemonp)
|
||||
(add-hook 'after-make-frame-functions
|
||||
(lambda (frame)
|
||||
(with-selected-frame frame (load-theme 'dracula t))))
|
||||
(load-theme 'dracula t)))
|
||||
|
||||
#+end_src
|
||||
** org
|
||||
#+begin_src emacs-lisp
|
||||
|
||||
(use-package org-modern
|
||||
:after (org)
|
||||
:hook
|
||||
(org-indent-mode . org-modern-mode)
|
||||
(org-agenda-finalize . org-modern-agenda)
|
||||
:config
|
||||
(setq org-modern-block-name '("▼ " . "▲ ")))
|
||||
(use-package org-auto-tangle
|
||||
:after (org)
|
||||
:hook (org-mode . org-auto-tangle-mode)
|
||||
)
|
||||
(use-package toc-org
|
||||
:after (org)
|
||||
:hook
|
||||
((org-mode . toc-org-mode )
|
||||
(markdown-mode . toc-org-mode)))
|
||||
|
||||
#+end_src
|
||||
** rainbow-mode
|
||||
#+begin_src emacs-lisp
|
||||
(use-package rainbow-mode
|
||||
:hook
|
||||
((org-mode . rainbow-mode)
|
||||
(prog-mode . rainbow-mode)))
|
||||
#+end_src
|
||||
** delimiters
|
||||
#+begin_src emacs-lisp
|
||||
(use-package rainbow-delimiters
|
||||
:hook
|
||||
(prog-mode . rainbow-delimiters-mode)
|
||||
:config
|
||||
(set-face-attribute 'rainbow-delimiters-depth-1-face nil :foreground "#FFFFFF")
|
||||
(set-face-attribute 'rainbow-delimiters-depth-2-face nil :foreground "#FFFF00")
|
||||
(set-face-attribute 'rainbow-delimiters-depth-5-face nil :foreground "#6A5ACD")
|
||||
(set-face-attribute 'rainbow-delimiters-unmatched-face nil :foreground "#FF0000"))
|
||||
|
||||
#+end_src
|
||||
** eat
|
||||
#+begin_src emacs-lisp
|
||||
(use-package eat
|
||||
:config
|
||||
(defvar cua--eat-semi-char-keymap (copy-keymap cua--cua-keys-keymap) "EAT semi-char mode CUA keymap")
|
||||
(defvar cua--eat-char-keymap (copy-keymap cua--cua-keys-keymap) "EAT char mode CUA keymap"))
|
||||
|
||||
#+end_src
|
||||
|
||||
** Undo-tree
|
||||
#+begin_src emacs-lisp
|
||||
(use-package undo-tree
|
||||
:config
|
||||
(global-undo-tree-mode 1)
|
||||
(defvar materus/undo-tree-dir (concat user-emacs-directory "var/undo-tree/"))
|
||||
(unless (file-exists-p materus/undo-tree-dir)
|
||||
(make-directory materus/undo-tree-dir t))
|
||||
(setq undo-tree-visualizer-diff t)
|
||||
(setq undo-tree-history-directory-alist `(("." . ,materus/undo-tree-dir )))
|
||||
(setq undo-tree-visualizer-timestamps t))
|
||||
|
||||
#+end_src
|
||||
|
||||
** Dirvish
|
||||
#+begin_src emacs-lisp
|
||||
(use-package dirvish
|
||||
:after (nerd-icons)
|
||||
:config
|
||||
(setq dired-mouse-drag-files t)
|
||||
(dirvish-override-dired-mode 1)
|
||||
(setq dirvish-attributes
|
||||
'(vc-state
|
||||
subtree-state
|
||||
nerd-icons
|
||||
collapse
|
||||
git-msg
|
||||
file-time
|
||||
file-size)))
|
||||
|
||||
#+end_src
|
||||
** orderless
|
||||
#+begin_src emacs-lisp
|
||||
(use-package orderless
|
||||
:init
|
||||
;; Tune the global completion style settings to your liking!
|
||||
;; This affects the minibuffer and non-lsp completion at point.
|
||||
(setq completion-styles '(basic partial-completion orderless)
|
||||
completion-category-defaults nil
|
||||
completion-category-overrides nil))
|
||||
#+end_src
|
||||
** minibuffer
|
||||
#+begin_src emacs-lisp
|
||||
(use-package consult)
|
||||
(use-package marginalia)
|
||||
|
||||
(use-package which-key
|
||||
:config
|
||||
(which-key-mode 1))
|
||||
|
||||
(use-package vertico
|
||||
:after (consult marginalia)
|
||||
:config
|
||||
(setq completion-in-region-function
|
||||
(lambda (&rest args)
|
||||
(apply (if vertico-mode
|
||||
#'consult-completion-in-region
|
||||
#'completion--in-region)
|
||||
args)))
|
||||
(vertico-mode 1)
|
||||
(marginalia-mode 1))
|
||||
(use-package vertico-mouse
|
||||
:config
|
||||
(vertico-mouse-mode 1)
|
||||
:ensure nil
|
||||
:after (vertico))
|
||||
#+end_src
|
||||
|
||||
** nerd-icons
|
||||
#+begin_src emacs-lisp
|
||||
(use-package nerd-icons)
|
||||
(use-package nerd-icons-completion
|
||||
:after (marginalia)
|
||||
:config
|
||||
(nerd-icons-completion-mode 1)
|
||||
(add-hook 'marginalia-mode-hook #'nerd-icons-completion-marginalia-setup))
|
||||
|
||||
#+end_src
|
||||
** diff-hl
|
||||
#+begin_src emacs-lisp
|
||||
(use-package diff-hl
|
||||
:config
|
||||
(setq diff-hl-side 'right)
|
||||
(global-diff-hl-mode 1)
|
||||
(diff-hl-margin-mode 1)
|
||||
(diff-hl-flydiff-mode 1)
|
||||
(global-diff-hl-show-hunk-mouse-mode 1))
|
||||
|
||||
#+end_src
|
||||
|
||||
** modelinne
|
||||
#+begin_src emacs-lisp
|
||||
;; (use-package doom-modeline
|
||||
;; :init (setq doom-modeline-support-imenu t)
|
||||
;; :hook (elpaca-after-init . doom-modeline-mode)
|
||||
;; :config
|
||||
;; (setq doom-modeline-icon t)
|
||||
;; (setq doom-modeline-project-detection 'auto)
|
||||
;; (setq doom-modeline-height 20)
|
||||
;; (setq doom-modeline-enable-word-count t)
|
||||
;; (setq doom-modeline-minor-modes t)
|
||||
;; (setq display-time-24hr-format t)
|
||||
;; (display-time-mode 1)
|
||||
;; (column-number-mode 1)
|
||||
;; (line-number-mode 1))
|
||||
|
||||
(use-package minions
|
||||
:hook (elpaca-after-init . minions-mode))
|
||||
#+end_src
|
||||
|
||||
** dashboard
|
||||
#+begin_src emacs-lisp
|
||||
(use-package dashboard
|
||||
:after (nerd-icons projectile)
|
||||
:config
|
||||
(setq dashboard-center-content t)
|
||||
(setq dashboard-display-icons-p t)
|
||||
(setq dashboard-icon-type 'nerd-icons)
|
||||
(setq dashboard-projects-backend 'projectile)
|
||||
(setq dashboard-items '((recents . 5)
|
||||
(bookmarks . 5)
|
||||
(projects . 5)
|
||||
(agenda . 5)
|
||||
(registers . 5)))
|
||||
(when (or (daemonp) (< (length command-line-args) 2))
|
||||
(add-hook 'elpaca-after-init-hook #'dashboard-insert-startupify-lists)
|
||||
(add-hook 'elpaca-after-init-hook #'dashboard-initialize)
|
||||
(dashboard-setup-startup-hook)))
|
||||
(when (daemonp)
|
||||
(setq initial-buffer-choice (lambda () (get-buffer "*dashboard*")))) ; Show dashboard when emacs is running as daemon)
|
||||
|
||||
#+end_src
|
||||
** treemacs
|
||||
#+begin_src emacs-lisp
|
||||
(use-package treemacs)
|
||||
(use-package treemacs-projectile
|
||||
:after (projectile treemacs))
|
||||
(use-package treemacs-nerd-icons
|
||||
:after (nerd-icons treemacs))
|
||||
(use-package treemacs-perspective
|
||||
:after (treemacs))
|
||||
(use-package treemacs-mouse-interface
|
||||
:after (treemacs)
|
||||
:ensure nil)
|
||||
|
||||
#+end_src
|
||||
|
||||
** magit
|
||||
|
||||
#+begin_src emacs-lisp
|
||||
(use-package transient)
|
||||
(use-package magit
|
||||
:after (transient))
|
||||
|
||||
#+end_src
|
||||
** projectile
|
||||
#+begin_src emacs-lisp
|
||||
(use-package projectile
|
||||
:config (projectile-mode 1))
|
||||
#+end_src
|
||||
** Perspective
|
||||
#+begin_src emacs-lisp
|
||||
(use-package perspective
|
||||
:config
|
||||
(setq persp-mode-prefix-key (kbd "C-c M-p"))
|
||||
(setq persp-modestring-short t)
|
||||
(persp-mode 1)
|
||||
)
|
||||
#+end_src
|
||||
*** Elcord
|
||||
#+begin_src emacs-lisp
|
||||
(defun materus/elcord-toggle (&optional _frame)
|
||||
"Toggle elcord based on visible frames"
|
||||
(if (> (length (frame-list)) 1)
|
||||
(elcord-mode 1)
|
||||
(elcord-mode -1))
|
||||
)
|
||||
(use-package elcord
|
||||
:config
|
||||
(unless (daemonp) (elcord-mode 1))
|
||||
(add-hook 'after-delete-frame-functions 'materus/elcord-toggle)
|
||||
(add-hook 'server-after-make-frame-hook 'materus/elcord-toggle))
|
||||
#+end_src
|
||||
** yasnippet
|
||||
#+begin_src emacs-lisp
|
||||
(use-package yasnippet
|
||||
:config
|
||||
(yas-global-mode 1))
|
||||
#+end_src
|
||||
** Code completion
|
||||
#+begin_src emacs-lisp
|
||||
|
||||
(use-package cape)
|
||||
|
||||
(use-package corfu
|
||||
;; Optional customizations
|
||||
:custom
|
||||
(corfu-cycle nil) ;; Enable cycling for `corfu-next/previous'
|
||||
(corfu-auto t) ;; Enable auto completion
|
||||
(global-corfu-minibuffer nil)
|
||||
;; (corfu-quit-at-boundary nil) ;; Never quit at completion boundary
|
||||
;; (corfu-quit-no-match nil) ;; Never quit, even if there is no match
|
||||
(corfu-preview-current nil) ;; Disable current candidate preview
|
||||
;; (corfu-preselect 'prompt) ;; Preselect the prompt
|
||||
;; (corfu-on-exact-match nil) ;; Configure handling of exact matches
|
||||
|
||||
;; Enable Corfu only for certain modes. See also `global-corfu-modes'.
|
||||
;; :hook ((prog-mode . corfu-mode)
|
||||
;; (shell-mode . corfu-mode)
|
||||
;; (eshell-mode . corfu-mode))
|
||||
|
||||
;; Recommended: Enable Corfu globally. This is recommended since Dabbrev can
|
||||
;; be used globally (M-/). See also the customization variable
|
||||
;; `global-corfu-modes' to exclude certain modes.
|
||||
:init
|
||||
(global-corfu-mode 1)
|
||||
(corfu-popupinfo-mode 1)
|
||||
(corfu-history-mode 1))
|
||||
|
||||
|
||||
(use-package corfu-terminal
|
||||
:after (corfu)
|
||||
:config
|
||||
(when (or (daemonp) (not (display-graphic-p)))
|
||||
(corfu-terminal-mode)))
|
||||
|
||||
;; (use-package corfu-mouse
|
||||
;; :after (corfu)
|
||||
;; :config
|
||||
;; (corfu-mouse-mode)
|
||||
;; (keymap-set corfu--mouse-ignore-map "<mouse-movement>" 'ignore)
|
||||
;; (keymap-set corfu-map "<mouse-movement>" 'ignore))
|
||||
|
||||
(use-package kind-icon
|
||||
:after (corfu)
|
||||
:config
|
||||
(add-to-list 'corfu-margin-formatters #'kind-icon-margin-formatter))
|
||||
|
||||
|
||||
|
||||
#+end_src
|
||||
* keys
|
||||
#+begin_src emacs-lisp
|
||||
(require 'cua-base)
|
||||
|
||||
;;; Keybinds
|
||||
;; Eat Term
|
||||
;(define-key cua--eat-semi-char-keymap (kbd "C-v") #'eat-yank)
|
||||
;(define-key cua--eat-char-keymap (kbd "C-S-v") #'eat-yank)
|
||||
;(define-key cua--eat-semi-char-keymap (kbd "C-c") #'copy-region-as-kill)
|
||||
;(define-key cua--eat-char-keymap (kbd "C-S-c") #'copy-region-as-kill)
|
||||
;(define-key eat-mode-map (kbd "C-<right>") #'eat-self-input)
|
||||
;(define-key eat-mode-map (kbd "C-<left>") #'eat-self-input)
|
||||
;; perspective
|
||||
(define-key global-map (kbd "C-x C-b") #'persp-list-buffers)
|
||||
(define-key global-map (kbd "C-x C-B") #'list-buffers)
|
||||
(define-key global-map (kbd "C-x b") #'persp-switch-to-buffer*)
|
||||
(define-key global-map (kbd "C-x B") #'consult-buffer)
|
||||
;; CUA-like global
|
||||
(define-key global-map (kbd "C-s") 'save-buffer)
|
||||
(define-key global-map (kbd "C-r") 'query-replace)
|
||||
(define-key global-map (kbd "C-S-r") 'replace-string)
|
||||
(define-key global-map (kbd "M-r") 'query-replace-regexp)
|
||||
(define-key global-map (kbd "M-S-r") 'replace-regexp)
|
||||
(define-key global-map (kbd "C-a") 'mark-whole-buffer)
|
||||
(define-key global-map (kbd "C-f") 'isearch-forward)
|
||||
(define-key global-map (kbd "C-S-f") 'isearch-backward)
|
||||
(define-key isearch-mode-map (kbd "C-f") 'isearch-repeat-forward)
|
||||
(define-key isearch-mode-map (kbd "C-S-f") 'isearch-repeat-backward)
|
||||
(define-key global-map (kbd "M-f") 'consult-ripgrep)
|
||||
(define-key global-map (kbd "C-M-f") 'consult-find)
|
||||
;; CUA
|
||||
(define-key cua--cua-keys-keymap (kbd "C-z") 'undo-tree-undo)
|
||||
(define-key cua--cua-keys-keymap (kbd "C-y") 'undo-tree-redo)
|
||||
(define-key cua-global-keymap (kbd "C-SPC") 'completion-at-point)
|
||||
(define-key cua-global-keymap (kbd "C-M-SPC") 'cua-set-mark)
|
||||
(cua-mode 1)
|
||||
;; TAB
|
||||
(define-key global-map (kbd "C-<iso-lefttab>") #'indent-rigidly-left)
|
||||
(define-key global-map (kbd "C-<tab>") #'indent-rigidly-right)
|
||||
;; Dashboard
|
||||
;(define-key dashboard-mode-map (kbd "C-r") #'dashboard-refresh-buffer)
|
||||
|
||||
;; Hyper
|
||||
(define-key key-translation-map (kbd "<XF86Calculator>") 'event-apply-hyper-modifier )
|
||||
(define-key key-translation-map (kbd "<Calculator>") 'event-apply-hyper-modifier )
|
||||
(define-key key-translation-map (kbd "∇") 'event-apply-hyper-modifier )
|
||||
;; Treemacs
|
||||
(define-key global-map (kbd "C-H-t") 'treemacs)
|
||||
|
||||
;; Unbind
|
||||
(define-key isearch-mode-map (kbd "C-s") nil)
|
||||
(define-key isearch-mode-map (kbd "C-r") nil)
|
||||
#+end_src
|
||||
|
||||
** CUA Overrides
|
||||
|
||||
#+begin_src emacs-lisp
|
||||
;; (defun cua--eat-semi-char-override-keymap ()
|
||||
;; (setq-local cua--keymap-alist (copy-tree cua--keymap-alist))
|
||||
;; (setf (alist-get 'cua--ena-cua-keys-keymap cua--keymap-alist) cua--eat-semi-char-keymap))
|
||||
;; (defun cua--eat-char-override-keymap ()
|
||||
;; (setq-local cua--keymap-alist (copy-tree cua--keymap-alist))
|
||||
;; (setf (alist-get 'cua--ena-cua-keys-keymap cua--keymap-alist) cua--eat-char-keymap))
|
||||
|
||||
;; (advice-add 'eat-semi-char-mode :after #'cua--eat-semi-char-override-keymap)
|
||||
;; (advice-add 'eat-char-mode :after #'cua--eat-char-override-keymap)
|
||||
;(add-hook 'eat-char-mode-hook #'cua--eat-char-override-keymap)
|
||||
#+end_src
|
|
@ -33,18 +33,7 @@ My emacs config, tangled file is [[file:etc/materus/emacs-config.el][there]]
|
|||
- [[#completions][Completions]]
|
||||
- [[#style][Style]]
|
||||
- [[#minibuffer][Minibuffer]]
|
||||
- [[#code-completion][Code completion]]
|
||||
- [[#terms][Terms]]
|
||||
- [[#eat][Eat]]
|
||||
- [[#miscellaneous][Miscellaneous]]
|
||||
- [[#defaults][Defaults]]
|
||||
- [[#elcord][Elcord]]
|
||||
- [[#undo-tree][Undo-Tree]]
|
||||
- [[#projectile][Projectile]]
|
||||
- [[#treemacs][Treemacs]]
|
||||
- [[#magit][Magit]]
|
||||
- [[#dirvish--dired][Dirvish / Dired]]
|
||||
- [[#perspective][Perspective]]
|
||||
- [[#programming][Programming]]
|
||||
- [[#lsp][LSP]]
|
||||
- [[#dap][DAP]]
|
||||
|
@ -56,7 +45,6 @@ My emacs config, tangled file is [[file:etc/materus/emacs-config.el][there]]
|
|||
- [[#other][Other]]
|
||||
- [[#keybindings][Keybindings]]
|
||||
- [[#keys][Keys]]
|
||||
- [[#cua-overrides][CUA Overrides]]
|
||||
- [[#snippets][Snippets]]
|
||||
- [[#yasnippet-init][Yasnippet init]]
|
||||
- [[#other-1][Other]]
|
||||
|
@ -348,361 +336,44 @@ Packages to install
|
|||
General configurations of packages modes etc.
|
||||
** No Littering
|
||||
Set up no littering
|
||||
#+begin_src emacs-lisp
|
||||
(require 'recentf)
|
||||
(use-package no-littering
|
||||
:config
|
||||
(setq package-quickstart-file
|
||||
(concat user-emacs-directory "var/quickstart/package-quickstart-" emacs-version ".el" ))
|
||||
(add-to-list 'recentf-exclude
|
||||
(recentf-expand-file-name no-littering-var-directory))
|
||||
(add-to-list 'recentf-exclude
|
||||
(recentf-expand-file-name no-littering-etc-directory)))
|
||||
#+end_src
|
||||
|
||||
** Graphical
|
||||
Graphical related settings.
|
||||
*** Mouse
|
||||
#+begin_src emacs-lisp
|
||||
(context-menu-mode 1)
|
||||
(setq mouse-wheel-follow-mouse 't)
|
||||
(setq scroll-step 1)
|
||||
(setq mouse-drag-and-drop-region t)
|
||||
(xterm-mouse-mode 1)
|
||||
(pixel-scroll-precision-mode 1)
|
||||
(setq-default pixel-scroll-precision-large-scroll-height 10.0)
|
||||
#+end_src
|
||||
|
||||
*** Misc
|
||||
#+begin_src emacs-lisp
|
||||
(when (daemonp)
|
||||
(add-hook 'after-make-frame-functions
|
||||
(lambda (frame) (when (= (length (frame-list)) 2)
|
||||
(set-frame-parameter frame 'fullscreen 'maximized))
|
||||
(select-frame-set-input-focus frame) )))
|
||||
|
||||
|
||||
(when (display-graphic-p)
|
||||
(set-frame-font "Hack Nerd Font" nil t)
|
||||
)
|
||||
|
||||
(setq-default display-line-numbers-width 3)
|
||||
(setq-default display-line-numbers-widen t)
|
||||
(setq truncate-string-ellipsis "…")
|
||||
|
||||
(global-tab-line-mode 1)
|
||||
|
||||
(tool-bar-mode -1)
|
||||
(setq window-divider-default-bottom-width 1)
|
||||
(setq window-divider-default-right-width 1)
|
||||
(window-divider-mode 1)
|
||||
|
||||
(setq-default cursor-type '(bar . 2))
|
||||
;; Rainbow mode
|
||||
(use-package rainbow-mode
|
||||
:hook
|
||||
((org-mode . rainbow-mode)
|
||||
(prog-mode . rainbow-mode)))
|
||||
|
||||
;; Delimiters
|
||||
(use-package rainbow-delimiters :hook
|
||||
(prog-mode . rainbow-delimiters-mode)
|
||||
:config
|
||||
(set-face-attribute 'rainbow-delimiters-depth-1-face nil :foreground "#FFFFFF")
|
||||
(set-face-attribute 'rainbow-delimiters-depth-2-face nil :foreground "#FFFF00")
|
||||
(set-face-attribute 'rainbow-delimiters-depth-5-face nil :foreground "#6A5ACD")
|
||||
(set-face-attribute 'rainbow-delimiters-unmatched-face nil :foreground "#FF0000"))
|
||||
;; Nerd Icons
|
||||
(use-package nerd-icons)
|
||||
(use-package nerd-icons-completion
|
||||
:after (marginalia)
|
||||
:config
|
||||
(nerd-icons-completion-mode 1)
|
||||
(add-hook 'marginalia-mode-hook #'nerd-icons-completion-marginalia-setup))
|
||||
|
||||
;; Theme
|
||||
(use-package dracula-theme :config
|
||||
(if (daemonp)
|
||||
(add-hook 'after-make-frame-functions
|
||||
(lambda (frame)
|
||||
(with-selected-frame frame (load-theme 'dracula t))))
|
||||
(load-theme 'dracula t)))
|
||||
|
||||
(defun startup-screen-advice (orig-fun &rest args)
|
||||
(when (= (seq-count #'buffer-file-name (buffer-list)) 0)
|
||||
(apply orig-fun args)))
|
||||
(advice-add 'display-startup-screen :around #'startup-screen-advice) ; Hide startup screen if started with file
|
||||
#+end_src
|
||||
*** Dashboard
|
||||
#+begin_src emacs-lisp
|
||||
(use-package dashboard
|
||||
:after (nerd-icons projectile)
|
||||
:config
|
||||
(setq dashboard-center-content t)
|
||||
(setq dashboard-display-icons-p t)
|
||||
(setq dashboard-icon-type 'nerd-icons)
|
||||
(setq dashboard-projects-backend 'projectile)
|
||||
(setq dashboard-items '((recents . 5)
|
||||
(bookmarks . 5)
|
||||
(projects . 5)
|
||||
(agenda . 5)
|
||||
(registers . 5)))
|
||||
(dashboard-setup-startup-hook)
|
||||
(when (daemonp)
|
||||
(setq initial-buffer-choice (lambda () (get-buffer "*dashboard*"))) ; Show dashboard when emacs is running as daemon
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
*** Modeline
|
||||
#+begin_src emacs-lisp
|
||||
(use-package doom-modeline
|
||||
:init (setq doom-modeline-support-imenu t)
|
||||
:hook (after-init . doom-modeline-mode)
|
||||
:config
|
||||
(setq doom-modeline-icon t)
|
||||
(setq doom-modeline-project-detection 'auto)
|
||||
(setq doom-modeline-height 20)
|
||||
(setq doom-modeline-enable-word-count t)
|
||||
(setq doom-modeline-minor-modes t)
|
||||
(setq display-time-24hr-format t)
|
||||
(display-time-mode 1)
|
||||
(column-number-mode 1)
|
||||
(line-number-mode 1))
|
||||
|
||||
(use-package minions
|
||||
:hook (after-init . minions-mode))
|
||||
#+end_src
|
||||
*** Diff-hl
|
||||
#+begin_src emacs-lisp
|
||||
(use-package diff-hl
|
||||
:config
|
||||
(setq diff-hl-side 'right)
|
||||
(global-diff-hl-mode 1)
|
||||
(diff-hl-margin-mode 1)
|
||||
(diff-hl-flydiff-mode 1)
|
||||
(global-diff-hl-show-hunk-mouse-mode 1))
|
||||
|
||||
#+end_src
|
||||
** Org-mode
|
||||
Org mode settings
|
||||
|
||||
#+begin_SRC emacs-lisp
|
||||
(use-package org
|
||||
:mode (("\\.org$" . org-mode))
|
||||
:hook
|
||||
((org-mode . org-indent-mode)
|
||||
(org-mode . display-line-numbers-mode)
|
||||
)
|
||||
:config
|
||||
(require 'org-mouse)
|
||||
(require 'org-tempo)
|
||||
(setq org-src-window-setup 'current-window)
|
||||
(add-hook 'org-mode-hook (lambda ()
|
||||
(setq-local
|
||||
electric-pair-inhibit-predicate
|
||||
`(lambda (c)
|
||||
(if
|
||||
(char-equal c ?<) t (,electric-pair-inhibit-predicate c)))))))
|
||||
|
||||
(use-package org-modern
|
||||
:after (org)
|
||||
:hook
|
||||
(org-indent-mode . org-modern-mode)
|
||||
(org-agenda-finalize . org-modern-agenda)
|
||||
:config
|
||||
(setq org-modern-block-name '("▼ " . "▲ ")))
|
||||
(use-package org-auto-tangle
|
||||
:after (org)
|
||||
:hook (org-mode . org-auto-tangle-mode)
|
||||
)
|
||||
(use-package toc-org
|
||||
:after (org)
|
||||
:hook
|
||||
((org-mode . toc-org-mode )
|
||||
(markdown-mode . toc-org-mode)))
|
||||
(setq org-latex-pdf-process '("latexmk -xelatex -quiet -shell-escape -f -output-directory=%o %f"))
|
||||
(org-babel-do-load-languages
|
||||
'org-babel-load-languages
|
||||
'((latex . t)
|
||||
(emacs-lisp . t)
|
||||
(shell . t)
|
||||
(css . t)
|
||||
(C . t)
|
||||
(calc . t)
|
||||
(awk . t)
|
||||
(sql . t)
|
||||
(sqlite . t)))
|
||||
|
||||
#+end_SRC
|
||||
** Completions
|
||||
*** Style
|
||||
#+begin_src emacs-lisp
|
||||
(use-package orderless
|
||||
:init
|
||||
;; Tune the global completion style settings to your liking!
|
||||
;; This affects the minibuffer and non-lsp completion at point.
|
||||
(setq completion-styles '(basic partial-completion orderless)
|
||||
completion-category-defaults nil
|
||||
completion-category-overrides nil))
|
||||
#+end_src
|
||||
|
||||
*** Minibuffer
|
||||
#+begin_src emacs-lisp
|
||||
(use-package consult)
|
||||
(use-package marginalia)
|
||||
|
||||
(use-package which-key
|
||||
:config
|
||||
(which-key-mode 1))
|
||||
|
||||
(use-package vertico
|
||||
:after (consult marginalia)
|
||||
:config
|
||||
(setq completion-in-region-function
|
||||
(lambda (&rest args)
|
||||
(apply (if vertico-mode
|
||||
#'consult-completion-in-region
|
||||
#'completion--in-region)
|
||||
args)))
|
||||
(vertico-mode 1)
|
||||
(marginalia-mode 1))
|
||||
(use-package vertico-mouse
|
||||
:config
|
||||
(vertico-mouse-mode 1))
|
||||
#+end_src
|
||||
*** Code completion
|
||||
#+begin_src emacs-lisp
|
||||
|
||||
(use-package cape)
|
||||
|
||||
(use-package corfu
|
||||
;; Optional customizations
|
||||
:custom
|
||||
(corfu-cycle nil) ;; Enable cycling for `corfu-next/previous'
|
||||
(corfu-auto t) ;; Enable auto completion
|
||||
(global-corfu-minibuffer nil)
|
||||
;; (corfu-quit-at-boundary nil) ;; Never quit at completion boundary
|
||||
;; (corfu-quit-no-match nil) ;; Never quit, even if there is no match
|
||||
(corfu-preview-current nil) ;; Disable current candidate preview
|
||||
;; (corfu-preselect 'prompt) ;; Preselect the prompt
|
||||
;; (corfu-on-exact-match nil) ;; Configure handling of exact matches
|
||||
|
||||
;; Enable Corfu only for certain modes. See also `global-corfu-modes'.
|
||||
;; :hook ((prog-mode . corfu-mode)
|
||||
;; (shell-mode . corfu-mode)
|
||||
;; (eshell-mode . corfu-mode))
|
||||
|
||||
;; Recommended: Enable Corfu globally. This is recommended since Dabbrev can
|
||||
;; be used globally (M-/). See also the customization variable
|
||||
;; `global-corfu-modes' to exclude certain modes.
|
||||
:init
|
||||
(global-corfu-mode 1)
|
||||
(corfu-popupinfo-mode 1)
|
||||
(corfu-history-mode 1))
|
||||
|
||||
|
||||
(use-package corfu-terminal
|
||||
:after (corfu)
|
||||
:config
|
||||
(when (or (daemonp) (not (display-graphic-p)))
|
||||
(corfu-terminal-mode)))
|
||||
|
||||
(use-package corfu-mouse
|
||||
:after (corfu)
|
||||
:config
|
||||
(corfu-mouse-mode)
|
||||
(keymap-set corfu--mouse-ignore-map "<mouse-movement>" 'ignore)
|
||||
(keymap-set corfu-map "<mouse-movement>" 'ignore))
|
||||
|
||||
(use-package kind-icon
|
||||
:config
|
||||
(add-to-list 'corfu-margin-formatters #'kind-icon-margin-formatter))
|
||||
|
||||
(global-completion-preview-mode 1)
|
||||
|
||||
#+end_src
|
||||
** Terms
|
||||
*** Eat
|
||||
#+begin_src emacs-lisp
|
||||
(use-package eat)
|
||||
(defvar cua--eat-semi-char-keymap (copy-keymap cua--cua-keys-keymap) "EAT semi-char mode CUA keymap")
|
||||
(defvar cua--eat-char-keymap (copy-keymap cua--cua-keys-keymap) "EAT char mode CUA keymap")
|
||||
|
||||
#+end_src
|
||||
** Miscellaneous
|
||||
Other configs
|
||||
*** Defaults
|
||||
#+begin_src emacs-lisp
|
||||
(setq-default buffer-file-coding-system 'utf-8-unix)
|
||||
(setq text-mode-ispell-word-completion nil) ; Disable ispell
|
||||
#+end_src
|
||||
*** Elcord
|
||||
#+begin_src emacs-lisp
|
||||
(defun materus/elcord-toggle (&optional _frame)
|
||||
"Toggle elcord based on visible frames"
|
||||
(if (> (length (frame-list)) 1)
|
||||
(elcord-mode 1)
|
||||
(elcord-mode -1))
|
||||
)
|
||||
(use-package elcord
|
||||
:config
|
||||
(unless (daemonp) (elcord-mode 1))
|
||||
(add-hook 'after-delete-frame-functions 'materus/elcord-toggle)
|
||||
(add-hook 'server-after-make-frame-hook 'materus/elcord-toggle))
|
||||
#+end_src
|
||||
*** Undo-Tree
|
||||
#+begin_src emacs-lisp
|
||||
(use-package undo-tree
|
||||
:config
|
||||
(global-undo-tree-mode 1)
|
||||
(defvar materus/undo-tree-dir (concat user-emacs-directory "var/undo-tree/"))
|
||||
(unless (file-exists-p materus/undo-tree-dir)
|
||||
(make-directory materus/undo-tree-dir t))
|
||||
(setq undo-tree-visualizer-diff t)
|
||||
(setq undo-tree-history-directory-alist `(("." . ,materus/undo-tree-dir )))
|
||||
(setq undo-tree-visualizer-timestamps t)
|
||||
)
|
||||
#+end_src
|
||||
*** Projectile
|
||||
#+begin_src emacs-lisp
|
||||
(use-package projectile
|
||||
:config (projectile-mode 1))
|
||||
#+end_src
|
||||
*** Treemacs
|
||||
#+begin_src emacs-lisp
|
||||
(use-package treemacs)
|
||||
(use-package treemacs-projectile
|
||||
:after (projectile treemacs))
|
||||
(use-package treemacs-nerd-icons
|
||||
:after (nerd-icons treemacs))
|
||||
(use-package treemacs-perspective
|
||||
:after (treemacs))
|
||||
(use-package treemacs-mouse-interface
|
||||
:after (treemacs))
|
||||
#+end_src
|
||||
*** Magit
|
||||
#+begin_src emacs-lisp
|
||||
(use-package magit)
|
||||
#+end_src
|
||||
*** Dirvish / Dired
|
||||
#+begin_src emacs-lisp
|
||||
(setq dired-mouse-drag-files t)
|
||||
(use-package dirvish
|
||||
:config
|
||||
(dirvish-override-dired-mode 1)
|
||||
(setq dirvish-attributes
|
||||
'(vc-state
|
||||
subtree-state
|
||||
nerd-icons
|
||||
collapse
|
||||
git-msg
|
||||
file-time
|
||||
file-size)))
|
||||
#+end_src
|
||||
*** Perspective
|
||||
#+begin_src emacs-lisp
|
||||
(require 'perspective)
|
||||
(setq persp-mode-prefix-key (kbd "C-c M-p"))
|
||||
(setq persp-modestring-short t)
|
||||
(persp-mode 1)
|
||||
#+end_src
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
* Programming
|
||||
** LSP
|
||||
|
@ -876,81 +547,12 @@ Other configs
|
|||
* Keybindings
|
||||
** Keys
|
||||
|
||||
#+begin_src emacs-lisp
|
||||
(use-package cua-base)
|
||||
|
||||
;;; Keybinds
|
||||
;; Eat Term
|
||||
(define-key cua--eat-semi-char-keymap (kbd "C-v") #'eat-yank)
|
||||
(define-key cua--eat-char-keymap (kbd "C-S-v") #'eat-yank)
|
||||
(define-key cua--eat-semi-char-keymap (kbd "C-c") #'copy-region-as-kill)
|
||||
(define-key cua--eat-char-keymap (kbd "C-S-c") #'copy-region-as-kill)
|
||||
(define-key eat-mode-map (kbd "C-<right>") #'eat-self-input)
|
||||
(define-key eat-mode-map (kbd "C-<left>") #'eat-self-input)
|
||||
;; perspective
|
||||
(define-key global-map (kbd "C-x C-b") #'persp-list-buffers)
|
||||
(define-key global-map (kbd "C-x C-B") #'list-buffers)
|
||||
(define-key global-map (kbd "C-x b") #'persp-switch-to-buffer*)
|
||||
(define-key global-map (kbd "C-x B") #'consult-buffer)
|
||||
;; CUA-like global
|
||||
(define-key global-map (kbd "C-s") 'save-buffer)
|
||||
(define-key global-map (kbd "C-r") 'query-replace)
|
||||
(define-key global-map (kbd "C-S-r") 'replace-string)
|
||||
(define-key global-map (kbd "M-r") 'query-replace-regexp)
|
||||
(define-key global-map (kbd "M-S-r") 'replace-regexp)
|
||||
(define-key global-map (kbd "C-a") 'mark-whole-buffer)
|
||||
(define-key global-map (kbd "C-f") 'isearch-forward)
|
||||
(define-key global-map (kbd "C-S-f") 'isearch-backward)
|
||||
(define-key isearch-mode-map (kbd "C-f") 'isearch-repeat-forward)
|
||||
(define-key isearch-mode-map (kbd "C-S-f") 'isearch-repeat-backward)
|
||||
(define-key global-map (kbd "M-f") 'consult-ripgrep)
|
||||
(define-key global-map (kbd "C-M-f") 'consult-find)
|
||||
;; CUA
|
||||
(define-key cua--cua-keys-keymap (kbd "C-z") 'undo-tree-undo)
|
||||
(define-key cua--cua-keys-keymap (kbd "C-y") 'undo-tree-redo)
|
||||
(define-key cua-global-keymap (kbd "C-SPC") 'completion-at-point)
|
||||
(define-key cua-global-keymap (kbd "C-M-SPC") 'cua-set-mark)
|
||||
(cua-mode 1)
|
||||
;; TAB
|
||||
(define-key global-map (kbd "C-<iso-lefttab>") #'indent-rigidly-left)
|
||||
(define-key global-map (kbd "C-<tab>") #'indent-rigidly-right)
|
||||
;; Dashboard
|
||||
(define-key dashboard-mode-map (kbd "C-r") #'dashboard-refresh-buffer)
|
||||
|
||||
;; Hyper
|
||||
(define-key key-translation-map (kbd "<XF86Calculator>") 'event-apply-hyper-modifier )
|
||||
(define-key key-translation-map (kbd "<Calculator>") 'event-apply-hyper-modifier )
|
||||
(define-key key-translation-map (kbd "∇") 'event-apply-hyper-modifier )
|
||||
;; Treemacs
|
||||
(define-key global-map (kbd "C-H-t") 'treemacs)
|
||||
|
||||
;; Unbind
|
||||
(define-key isearch-mode-map (kbd "C-s") nil)
|
||||
(define-key isearch-mode-map (kbd "C-r") nil)
|
||||
#+end_src
|
||||
|
||||
** CUA Overrides
|
||||
|
||||
#+begin_src emacs-lisp
|
||||
(defun cua--eat-semi-char-override-keymap ()
|
||||
(setq-local cua--keymap-alist (copy-tree cua--keymap-alist))
|
||||
(setf (alist-get 'cua--ena-cua-keys-keymap cua--keymap-alist) cua--eat-semi-char-keymap))
|
||||
(defun cua--eat-char-override-keymap ()
|
||||
(setq-local cua--keymap-alist (copy-tree cua--keymap-alist))
|
||||
(setf (alist-get 'cua--ena-cua-keys-keymap cua--keymap-alist) cua--eat-char-keymap))
|
||||
|
||||
(advice-add 'eat-semi-char-mode :after #'cua--eat-semi-char-override-keymap)
|
||||
(advice-add 'eat-char-mode :after #'cua--eat-char-override-keymap)
|
||||
;(add-hook 'eat-char-mode-hook #'cua--eat-char-override-keymap)
|
||||
#+end_src
|
||||
|
||||
* Snippets
|
||||
** Yasnippet init
|
||||
|
||||
#+begin_src emacs-lisp
|
||||
(use-package yasnippet
|
||||
:config (yas-global-mode 1))
|
||||
#+end_src
|
||||
|
||||
|
||||
* Other
|
||||
** Update config script
|
||||
|
|
|
@ -139,349 +139,14 @@
|
|||
(materus/install-packages))
|
||||
;; Packages list & function:1 ends here
|
||||
|
||||
;; [[file:../../emacs-materus-config.org::*No Littering][No Littering:1]]
|
||||
(require 'recentf)
|
||||
(use-package no-littering
|
||||
:config
|
||||
(setq package-quickstart-file
|
||||
(concat user-emacs-directory "var/quickstart/package-quickstart-" emacs-version ".el" ))
|
||||
(add-to-list 'recentf-exclude
|
||||
(recentf-expand-file-name no-littering-var-directory))
|
||||
(add-to-list 'recentf-exclude
|
||||
(recentf-expand-file-name no-littering-etc-directory)))
|
||||
;; No Littering:1 ends here
|
||||
|
||||
;; [[file:../../emacs-materus-config.org::*Mouse][Mouse:1]]
|
||||
(context-menu-mode 1)
|
||||
(setq mouse-wheel-follow-mouse 't)
|
||||
(setq scroll-step 1)
|
||||
(setq mouse-drag-and-drop-region t)
|
||||
(xterm-mouse-mode 1)
|
||||
(pixel-scroll-precision-mode 1)
|
||||
(setq-default pixel-scroll-precision-large-scroll-height 10.0)
|
||||
;; Mouse:1 ends here
|
||||
|
||||
;; [[file:../../emacs-materus-config.org::*Misc][Misc:1]]
|
||||
(when (daemonp)
|
||||
(add-hook 'after-make-frame-functions
|
||||
(lambda (frame) (when (= (length (frame-list)) 2)
|
||||
(set-frame-parameter frame 'fullscreen 'maximized))
|
||||
(select-frame-set-input-focus frame) )))
|
||||
|
||||
|
||||
(when (display-graphic-p)
|
||||
(set-frame-font "Hack Nerd Font" nil t)
|
||||
)
|
||||
|
||||
(setq-default display-line-numbers-width 3)
|
||||
(setq-default display-line-numbers-widen t)
|
||||
(setq truncate-string-ellipsis "…")
|
||||
|
||||
(global-tab-line-mode 1)
|
||||
|
||||
(tool-bar-mode -1)
|
||||
(setq window-divider-default-bottom-width 1)
|
||||
(setq window-divider-default-right-width 1)
|
||||
(window-divider-mode 1)
|
||||
|
||||
(setq-default cursor-type '(bar . 2))
|
||||
;; Rainbow mode
|
||||
(use-package rainbow-mode
|
||||
:hook
|
||||
((org-mode . rainbow-mode)
|
||||
(prog-mode . rainbow-mode)))
|
||||
|
||||
;; Delimiters
|
||||
(use-package rainbow-delimiters :hook
|
||||
(prog-mode . rainbow-delimiters-mode)
|
||||
:config
|
||||
(set-face-attribute 'rainbow-delimiters-depth-1-face nil :foreground "#FFFFFF")
|
||||
(set-face-attribute 'rainbow-delimiters-depth-2-face nil :foreground "#FFFF00")
|
||||
(set-face-attribute 'rainbow-delimiters-depth-5-face nil :foreground "#6A5ACD")
|
||||
(set-face-attribute 'rainbow-delimiters-unmatched-face nil :foreground "#FF0000"))
|
||||
;; Nerd Icons
|
||||
(use-package nerd-icons)
|
||||
(use-package nerd-icons-completion
|
||||
:after (marginalia)
|
||||
:config
|
||||
(nerd-icons-completion-mode 1)
|
||||
(add-hook 'marginalia-mode-hook #'nerd-icons-completion-marginalia-setup))
|
||||
|
||||
;; Theme
|
||||
(use-package dracula-theme :config
|
||||
(if (daemonp)
|
||||
(add-hook 'after-make-frame-functions
|
||||
(lambda (frame)
|
||||
(with-selected-frame frame (load-theme 'dracula t))))
|
||||
(load-theme 'dracula t)))
|
||||
|
||||
(defun startup-screen-advice (orig-fun &rest args)
|
||||
(when (= (seq-count #'buffer-file-name (buffer-list)) 0)
|
||||
(apply orig-fun args)))
|
||||
(advice-add 'display-startup-screen :around #'startup-screen-advice) ; Hide startup screen if started with file
|
||||
;; Misc:1 ends here
|
||||
|
||||
;; [[file:../../emacs-materus-config.org::*Dashboard][Dashboard:1]]
|
||||
(use-package dashboard
|
||||
:after (nerd-icons projectile)
|
||||
:config
|
||||
(setq dashboard-center-content t)
|
||||
(setq dashboard-display-icons-p t)
|
||||
(setq dashboard-icon-type 'nerd-icons)
|
||||
(setq dashboard-projects-backend 'projectile)
|
||||
(setq dashboard-items '((recents . 5)
|
||||
(bookmarks . 5)
|
||||
(projects . 5)
|
||||
(agenda . 5)
|
||||
(registers . 5)))
|
||||
(dashboard-setup-startup-hook)
|
||||
(when (daemonp)
|
||||
(setq initial-buffer-choice (lambda () (get-buffer "*dashboard*"))) ; Show dashboard when emacs is running as daemon
|
||||
)
|
||||
)
|
||||
;; Dashboard:1 ends here
|
||||
|
||||
;; [[file:../../emacs-materus-config.org::*Modeline][Modeline:1]]
|
||||
(use-package doom-modeline
|
||||
:init (setq doom-modeline-support-imenu t)
|
||||
:hook (after-init . doom-modeline-mode)
|
||||
:config
|
||||
(setq doom-modeline-icon t)
|
||||
(setq doom-modeline-project-detection 'auto)
|
||||
(setq doom-modeline-height 20)
|
||||
(setq doom-modeline-enable-word-count t)
|
||||
(setq doom-modeline-minor-modes t)
|
||||
(setq display-time-24hr-format t)
|
||||
(display-time-mode 1)
|
||||
(column-number-mode 1)
|
||||
(line-number-mode 1))
|
||||
|
||||
(use-package minions
|
||||
:hook (after-init . minions-mode))
|
||||
;; Modeline:1 ends here
|
||||
|
||||
;; [[file:../../emacs-materus-config.org::*Diff-hl][Diff-hl:1]]
|
||||
(use-package diff-hl
|
||||
:config
|
||||
(setq diff-hl-side 'right)
|
||||
(global-diff-hl-mode 1)
|
||||
(diff-hl-margin-mode 1)
|
||||
(diff-hl-flydiff-mode 1)
|
||||
(global-diff-hl-show-hunk-mouse-mode 1))
|
||||
;; Diff-hl:1 ends here
|
||||
|
||||
;; [[file:../../emacs-materus-config.org::*Org-mode][Org-mode:1]]
|
||||
(use-package org
|
||||
:mode (("\\.org$" . org-mode))
|
||||
:hook
|
||||
((org-mode . org-indent-mode)
|
||||
(org-mode . display-line-numbers-mode)
|
||||
)
|
||||
:config
|
||||
(require 'org-mouse)
|
||||
(require 'org-tempo)
|
||||
(setq org-src-window-setup 'current-window)
|
||||
(add-hook 'org-mode-hook (lambda ()
|
||||
(setq-local
|
||||
electric-pair-inhibit-predicate
|
||||
`(lambda (c)
|
||||
(if
|
||||
(char-equal c ?<) t (,electric-pair-inhibit-predicate c)))))))
|
||||
|
||||
(use-package org-modern
|
||||
:after (org)
|
||||
:hook
|
||||
(org-indent-mode . org-modern-mode)
|
||||
(org-agenda-finalize . org-modern-agenda)
|
||||
:config
|
||||
(setq org-modern-block-name '("▼ " . "▲ ")))
|
||||
(use-package org-auto-tangle
|
||||
:after (org)
|
||||
:hook (org-mode . org-auto-tangle-mode)
|
||||
)
|
||||
(use-package toc-org
|
||||
:after (org)
|
||||
:hook
|
||||
((org-mode . toc-org-mode )
|
||||
(markdown-mode . toc-org-mode)))
|
||||
(setq org-latex-pdf-process '("latexmk -xelatex -quiet -shell-escape -f -output-directory=%o %f"))
|
||||
(org-babel-do-load-languages
|
||||
'org-babel-load-languages
|
||||
'((latex . t)
|
||||
(emacs-lisp . t)
|
||||
(shell . t)
|
||||
(css . t)
|
||||
(C . t)
|
||||
(calc . t)
|
||||
(awk . t)
|
||||
(sql . t)
|
||||
(sqlite . t)))
|
||||
;; Org-mode:1 ends here
|
||||
|
||||
;; [[file:../../emacs-materus-config.org::*Style][Style:1]]
|
||||
(use-package orderless
|
||||
:init
|
||||
;; Tune the global completion style settings to your liking!
|
||||
;; This affects the minibuffer and non-lsp completion at point.
|
||||
(setq completion-styles '(basic partial-completion orderless)
|
||||
completion-category-defaults nil
|
||||
completion-category-overrides nil))
|
||||
;; Style:1 ends here
|
||||
|
||||
;; [[file:../../emacs-materus-config.org::*Minibuffer][Minibuffer:1]]
|
||||
(use-package consult)
|
||||
(use-package marginalia)
|
||||
|
||||
(use-package which-key
|
||||
:config
|
||||
(which-key-mode 1))
|
||||
|
||||
(use-package vertico
|
||||
:after (consult marginalia)
|
||||
:config
|
||||
(setq completion-in-region-function
|
||||
(lambda (&rest args)
|
||||
(apply (if vertico-mode
|
||||
#'consult-completion-in-region
|
||||
#'completion--in-region)
|
||||
args)))
|
||||
(vertico-mode 1)
|
||||
(marginalia-mode 1))
|
||||
(use-package vertico-mouse
|
||||
:config
|
||||
(vertico-mouse-mode 1))
|
||||
;; Minibuffer:1 ends here
|
||||
|
||||
;; [[file:../../emacs-materus-config.org::*Code completion][Code completion:1]]
|
||||
(use-package cape)
|
||||
|
||||
(use-package corfu
|
||||
;; Optional customizations
|
||||
:custom
|
||||
(corfu-cycle nil) ;; Enable cycling for `corfu-next/previous'
|
||||
(corfu-auto t) ;; Enable auto completion
|
||||
(global-corfu-minibuffer nil)
|
||||
;; (corfu-quit-at-boundary nil) ;; Never quit at completion boundary
|
||||
;; (corfu-quit-no-match nil) ;; Never quit, even if there is no match
|
||||
(corfu-preview-current nil) ;; Disable current candidate preview
|
||||
;; (corfu-preselect 'prompt) ;; Preselect the prompt
|
||||
;; (corfu-on-exact-match nil) ;; Configure handling of exact matches
|
||||
|
||||
;; Enable Corfu only for certain modes. See also `global-corfu-modes'.
|
||||
;; :hook ((prog-mode . corfu-mode)
|
||||
;; (shell-mode . corfu-mode)
|
||||
;; (eshell-mode . corfu-mode))
|
||||
|
||||
;; Recommended: Enable Corfu globally. This is recommended since Dabbrev can
|
||||
;; be used globally (M-/). See also the customization variable
|
||||
;; `global-corfu-modes' to exclude certain modes.
|
||||
:init
|
||||
(global-corfu-mode 1)
|
||||
(corfu-popupinfo-mode 1)
|
||||
(corfu-history-mode 1))
|
||||
|
||||
|
||||
(use-package corfu-terminal
|
||||
:after (corfu)
|
||||
:config
|
||||
(when (or (daemonp) (not (display-graphic-p)))
|
||||
(corfu-terminal-mode)))
|
||||
|
||||
(use-package corfu-mouse
|
||||
:after (corfu)
|
||||
:config
|
||||
(corfu-mouse-mode)
|
||||
(keymap-set corfu--mouse-ignore-map "<mouse-movement>" 'ignore)
|
||||
(keymap-set corfu-map "<mouse-movement>" 'ignore))
|
||||
|
||||
(use-package kind-icon
|
||||
:config
|
||||
(add-to-list 'corfu-margin-formatters #'kind-icon-margin-formatter))
|
||||
|
||||
(global-completion-preview-mode 1)
|
||||
;; Code completion:1 ends here
|
||||
|
||||
;; [[file:../../emacs-materus-config.org::*Eat][Eat:1]]
|
||||
(use-package eat)
|
||||
(defvar cua--eat-semi-char-keymap (copy-keymap cua--cua-keys-keymap) "EAT semi-char mode CUA keymap")
|
||||
(defvar cua--eat-char-keymap (copy-keymap cua--cua-keys-keymap) "EAT char mode CUA keymap")
|
||||
;; Eat:1 ends here
|
||||
|
||||
;; [[file:../../emacs-materus-config.org::*Defaults][Defaults:1]]
|
||||
(setq-default buffer-file-coding-system 'utf-8-unix)
|
||||
(setq text-mode-ispell-word-completion nil) ; Disable ispell
|
||||
;; Defaults:1 ends here
|
||||
|
||||
;; [[file:../../emacs-materus-config.org::*Elcord][Elcord:1]]
|
||||
(defun materus/elcord-toggle (&optional _frame)
|
||||
"Toggle elcord based on visible frames"
|
||||
(if (> (length (frame-list)) 1)
|
||||
(elcord-mode 1)
|
||||
(elcord-mode -1))
|
||||
)
|
||||
(use-package elcord
|
||||
:config
|
||||
(unless (daemonp) (elcord-mode 1))
|
||||
(add-hook 'after-delete-frame-functions 'materus/elcord-toggle)
|
||||
(add-hook 'server-after-make-frame-hook 'materus/elcord-toggle))
|
||||
;; Elcord:1 ends here
|
||||
|
||||
;; [[file:../../emacs-materus-config.org::*Undo-Tree][Undo-Tree:1]]
|
||||
(use-package undo-tree
|
||||
:config
|
||||
(global-undo-tree-mode 1)
|
||||
(defvar materus/undo-tree-dir (concat user-emacs-directory "var/undo-tree/"))
|
||||
(unless (file-exists-p materus/undo-tree-dir)
|
||||
(make-directory materus/undo-tree-dir t))
|
||||
(setq undo-tree-visualizer-diff t)
|
||||
(setq undo-tree-history-directory-alist `(("." . ,materus/undo-tree-dir )))
|
||||
(setq undo-tree-visualizer-timestamps t)
|
||||
)
|
||||
;; Undo-Tree:1 ends here
|
||||
|
||||
;; [[file:../../emacs-materus-config.org::*Projectile][Projectile:1]]
|
||||
(use-package projectile
|
||||
:config (projectile-mode 1))
|
||||
;; Projectile:1 ends here
|
||||
|
||||
;; [[file:../../emacs-materus-config.org::*Treemacs][Treemacs:1]]
|
||||
(use-package treemacs)
|
||||
(use-package treemacs-projectile
|
||||
:after (projectile treemacs))
|
||||
(use-package treemacs-nerd-icons
|
||||
:after (nerd-icons treemacs))
|
||||
(use-package treemacs-perspective
|
||||
:after (treemacs))
|
||||
(use-package treemacs-mouse-interface
|
||||
:after (treemacs))
|
||||
;; Treemacs:1 ends here
|
||||
|
||||
;; [[file:../../emacs-materus-config.org::*Magit][Magit:1]]
|
||||
(use-package magit)
|
||||
;; Magit:1 ends here
|
||||
|
||||
;; [[file:../../emacs-materus-config.org::*Dirvish / Dired][Dirvish / Dired:1]]
|
||||
(setq dired-mouse-drag-files t)
|
||||
(use-package dirvish
|
||||
:config
|
||||
(dirvish-override-dired-mode 1)
|
||||
(setq dirvish-attributes
|
||||
'(vc-state
|
||||
subtree-state
|
||||
nerd-icons
|
||||
collapse
|
||||
git-msg
|
||||
file-time
|
||||
file-size)))
|
||||
;; Dirvish / Dired:1 ends here
|
||||
|
||||
;; [[file:../../emacs-materus-config.org::*Perspective][Perspective:1]]
|
||||
(require 'perspective)
|
||||
(setq persp-mode-prefix-key (kbd "C-c M-p"))
|
||||
(setq persp-modestring-short t)
|
||||
(persp-mode 1)
|
||||
;; Perspective:1 ends here
|
||||
|
||||
;; [[file:../../emacs-materus-config.org::*LSP][LSP:1]]
|
||||
(use-package lsp-mode
|
||||
:custom
|
||||
|
@ -648,77 +313,6 @@
|
|||
(add-hook 'prog-mode-hook 'electric-indent-local-mode)
|
||||
;; Other:1 ends here
|
||||
|
||||
;; [[file:../../emacs-materus-config.org::*Keys][Keys:1]]
|
||||
(use-package cua-base)
|
||||
|
||||
;;; Keybinds
|
||||
;; Eat Term
|
||||
(define-key cua--eat-semi-char-keymap (kbd "C-v") #'eat-yank)
|
||||
(define-key cua--eat-char-keymap (kbd "C-S-v") #'eat-yank)
|
||||
(define-key cua--eat-semi-char-keymap (kbd "C-c") #'copy-region-as-kill)
|
||||
(define-key cua--eat-char-keymap (kbd "C-S-c") #'copy-region-as-kill)
|
||||
(define-key eat-mode-map (kbd "C-<right>") #'eat-self-input)
|
||||
(define-key eat-mode-map (kbd "C-<left>") #'eat-self-input)
|
||||
;; perspective
|
||||
(define-key global-map (kbd "C-x C-b") #'persp-list-buffers)
|
||||
(define-key global-map (kbd "C-x C-B") #'list-buffers)
|
||||
(define-key global-map (kbd "C-x b") #'persp-switch-to-buffer*)
|
||||
(define-key global-map (kbd "C-x B") #'consult-buffer)
|
||||
;; CUA-like global
|
||||
(define-key global-map (kbd "C-s") 'save-buffer)
|
||||
(define-key global-map (kbd "C-r") 'query-replace)
|
||||
(define-key global-map (kbd "C-S-r") 'replace-string)
|
||||
(define-key global-map (kbd "M-r") 'query-replace-regexp)
|
||||
(define-key global-map (kbd "M-S-r") 'replace-regexp)
|
||||
(define-key global-map (kbd "C-a") 'mark-whole-buffer)
|
||||
(define-key global-map (kbd "C-f") 'isearch-forward)
|
||||
(define-key global-map (kbd "C-S-f") 'isearch-backward)
|
||||
(define-key isearch-mode-map (kbd "C-f") 'isearch-repeat-forward)
|
||||
(define-key isearch-mode-map (kbd "C-S-f") 'isearch-repeat-backward)
|
||||
(define-key global-map (kbd "M-f") 'consult-ripgrep)
|
||||
(define-key global-map (kbd "C-M-f") 'consult-find)
|
||||
;; CUA
|
||||
(define-key cua--cua-keys-keymap (kbd "C-z") 'undo-tree-undo)
|
||||
(define-key cua--cua-keys-keymap (kbd "C-y") 'undo-tree-redo)
|
||||
(define-key cua-global-keymap (kbd "C-SPC") 'completion-at-point)
|
||||
(define-key cua-global-keymap (kbd "C-M-SPC") 'cua-set-mark)
|
||||
(cua-mode 1)
|
||||
;; TAB
|
||||
(define-key global-map (kbd "C-<iso-lefttab>") #'indent-rigidly-left)
|
||||
(define-key global-map (kbd "C-<tab>") #'indent-rigidly-right)
|
||||
;; Dashboard
|
||||
(define-key dashboard-mode-map (kbd "C-r") #'dashboard-refresh-buffer)
|
||||
|
||||
;; Hyper
|
||||
(define-key key-translation-map (kbd "<XF86Calculator>") 'event-apply-hyper-modifier )
|
||||
(define-key key-translation-map (kbd "<Calculator>") 'event-apply-hyper-modifier )
|
||||
(define-key key-translation-map (kbd "∇") 'event-apply-hyper-modifier )
|
||||
;; Treemacs
|
||||
(define-key global-map (kbd "C-H-t") 'treemacs)
|
||||
|
||||
;; Unbind
|
||||
(define-key isearch-mode-map (kbd "C-s") nil)
|
||||
(define-key isearch-mode-map (kbd "C-r") nil)
|
||||
;; Keys:1 ends here
|
||||
|
||||
;; [[file:../../emacs-materus-config.org::*CUA Overrides][CUA Overrides:1]]
|
||||
(defun cua--eat-semi-char-override-keymap ()
|
||||
(setq-local cua--keymap-alist (copy-tree cua--keymap-alist))
|
||||
(setf (alist-get 'cua--ena-cua-keys-keymap cua--keymap-alist) cua--eat-semi-char-keymap))
|
||||
(defun cua--eat-char-override-keymap ()
|
||||
(setq-local cua--keymap-alist (copy-tree cua--keymap-alist))
|
||||
(setf (alist-get 'cua--ena-cua-keys-keymap cua--keymap-alist) cua--eat-char-keymap))
|
||||
|
||||
(advice-add 'eat-semi-char-mode :after #'cua--eat-semi-char-override-keymap)
|
||||
(advice-add 'eat-char-mode :after #'cua--eat-char-override-keymap)
|
||||
;(add-hook 'eat-char-mode-hook #'cua--eat-char-override-keymap)
|
||||
;; CUA Overrides:1 ends here
|
||||
|
||||
;; [[file:../../emacs-materus-config.org::*Yasnippet init][Yasnippet init:1]]
|
||||
(use-package yasnippet
|
||||
:config (yas-global-mode 1))
|
||||
;; Yasnippet init:1 ends here
|
||||
|
||||
;; [[file:../../emacs-materus-config.org::*Update config script][Update config script:1]]
|
||||
(defun materus/sync-config ()
|
||||
"Function to sync config from MATERUS_CONFIG_DIR to emacs folder"
|
||||
|
|
Loading…
Reference in New Issue