151 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			EmacsLisp
		
	
	
	
	
	
			
		
		
	
	
			151 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			EmacsLisp
		
	
	
	
	
	
| ;; ENVIRONMENT
 | |
| ;; COMPAT
 | |
| (straight-use-package 'compat)
 | |
| 
 | |
| ;; ORG-MODE: FIX so the correct org package is loaded (not the one shipped with emacs)
 | |
| ;; Has to be as early in the config as possible, so no other package can load the
 | |
| ;; incorrect org version beforehand
 | |
| (straight-use-package 'org)
 | |
| 
 | |
| ;; ASYNC: Asynchronous functionality
 | |
| (straight-use-package 'async)
 | |
| (require 'async)
 | |
| 
 | |
| ;; GENERAL: Keybindings
 | |
| (straight-use-package 'general)
 | |
| (require 'general)
 | |
| 
 | |
| ;; TODO: Rename the leader key (if you want)
 | |
| (general-create-definer my-leader
 | |
|   :prefix "<SPC>"
 | |
|   :non-normal-prefix "C-SPC")
 | |
| 
 | |
| ;; EVIL:
 | |
| ;; depends on: goto-chg, undo-tree
 | |
| (straight-use-package 'evil)
 | |
| (straight-use-package 'undo-fu)
 | |
| (straight-use-package 'undo-fu-session)
 | |
| (undo-fu-session-global-mode)
 | |
| (straight-use-package 'vundo)
 | |
| 
 | |
| ;; variables
 | |
| (setq evil-want-C-u-scroll t
 | |
|       evil-want-integration t
 | |
|       evil-want-keybinding nil
 | |
|       evil-undo-system 'undo-fu)
 | |
| (require 'evil)
 | |
| ;; start mode
 | |
| (evil-mode t)
 | |
| 
 | |
| ;; https://github.com/emacs-evil/evil/issues/1288
 | |
| ;; Credit goes to: https://github.com/nnicandro
 | |
| ;; Fix for the broken org-src-tab-acts-natively functionality
 | |
| ;; Tab in fact does nothing in src blocks if evil is enabled
 | |
| (defun evil-org-insert-state-in-edit-buffer (fun &rest args)
 | |
|   "Bind `evil-default-state' to `insert' before calling FUN with ARGS."
 | |
|   (let ((evil-default-state 'insert)
 | |
|         ;; Force insert state
 | |
|         evil-emacs-state-modes
 | |
|         evil-normal-state-modes
 | |
|         evil-motion-state-modes
 | |
|         evil-visual-state-modes
 | |
|         evil-operator-state-modes
 | |
|         evil-replace-state-modes)
 | |
|     (apply fun args)
 | |
|     (evil-refresh-cursor)))
 | |
| 
 | |
| ;; MESSAGE BUFFER:
 | |
| (evil-set-initial-state 'message-mode 'normal)
 | |
| 
 | |
| (advice-add 'org-babel-do-key-sequence-in-edit-buffer
 | |
|             :around #'evil-org-insert-state-in-edit-buffer)
 | |
| 
 | |
| ;; EVIL-NERD-COMMENTER: Easy un/comment
 | |
| (straight-use-package 'evil-nerd-commenter)
 | |
| 
 | |
| ;; EVIL-VILUALSTAR: Search selected thing with *
 | |
| (straight-use-package 'evil-visualstar)
 | |
| (global-evil-visualstar-mode)
 | |
| 
 | |
| ;; EVIL-SURROUND:
 | |
| (straight-use-package 'evil-surround)
 | |
| ;; start mode
 | |
| (global-evil-surround-mode t)
 | |
| 
 | |
| ;; EVIL-COLLECTION: improved evil support for multiple packages
 | |
| (straight-use-package 'evil-collection)
 | |
| ;; variables
 | |
| (setq evil-collection-setup-minibuffer t
 | |
|       evil-collection-mode-list
 | |
|       '(ibuffer help calc nov man calendar ivy minibuffer dired debug
 | |
|         doc-view arc-mode magit vterm))
 | |
| ;; start mode
 | |
| (evil-collection-init)
 | |
| 
 | |
| ;; IVY: better popup menu (Alternative: Helm)
 | |
| (straight-use-package 'ivy)
 | |
| ;; variables
 | |
| (setq ivy-use-virtual-buffers t
 | |
|       ivy-re-builders-alist '((t . ivy--regex-ignore-order))
 | |
|       enable-recursive-minibuffers t
 | |
|       ivy-wrap t
 | |
|       ivy-magic-slash-non-match-action 'ivy-magic-slash-non-match-create
 | |
|       ivy-count-format "%d/%d ")
 | |
| ;; remove caret (has to be counsel not ivy #thanksfornothinginternet)
 | |
| (with-eval-after-load 'counsel (setq ivy-initial-inputs-alist nil))
 | |
| ;; start mode
 | |
| (ivy-mode t)
 | |
| 
 | |
| ;; Keybindings
 | |
| ;; Allow the creation of files/folders even if a file/folder with a similar name
 | |
| ;; is matched in the ivy buffer.
 | |
| (my-leader
 | |
|   :states 'normal
 | |
|   :keymaps 'ivy-minibuffer-map
 | |
|   "SPC f" 'ivy-immediate-done)
 | |
| 
 | |
| ;; IVY-PRESCIENT: better suggestions for ivy
 | |
| (straight-use-package 'ivy-prescient)
 | |
| ;; start mode
 | |
| (ivy-prescient-mode)
 | |
| 
 | |
| ;; COUNSEL: several improved functions like find-file, etc.
 | |
| (straight-use-package 'counsel)
 | |
| (setq counsel-grep-base-command "grep -R -i -n -H --color=never %s ."
 | |
|       counsel-rg-base-command "rg -i -M 250 --hidden --no-heading --line-number --color never %s")
 | |
| 
 | |
| ;; WHICH-KEY: hints in the mini bar
 | |
| (straight-use-package 'which-key)
 | |
| (which-key-setup-minibuffer)
 | |
| ;; start mode
 | |
| (which-key-mode)
 | |
| 
 | |
| ;; ACE-WINDOW: jump between windows faster
 | |
| ;; TODO: Set your own keys (;
 | |
| (straight-use-package 'ace-window)
 | |
| (setq aw-scope 'frame
 | |
|       aw-keys '(?j ?k ?l ?f ?d ?s))
 | |
| 
 | |
| ;; ELECTRIC-PAIR: auto-balance brackets
 | |
| (electric-pair-mode t)
 | |
| ;; electric-indent-mode is a bit buggy in src blocks...
 | |
| ;; Unfortunately it adds a bug, where the cursor jumps to the start of the src
 | |
| ;; block after inserting a nested block of any sort {}, [], () and pressing RET
 | |
| ;; This is triggered by: org-return -> newline-and-indent
 | |
| ;; Adding an advice did not work, since the point must not only be recovered
 | |
| ;; but also increased by the level of indention... Also, it seemed like another
 | |
| ;; function is responsible for the reset since I added the advice to
 | |
| ;; org-babel-do-key-sequence-in-edit-buffer (Probably newline-and-indent)
 | |
| ;; TODO: Check if this bug is still present in newer versions
 | |
| 
 | |
| ;; hooks
 | |
| (add-hook 'org-mode-hook
 | |
|           (lambda ()
 | |
|             (setq-local electric-pair-inhibit-predicate
 | |
|                         `(lambda (c)
 | |
|                            (if (char-equal c ?<) t (,electric-pair-inhibit-predicate c))))))
 | |
| ;; SAVE PLACE MODE
 | |
| ;; Return to the point in a buffer when reopening it after some time
 | |
| (save-place-mode 1)
 | |
| 
 | |
| (provide 'essentials) |