diff --git a/.config/kitty/kitty.conf b/.config/kitty/kitty.conf index 67f17a8..9ded724 100644 --- a/.config/kitty/kitty.conf +++ b/.config/kitty/kitty.conf @@ -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 diff --git a/.emacs.bankruptcy/init.org b/.emacs.bankruptcy/init.org index 1e09662..307851d 100644 --- a/.emacs.bankruptcy/init.org +++ b/.emacs.bankruptcy/init.org @@ -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) - '("" . 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) - '("" . 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 "w") 'save-buffer) +(evil-define-key 'normal 'global (kbd "q") 'kill-buffer-and-window) +(evil-define-key 'normal 'global (kbd "k") 'kill-this-buffer) +(evil-define-key 'normal 'global (kbd "h") 'help-command) +(evil-define-key 'normal 'global (kbd "hf") 'helpful-callable) +(evil-define-key 'normal 'global (kbd "hv") 'helpful-variable) +(evil-define-key 'normal 'global (kbd "hk") 'helpful-key) +(evil-define-key 'normal 'global (kbd "ho") 'helpful-symbol) +(evil-define-key 'normal 'global (kbd "hg") 'helpful-at-point) +(evil-define-key 'normal 'global (kbd "fb") 'bookmark-jump) +(evil-define-key 'normal 'global (kbd "fr") 'consult-recent-file) +(evil-define-key 'normal 'global (kbd "ff") 'ffip) +(evil-define-key 'normal 'global (kbd "fi") 'joe/edit-init) +(evil-define-key 'normal 'global (kbd "bl") 'mode-line-other-buffer) +(evil-define-key 'normal 'global (kbd "bb") 'switch-to-buffer) +(evil-define-key 'normal 'global (kbd "bi") 'ibuffer) +(evil-define-key 'normal 'global (kbd "bm") 'joe/toggle-buffer-mode) +(evil-define-key 'normal 'global (kbd "br") 'joe/revert-buffer-no-confirm) +(evil-define-key 'normal 'global (kbd "bk") 'kill-this-buffer) +(evil-define-key 'normal 'global (kbd "gg") 'magit-status) +(evil-define-key 'normal 'global (kbd "gc") 'magit-clone) +(evil-define-key 'normal 'global (kbd "pi") 'package-install) +(evil-define-key 'normal 'global (kbd "pd") 'package-delete) +(evil-define-key 'normal 'global (kbd "pf") 'package-refresh-contents) +(evil-define-key 'normal 'global (kbd "pl") 'package-list-packages) +(evil-define-key 'normal 'global (kbd "pr") 'package-reinstall) +(evil-define-key 'normal 'global (kbd "ss") 'joe/vterm-here) +(evil-define-key 'normal 'global (kbd "sv") 'vterm) +(evil-define-key 'normal 'global (kbd "tv") 'vterm-other-window) +(evil-define-key 'normal 'global (kbd "Ba") 'joe/bookmark-set-and-save) +(evil-define-key 'normal 'global (kbd "Bd") 'bookmark-delete) +(evil-define-key 'normal 'global (kbd "cr") 'joe/compile-run) +(evil-define-key 'normal 'global (kbd "cc") 'joe/compile-comp) +(evil-define-key 'normal 'global (kbd "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 "tn") 'tab-new) +(evil-define-key 'normal 'global (kbd "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 +;; "f" '("Files") +;; "b" '("Buffers") +;; "B" '("Bookmarks") +;; "c" '("Compile") +;; "d" '("Dired") +;; "g" '("Git") +;; "t" '("Tabs") +;; "p" '("Packages") +;; "s" '("Shell (vterm)") +;; "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