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
inactive_border_color #555
bell_border_color #ff5a00
inactive_text_alpha 0.75
inactive_text_alpha 1
hide_window_decorations yes
cursor_shape block

View File

@ -134,13 +134,6 @@ need to benchmark slow init times later.
#+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.
#+begin_src emacs-lisp
@ -202,12 +195,18 @@ Use Dashboard.el. First load `all-the-icons` for nicer rendering
(setq custom-safe-themes t)
#+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
(setq custom-file (expand-file-name "custom.el" user-emacs-directory))
(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 ()
(customize-save-variable 'custom-enabled-themes custom-enabled-themes))
(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)
#+end_src
*** Scrolling
#+begin_src emacs-lisp
#+begin_src emacs-lisp :tangle no
(require 'pixel-scroll)
(setq pixel-scroll-precision-large-scroll-height 10.0)
(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 ()
"Smooth scroll down"
(interactive)
(joe/pixel-scroll-lerp 3 -1))
(joe/pixel-scroll-lerp 1.5 -1))
;; (pixel-scroll-kbd-up))
(defun joe/smooth-scroll-half-page-up ()
"Smooth scroll up"
(interactive)
(joe/pixel-scroll-lerp 3 1))
(joe/pixel-scroll-lerp 1.5 1))
(defun joe/smooth-scroll-short-down ()
"Smooth scroll down"
@ -508,8 +507,9 @@ Vertico Embark Marginalia Consult Orderless
(defvar joe-mode-map
(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 "C-/") #'comment-line)
map)
"my-keys-minor-mode keymap.")
@ -602,7 +602,8 @@ targets."
#+begin_src emacs-lisp
(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-line) ;; Consistent with ivy-avy
(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 "s" ) #'dirvish-quicksort)
(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 "M-f" ) #'dirvish-history-go-forward)
(define-key dirvish-mode-map (kbd "M-b" ) #'dirvish-history-go-backward)
@ -713,8 +715,8 @@ targets."
#+end_src
We need this require so we can call `vterm--internal in the joe/vterm-here function, but that slows
down init time because vterm is loading TRAMP which is slow.
VTerm is loading TRAMP along with it which slows down init time noticeably so call this after
startup. Reason we have to call this is so the vterm fucntion can call `vterm--internal`.
#+begin_src emacs-lisp
(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-history-directory-alist `(("." . ,(expand-file-name "undo" user-emacs-directory))))))
#+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
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"))
#+end_src
*** Multiple Cursors
#+begin_src emacs-lisp
(straight-use-package 'multiple-cursors)
#+end_src
*** Meow
#+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
*** Evil
#+begin_src emacs-lisp
(straight-use-package 'boon)
(require 'boon-qwerty)
(boon-mode)
(define-key boon-moves-map "h" 'backward-char)
(define-key boon-moves-map "j" 'next-line)
(define-key boon-moves-map "k" 'previous-line)
(define-key boon-moves-map "l" 'forward-char)
(define-key boon-moves-map "i" 'boon-smarter-backward)
(define-key boon-moves-map "o" 'boon-smarter-forward)
(define-key boon-moves-map ";" '("hop" . avy-goto-word-1))
(define-key boon-command-map (kbd "C-k") 'scroll-down-line)
(define-key boon-command-map (kbd "C-j") 'scroll-up-line)
(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)
(define-key boon-moves-map "H" 'backward-paragraph)
(define-key boon-moves-map "L" 'forward-paragraph)
(define-key boon-moves-map "K" 'boon-smarter-upward)
(define-key boon-moves-map "J" 'boon-smarter-downward)
(setq evil-want-keybinding nil)
(setq evil-undo-system 'undo-tree)
(setq evil-want-C-u-scroll t)
(setq evil-want-Y-yank-to-eol t)
(setq evil-disable-insert-state-bindings t)
(straight-use-package 'evil)
(straight-use-package 'evil-collection)
(evil-mode t)
(evil-collection-init)
;; TODO: We need 3 bindings; 1.) close buffer 2.) close window 3.) close buffer and window
;; To disable a keybinding just bind it to nil
(evil-set-leader 'normal (kbd "SPC"))
(evil-define-key 'normal 'global (kbd "<leader>w") 'save-buffer)
(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
Because boon provides the x mode map, emacs bindings that keep tempo no longer do, so reverse them
** Which Key
#+begin_src emacs-lisp
(global-set-key (kbd "C-x s") 'save-buffer)
(global-set-key (kbd "C-x C-s") 'save-some-buffers)
#+end_src
*** Kakoune.el
(straight-use-package 'which-key)
(setq which-key-idle-delay 0.3)
(add-hook 'after-init-hook (lambda () (which-key-mode)))
#+begin_src emacs-lisp :tangle no
(straight-use-package 'kakoune)
(require 'kakoune)
(defun ryo-enter () "Enter normal mode" (interactive) (ryo-modal-mode 1))
(defun my/kakoune-setup ()
"Call kakoune-setup-keybinds and then add some personal config."
(kakoune-setup-keybinds)
(setq ryo-modal-cursor-type 'box)
(add-hook 'prog-mode-hook #'ryo-enter)
(define-key ryo-modal-mode-map (kbd "SPC h") 'help-command)
;; Access all C-x bindings easily
(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)
;; (which-key-add-keymap-based-replacements evil-normal-state-map
;; "<leader>f" '("Files")
;; "<leader>b" '("Buffers")
;; "<leader>B" '("Bookmarks")
;; "<leader>c" '("Compile")
;; "<leader>d" '("Dired")
;; "<leader>g" '("Git")
;; "<leader>t" '("Tabs")
;; "<leader>p" '("Packages")
;; "<leader>s" '("Shell (vterm)")
;; "<leader>h" '("Help"))
#+end_src
** 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)
(setq lsp-keymap-prefix "C-c c")
(lsp-enable-which-key-integration t)
;; (lsp-enable-which-key-integration t)
;; (require 'lsp)
;; (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-clone-set-remote.pushDefault t)
(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
** Restclient