Switching back to evil

This commit is contained in:
Joseph Ferano 2022-11-12 21:14:53 +03:00
parent 174a736ced
commit 36972ca410
2 changed files with 122 additions and 189 deletions

View File

@ -14,7 +14,7 @@ window_margin_width 0.0
active_border_color #bbb active_border_color #bbb
inactive_border_color #555 inactive_border_color #555
bell_border_color #ff5a00 bell_border_color #ff5a00
inactive_text_alpha 0.75 inactive_text_alpha 1
hide_window_decorations yes hide_window_decorations yes
cursor_shape block cursor_shape block

View File

@ -134,13 +134,6 @@ need to benchmark slow init times later.
#+end_src #+end_src
Don't let emacs add customised settings to init.el, which in our case is worse since we have a
literate file.
#+begin_src emacs-lisp
#+end_src
This avoids those annoying *#backup#* files that get added and eventually slow down loading the file again. This avoids those annoying *#backup#* files that get added and eventually slow down loading the file again.
#+begin_src emacs-lisp #+begin_src emacs-lisp
@ -202,12 +195,18 @@ Use Dashboard.el. First load `all-the-icons` for nicer rendering
(setq custom-safe-themes t) (setq custom-safe-themes t)
#+end_src #+end_src
Save the last used theme when exiting emacs and then reload it. We want to add whatever custom theme we selected to the custom variables since emacs will just
automatically read it on startup but we don't want emacs to add these settings to init.el, which in
our case is worse since we have a literate file. Send all custom variables to ~custom.el~
#+begin_src emacs-lisp #+begin_src emacs-lisp
(setq custom-file (expand-file-name "custom.el" user-emacs-directory)) (setq custom-file (expand-file-name "custom.el" user-emacs-directory))
(load custom-file) (load custom-file)
#+end_src
Save the last used theme when exiting emacs and then reload it.
#+begin_src emacs-lisp
(defun joe/save-current-theme () (defun joe/save-current-theme ()
(customize-save-variable 'custom-enabled-themes custom-enabled-themes)) (customize-save-variable 'custom-enabled-themes custom-enabled-themes))
(add-hook 'kill-emacs-hook #'joe/save-current-theme) (add-hook 'kill-emacs-hook #'joe/save-current-theme)
@ -378,7 +377,7 @@ The theme of `C-x 4` bindings is that they operate on other windows, so this fun
(popper-mode t) (popper-mode t)
#+end_src #+end_src
*** Scrolling *** Scrolling
#+begin_src emacs-lisp #+begin_src emacs-lisp :tangle no
(require 'pixel-scroll) (require 'pixel-scroll)
(setq pixel-scroll-precision-large-scroll-height 10.0) (setq pixel-scroll-precision-large-scroll-height 10.0)
(setq pixel-scroll-precision-interpolation-factor 30) (setq pixel-scroll-precision-interpolation-factor 30)
@ -395,13 +394,13 @@ The theme of `C-x 4` bindings is that they operate on other windows, so this fun
(defun joe/smooth-scroll-half-page-down () (defun joe/smooth-scroll-half-page-down ()
"Smooth scroll down" "Smooth scroll down"
(interactive) (interactive)
(joe/pixel-scroll-lerp 3 -1)) (joe/pixel-scroll-lerp 1.5 -1))
;; (pixel-scroll-kbd-up)) ;; (pixel-scroll-kbd-up))
(defun joe/smooth-scroll-half-page-up () (defun joe/smooth-scroll-half-page-up ()
"Smooth scroll up" "Smooth scroll up"
(interactive) (interactive)
(joe/pixel-scroll-lerp 3 1)) (joe/pixel-scroll-lerp 1.5 1))
(defun joe/smooth-scroll-short-down () (defun joe/smooth-scroll-short-down ()
"Smooth scroll down" "Smooth scroll down"
@ -508,8 +507,9 @@ Vertico Embark Marginalia Consult Orderless
(defvar joe-mode-map (defvar joe-mode-map
(let ((map (make-sparse-keymap))) (let ((map (make-sparse-keymap)))
(define-key map (kbd "C-'") #'embark-act) ;; (define-key map (kbd "C-'") #'embark-act)
(define-key map (kbd "M-'") #'embark-dwim) (define-key map (kbd "M-'") #'embark-dwim)
(define-key map (kbd "C-/") #'comment-line)
map) map)
"my-keys-minor-mode keymap.") "my-keys-minor-mode keymap.")
@ -602,7 +602,8 @@ targets."
#+begin_src emacs-lisp #+begin_src emacs-lisp
(straight-use-package 'avy) (straight-use-package 'avy)
(setq avy-case-fold-search nil) ;; case sensitive makes selection easier (setq avy-case-fold-search nil)
(setq avy-keys '(?a ?s ?d ?f ?g ?h ?j ?k ?l ?q ?w ?e ?r ?u ?i ?o ?p ?z ?x ?c ?v ?n ?m))
(define-key global-map (kbd "C-;") 'avy-goto-char) ;; I use this most frequently (define-key global-map (kbd "C-;") 'avy-goto-char) ;; I use this most frequently
;; (define-key global-map (kbd "C-'") 'avy-goto-line) ;; Consistent with ivy-avy ;; (define-key global-map (kbd "C-'") 'avy-goto-line) ;; Consistent with ivy-avy
(define-key global-map (kbd "M-g c") 'avy-goto-char) (define-key global-map (kbd "M-g c") 'avy-goto-char)
@ -664,6 +665,7 @@ targets."
(define-key dirvish-mode-map (kbd "h" ) #'dirvish-history-jump) (define-key dirvish-mode-map (kbd "h" ) #'dirvish-history-jump)
(define-key dirvish-mode-map (kbd "s" ) #'dirvish-quicksort) (define-key dirvish-mode-map (kbd "s" ) #'dirvish-quicksort)
(define-key dirvish-mode-map (kbd "v" ) #'dirvish-vc-menu) (define-key dirvish-mode-map (kbd "v" ) #'dirvish-vc-menu)
(define-key dirvish-mode-map (kbd "q" ) #'dirvish-quit)
(define-key dirvish-mode-map (kbd "TAB" ) #'dirvish-subtree-toggle) (define-key dirvish-mode-map (kbd "TAB" ) #'dirvish-subtree-toggle)
(define-key dirvish-mode-map (kbd "M-f" ) #'dirvish-history-go-forward) (define-key dirvish-mode-map (kbd "M-f" ) #'dirvish-history-go-forward)
(define-key dirvish-mode-map (kbd "M-b" ) #'dirvish-history-go-backward) (define-key dirvish-mode-map (kbd "M-b" ) #'dirvish-history-go-backward)
@ -713,8 +715,8 @@ targets."
#+end_src #+end_src
We need this require so we can call `vterm--internal in the joe/vterm-here function, but that slows VTerm is loading TRAMP along with it which slows down init time noticeably so call this after
down init time because vterm is loading TRAMP which is slow. startup. Reason we have to call this is so the vterm fucntion can call `vterm--internal`.
#+begin_src emacs-lisp #+begin_src emacs-lisp
(add-hook 'emacs-startup-hook (lambda () (require 'vterm))) (add-hook 'emacs-startup-hook (lambda () (require 'vterm)))
@ -728,13 +730,6 @@ down init time because vterm is loading TRAMP which is slow.
(setq undo-tree-visualizer-diff t) (setq undo-tree-visualizer-diff t)
(setq undo-tree-history-directory-alist `(("." . ,(expand-file-name "undo" user-emacs-directory)))))) (setq undo-tree-history-directory-alist `(("." . ,(expand-file-name "undo" user-emacs-directory))))))
#+end_src #+end_src
** Which Key
#+begin_src emacs-lisp
(straight-use-package 'which-key)
(setq which-key-idle-delay 0.3)
(add-hook 'after-init-hook (lambda () (which-key-mode)))
#+end_src
** Text Editor ** Text Editor
Emacs is an great operating system, if only it had a good text editor... Emacs is an great operating system, if only it had a good text editor...
@ -771,166 +766,118 @@ Emacs is an great operating system, if only it had a good text editor...
("M-r" move-to-window-line-top-bottom "Reposition cursor")) ("M-r" move-to-window-line-top-bottom "Reposition cursor"))
#+end_src #+end_src
*** Multiple Cursors *** Multiple Cursors
#+begin_src emacs-lisp #+begin_src emacs-lisp
(straight-use-package 'multiple-cursors) (straight-use-package 'multiple-cursors)
#+end_src #+end_src
*** Meow *** Evil
#+begin_src emacs-lisp :tangle no
(straight-use-package 'meow)
(require 'meow)
(defun meow-setup ()
(setq meow-cheatsheet-layout meow-cheatsheet-layout-qwerty)
(meow-motion-overwrite-define-key
'("j" . meow-next)
'("k" . meow-prev)
'("<escape>" . ignore))
(meow-leader-define-key
;; SPC j/k will run the original command in MOTION state.
'("j" . "H-j")
'("k" . "H-k")
;; Use SPC (0-9) for digit arguments.
'("1" . meow-digit-argument)
'("2" . meow-digit-argument)
'("3" . meow-digit-argument)
'("4" . meow-digit-argument)
'("5" . meow-digit-argument)
'("6" . meow-digit-argument)
'("7" . meow-digit-argument)
'("8" . meow-digit-argument)
'("9" . meow-digit-argument)
'("0" . meow-digit-argument)
'("/" . meow-keypad-describe-key)
'("?" . meow-cheatsheet))
(meow-normal-define-key
'("0" . meow-expand-0)
'("9" . meow-expand-9)
'("8" . meow-expand-8)
'("7" . meow-expand-7)
'("6" . meow-expand-6)
'("5" . meow-expand-5)
'("4" . meow-expand-4)
'("3" . meow-expand-3)
'("2" . meow-expand-2)
'("1" . meow-expand-1)
'("-" . negative-argument)
'(";" . meow-reverse)
'("," . meow-inner-of-thing)
'("." . meow-bounds-of-thing)
'("[" . meow-beginning-of-thing)
'("]" . meow-end-of-thing)
'("a" . meow-append)
'("A" . meow-open-below)
'("b" . meow-back-word)
'("B" . meow-back-symbol)
'("c" . meow-change)
'("d" . meow-delete)
'("D" . meow-backward-delete)
'("e" . meow-next-word)
'("E" . meow-next-symbol)
'("f" . meow-find)
'("g" . meow-cancel-selection)
'("G" . meow-grab)
'("h" . meow-left)
'("H" . meow-left-expand)
'("i" . meow-insert)
'("I" . meow-open-above)
'("j" . meow-next)
'("J" . meow-next-expand)
'("k" . meow-prev)
'("K" . meow-prev-expand)
'("l" . meow-right)
'("L" . meow-right-expand)
'("m" . meow-join)
'("n" . meow-search)
'("o" . meow-block)
'("O" . meow-to-block)
'("p" . meow-yank)
'("q" . meow-quit)
'("Q" . meow-goto-line)
'("r" . meow-replace)
'("R" . meow-swap-grab)
'("s" . meow-kill)
'("t" . meow-till)
'("u" . meow-undo)
'("U" . meow-undo-in-selection)
'("v" . meow-visit)
'("w" . meow-mark-word)
'("W" . meow-mark-symbol)
'("x" . meow-line)
'("X" . meow-goto-line)
'("y" . meow-save)
'("Y" . meow-sync-grab)
'("z" . meow-pop-selection)
'("'" . repeat)
'("<escape>" . ignore)))
(meow-setup)
(meow-global-mode t)
#+end_src
*** Boon
#+begin_src emacs-lisp #+begin_src emacs-lisp
(straight-use-package 'boon)
(require 'boon-qwerty) (setq evil-want-keybinding nil)
(boon-mode) (setq evil-undo-system 'undo-tree)
(define-key boon-moves-map "h" 'backward-char) (setq evil-want-C-u-scroll t)
(define-key boon-moves-map "j" 'next-line) (setq evil-want-Y-yank-to-eol t)
(define-key boon-moves-map "k" 'previous-line) (setq evil-disable-insert-state-bindings t)
(define-key boon-moves-map "l" 'forward-char)
(define-key boon-moves-map "i" 'boon-smarter-backward) (straight-use-package 'evil)
(define-key boon-moves-map "o" 'boon-smarter-forward) (straight-use-package 'evil-collection)
(define-key boon-moves-map ";" '("hop" . avy-goto-word-1))
(define-key boon-command-map (kbd "C-k") 'scroll-down-line) (evil-mode t)
(define-key boon-command-map (kbd "C-j") 'scroll-up-line) (evil-collection-init)
(define-key boon-command-map (kbd "C-d") 'joe/smooth-scroll-half-page-down)
(define-key boon-command-map (kbd "C-u") 'joe/smooth-scroll-half-page-up) ;; TODO: We need 3 bindings; 1.) close buffer 2.) close window 3.) close buffer and window
(define-key boon-moves-map "H" 'backward-paragraph) ;; To disable a keybinding just bind it to nil
(define-key boon-moves-map "L" 'forward-paragraph) (evil-set-leader 'normal (kbd "SPC"))
(define-key boon-moves-map "K" 'boon-smarter-upward) (evil-define-key 'normal 'global (kbd "<leader>w") 'save-buffer)
(define-key boon-moves-map "J" 'boon-smarter-downward) (evil-define-key 'normal 'global (kbd "<leader>q") 'kill-buffer-and-window)
(evil-define-key 'normal 'global (kbd "<leader>k") 'kill-this-buffer)
(evil-define-key 'normal 'global (kbd "<leader>h") 'help-command)
(evil-define-key 'normal 'global (kbd "<leader>hf") 'helpful-callable)
(evil-define-key 'normal 'global (kbd "<leader>hv") 'helpful-variable)
(evil-define-key 'normal 'global (kbd "<leader>hk") 'helpful-key)
(evil-define-key 'normal 'global (kbd "<leader>ho") 'helpful-symbol)
(evil-define-key 'normal 'global (kbd "<leader>hg") 'helpful-at-point)
(evil-define-key 'normal 'global (kbd "<leader>fb") 'bookmark-jump)
(evil-define-key 'normal 'global (kbd "<leader>fr") 'consult-recent-file)
(evil-define-key 'normal 'global (kbd "<leader>ff") 'ffip)
(evil-define-key 'normal 'global (kbd "<leader>fi") 'joe/edit-init)
(evil-define-key 'normal 'global (kbd "<leader>bl") 'mode-line-other-buffer)
(evil-define-key 'normal 'global (kbd "<leader>bb") 'switch-to-buffer)
(evil-define-key 'normal 'global (kbd "<leader>bi") 'ibuffer)
(evil-define-key 'normal 'global (kbd "<leader>bm") 'joe/toggle-buffer-mode)
(evil-define-key 'normal 'global (kbd "<leader>br") 'joe/revert-buffer-no-confirm)
(evil-define-key 'normal 'global (kbd "<leader>bk") 'kill-this-buffer)
(evil-define-key 'normal 'global (kbd "<leader>gg") 'magit-status)
(evil-define-key 'normal 'global (kbd "<leader>gc") 'magit-clone)
(evil-define-key 'normal 'global (kbd "<leader>pi") 'package-install)
(evil-define-key 'normal 'global (kbd "<leader>pd") 'package-delete)
(evil-define-key 'normal 'global (kbd "<leader>pf") 'package-refresh-contents)
(evil-define-key 'normal 'global (kbd "<leader>pl") 'package-list-packages)
(evil-define-key 'normal 'global (kbd "<leader>pr") 'package-reinstall)
(evil-define-key 'normal 'global (kbd "<leader>ss") 'joe/vterm-here)
(evil-define-key 'normal 'global (kbd "<leader>sv") 'vterm)
(evil-define-key 'normal 'global (kbd "<leader>tv") 'vterm-other-window)
(evil-define-key 'normal 'global (kbd "<leader>Ba") 'joe/bookmark-set-and-save)
(evil-define-key 'normal 'global (kbd "<leader>Bd") 'bookmark-delete)
(evil-define-key 'normal 'global (kbd "<leader>cr") 'joe/compile-run)
(evil-define-key 'normal 'global (kbd "<leader>cc") 'joe/compile-comp)
(evil-define-key 'normal 'global (kbd "<leader>ct") 'consult-theme)
(evil-define-key 'normal 'global (kbd "C-h") 'evil-window-left)
(evil-define-key 'normal 'global (kbd "C-j") 'evil-window-down)
(evil-define-key 'normal 'global (kbd "C-k") 'evil-window-up)
(evil-define-key 'normal 'global (kbd "C-l") 'evil-window-right)
(evil-define-key 'normal 'global (kbd "M-h") 'tab-previous)
(evil-define-key 'normal 'global (kbd "M-l") 'tab-next)
(evil-define-key 'normal 'global (kbd "<leader>tn") 'tab-new)
(evil-define-key 'normal 'global (kbd "<leader>tc") 'tab-close)
(defvar global-evil-leader-map (make-sparse-keymap))
(evil-define-key 'normal 'global-evil-leader-map (kbd "SPC") 'evil-send-leader)
(define-minor-mode global-evil-leader-mode
"Minor mode to make evil leader global"
:global t
:keymap global-evil-leader-map)
(global-evil-leader-mode)
;; (evil-define-key 'normal 'global (kbd "M-h") 'tab-line-switch-to-prev-tab)
;; (evil-define-key 'normal 'global (kbd "M-l") 'tab-line-switch-to-next-tab)
(straight-use-package 'evil-surround)
(global-evil-surround-mode t)
(straight-use-package 'evil-snipe)
(evil-snipe-override-mode t)
(straight-use-package 'evil-commentary)
(evil-commentary-mode t)
(straight-use-package 'evil-goggles)
(evil-goggles-mode t)
(setq evil-goggles-duration 0.075)
(setq evil-goggles-pulse t)
(setq evil-goggles-async-duration 0.55)
#+end_src #+end_src
** Which Key
Because boon provides the x mode map, emacs bindings that keep tempo no longer do, so reverse them
#+begin_src emacs-lisp #+begin_src emacs-lisp
(global-set-key (kbd "C-x s") 'save-buffer) (straight-use-package 'which-key)
(global-set-key (kbd "C-x C-s") 'save-some-buffers) (setq which-key-idle-delay 0.3)
#+end_src (add-hook 'after-init-hook (lambda () (which-key-mode)))
*** Kakoune.el
#+begin_src emacs-lisp :tangle no ;; (which-key-add-keymap-based-replacements evil-normal-state-map
(straight-use-package 'kakoune) ;; "<leader>f" '("Files")
(require 'kakoune) ;; "<leader>b" '("Buffers")
(defun ryo-enter () "Enter normal mode" (interactive) (ryo-modal-mode 1)) ;; "<leader>B" '("Bookmarks")
(defun my/kakoune-setup () ;; "<leader>c" '("Compile")
"Call kakoune-setup-keybinds and then add some personal config." ;; "<leader>d" '("Dired")
(kakoune-setup-keybinds) ;; "<leader>g" '("Git")
(setq ryo-modal-cursor-type 'box) ;; "<leader>t" '("Tabs")
(add-hook 'prog-mode-hook #'ryo-enter) ;; "<leader>p" '("Packages")
(define-key ryo-modal-mode-map (kbd "SPC h") 'help-command) ;; "<leader>s" '("Shell (vterm)")
;; Access all C-x bindings easily ;; "<leader>h" '("Help"))
(define-key ryo-modal-mode-map (kbd "z") ctl-x-map)
(ryo-modal-keys
("," save-buffer)
("P" counsel-yank-pop)
("m" mc/mark-next-like-this)
("M" mc/skip-to-next-like-this)
("n" mc/mark-previous-like-this)
("N" mc/skip-to-previous-like-this)
("M-m" mc/edit-lines)
("*" mc/mark-all-like-this)
("v" er/expand-region)
("C-v" set-rectangular-region-anchor)
("M-s" mc/split-region)
(";" (("q" delete-window)
("v" split-window-horizontally)
("s" split-window-vertically)))
("C-h" windmove-left)
("C-j" windmove-down)
("C-k" windmove-up)
("C-l" windmove-right)
("C-u" scroll-down-command :first '(deactivate-mark))
("C-d" scroll-up-command :first '(deactivate-mark))))
(add-hook 'after-init-hook 'my/kakoune-setup)
#+end_src #+end_src
** IDE Features ** IDE Features
@ -942,7 +889,7 @@ Because boon provides the x mode map, emacs bindings that keep tempo no longer d
(straight-use-package 'lsp-mode) (straight-use-package 'lsp-mode)
(setq lsp-keymap-prefix "C-c c") (setq lsp-keymap-prefix "C-c c")
(lsp-enable-which-key-integration t) ;; (lsp-enable-which-key-integration t)
;; (require 'lsp) ;; (require 'lsp)
;; (straight-use-package 'eglot) ;; (straight-use-package 'eglot)
@ -1083,20 +1030,6 @@ The best git porcelain/client I've ever used. Also kill stray magit buffers left
(setq magit-bury-buffer-function #'joe/magit-kill-buffers) (setq magit-bury-buffer-function #'joe/magit-kill-buffers)
(setq magit-clone-set-remote.pushDefault t) (setq magit-clone-set-remote.pushDefault t)
(setq magit-clone-default-directory "~/Development/") (setq magit-clone-default-directory "~/Development/")
(defvar joe/magit-keys-mode-map
(let ((map (make-sparse-keymap)))
(define-key map (kbd "C-x g g") #'magit-status)
(define-key map (kbd "C-x g c") #'magit-clone)
(define-key map (kbd "C-x g i") #'magit-init)
map)
"Personal magit map")
(define-minor-mode joe/magit-keys-mode
"A minor mode to enable some magit keys"
:init-value t)
(joe/magit-keys-mode t)
#+end_src #+end_src
** Restclient ** Restclient