diff --git a/.emacs.bankruptcy/init.org b/.emacs.bankruptcy/init.org index 0a02f02..4357fb1 100644 --- a/.emacs.bankruptcy/init.org +++ b/.emacs.bankruptcy/init.org @@ -285,6 +285,156 @@ Setup other stuff ;; (add-hook 'before-save-hook 'whitespace-cleanup) #+end_src +** Text Editor + +Emacs is an great operating system, if only it had a good text editor... + +*** Text editing +#+begin_src emacs-lisp +(global-set-key (kbd "M-z") #'zap-up-to-char) +(global-set-key (kbd "M-Z") #'zap-to-char) + +(defun joe/duplicate-line-comment () + (interactive) + (let ((col (current-column))) + (duplicate-line) + (comment-line 1) + (move-to-column col))) + +(global-set-key (kbd "C-c d") 'duplicate-line) +(global-set-key (kbd "C-c C-;") 'joe/duplicate-line-comment) + +#+end_src +*** Hydra +#+begin_src emacs-lisp +(straight-use-package 'hydra) + +(defhydra hydra-navigate (global-map "") + "Window Navigation" + ("q" nil "quit") + ("d" joe/smooth-scroll-half-page-down "half page down") + ("u" joe/smooth-scroll-half-page-up "half page up") + ("e" joe/smooth-scroll-short-down "line down") + ("y" joe/smooth-scroll-short-up "line up") + ("n" next-line "line down") + ("p" previous-line "line up") + ("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 +*** Evil +#+begin_src emacs-lisp + +(setq evil-want-keybinding nil) +(setq evil-undo-system 'undo-fu) +(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 + (kbd "q") 'kill-buffer-and-window + (kbd "k") 'kill-this-buffer + (kbd "h") 'help-command + (kbd "hf") 'helpful-callable + (kbd "hv") 'helpful-variable + (kbd "hk") 'helpful-key + (kbd "ho") 'helpful-symbol + (kbd "hg") 'helpful-at-point + (kbd "fb") 'bookmark-jump + (kbd "fr") 'consult-recent-file + (kbd "ff") 'project-find-file + (kbd "fi") 'joe/edit-init + (kbd "bl") 'mode-line-other-buffer + (kbd "ba") 'consult-buffer + (kbd "bb") 'consult-project-buffer + (kbd "bi") 'ibuffer + (kbd "bm") 'joe/toggle-buffer-mode + (kbd "br") 'joe/revert-buffer-no-confirm + (kbd "gg") 'magit-status + (kbd "gc") 'magit-clone + (kbd "ss") 'joe/vterm-here + (kbd "sv") 'vterm + (kbd "tv") 'vterm-other-window + (kbd "Ba") 'joe/bookmark-set-and-save + (kbd "Bd") 'bookmark-delete + (kbd "mr") 'joe/compile-run + (kbd "mc") 'joe/compile-comp + (kbd "ct") 'consult-theme + (kbd "cl") 'consult-line + (kbd "ci") 'consult-imenu + (kbd "cy") 'consult-yank-from-kill-ring + (kbd "cg") 'consult-ripgrep + (kbd "cF") 'consult-find + (kbd "co") 'consult-outline) + +(kbd "C-h") 'evil-window-left) +(kbd "C-j") 'evil-window-down) +(kbd "C-k") 'evil-window-up) +(kbd "C-l") 'evil-window-right) +(kbd "C-p") 'tab-previous) +(kbd "C-n") 'tab-next) +(kbd "tn") 'tab-new) +(kbd "tc") 'tab-close) +(kbd "tr") 'tab-rename) + +(evil-define-key 'normal 'global (kbd "q") 'avy-goto-word-0) + +(evil-define-key 'normal 'global (kbd "M-1") '(lambda () (interactive) (tab-bar-select-tab 1))) +(evil-define-key 'normal 'global (kbd "M-2") '(lambda () (interactive) (tab-bar-select-tab 2))) +(evil-define-key 'normal 'global (kbd "M-3") '(lambda () (interactive) (tab-bar-select-tab 3))) +(evil-define-key 'normal 'global (kbd "M-4") '(lambda () (interactive) (tab-bar-select-tab 4))) +(evil-define-key 'normal 'global (kbd "M-5") '(lambda () (interactive) (tab-bar-select-tab 5))) +(evil-define-key 'normal 'global (kbd "M-6") '(lambda () (interactive) (tab-bar-select-tab 6))) +(evil-define-key 'normal 'global (kbd "M-7") '(lambda () (interactive) (tab-bar-select-tab 7))) +(evil-define-key 'normal 'global (kbd "M-8") '(lambda () (interactive) (tab-bar-select-tab 8))) +(evil-define-key 'normal 'global (kbd "M-9") '(lambda () (interactive) (tab-bar-select-tab 9))) +;; (define-prefix-command 'evil-consult-map) +;; (define-key evil-consult-map "b" 'evil-window-bottom-right) +;; (define-key evil-consult-map "c" 'evil-window-delete) + +;; (define-key evil-normal-state-map "," 'evil-consult-map) + +(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 ** Buffers #+begin_src emacs-lisp (defun joe/kill-this-buffer-or-popup () @@ -434,39 +584,6 @@ The theme of `C-x 4` bindings is that they operate on other windows, so this fun (global-set-key (kbd "C-S-v") #'joe/smooth-scroll-short-down) (global-set-key (kbd "M-S-v") #'joe/smooth-scroll-short-up) -#+end_src -** Org Mode - -#+begin_src emacs-lisp -(straight-use-package 'org-bullets) - -(defun joe/org-init () - (setq org-todo-keywords '((sequence "TODO" "IN-PROGRESS" "|" "DONE" "BACKLOG"))) - (setq org-agenda-files '("~/todo.org")) - - (org-babel-do-load-languages - 'org-babel-load-languages - '((emacs-lisp . t) - (makefile . t) - (shell . t))) - - (require 'org-tempo) - (add-to-list 'org-structure-template-alist '("el" . "src emacs-lisp")) - (setq org-edit-src-content-indentation 0)) -(with-eval-after-load 'org (joe/org-init)) - -(setq org-blank-before-new-entry - '((heading . nil) - (plain-list-item . nil))) -(setq org-cycle-separator-lines 1) -(setq org-hide-emphasis-markers t) -(setq org-src-window-setup 'current-window) - -(defun joe/org-hook () - (local-set-key (kbd "C-. C-i") 'consult-org-heading) - (org-bullets-mode) - (org-indent-mode)) -(add-hook 'org-mode-hook 'joe/org-hook) #+end_src ** VEMCO @@ -613,6 +730,99 @@ targets." ;; (global-set-key (kbd "C-s") 'swiper-thing-at-point) +#+end_src +** Dirvish/Dired +#+begin_src emacs-lisp +(straight-use-package 'dirvish) +(with-eval-after-load 'dirvish + (dirvish-override-dired-mode) + (setq delete-by-moving-to-trash t) + (setq dired-dwim-target t) + (setq dirvish-reuse-session nil) + + (dirvish-define-preview exa (file) + "Use `exa' to generate directory preview." + :require ("exa") ; tell Dirvish to check if we have the executable + (when (file-directory-p file) ; we only interest in directories here + `(shell . ("exa" "--icons" "--color=always" "--no-user" "-al" "--group-directories-first" ,file)))) + (add-to-list 'dirvish-preview-dispatchers 'exa) + + (setq dired-listing-switches "-l --sort=version --almost-all --human-readable --time-style=long-iso --group-directories-first --no-group") + (setq dirvish-preview-dispatchers (cl-substitute 'pdf-preface 'pdf dirvish-preview-dispatchers)) + (setq dirvish-attributes '(all-the-icons file-size collapse subtree-state)) + + (defun joe/dirvish-find-directory (dir) + (interactive "FDirvish Directory:") + (dirvish-dwim dir)) + + (setq dirvish-quick-access-entries + '(("h" "~/" "Home") + ("d" "~/Downloads/" "Downloads") + ("D" "~/Documents/" "Documents") + ("b" "~/Documents/Books/" "Books") + ("p" "~/Development/" "Dev") + ("r" "~/Repositories" "Repos") + ("B" "~/pCloudDrive/" "pCloud"))) + + (evil-define-key 'normal dirvish-mode-map + (kbd "C-c f") #'dirvish-fd + (kbd "a") #'dirvish-quick-access + (kbd ".") #'dired-create-empty-file + (kbd "f") #'dirvish-file-info-menu + (kbd "y") #'dirvish-yank-menu + (kbd "h") #'dired-up-directory + (kbd "l") #'dired-find-file + (kbd "s") #'dirvish-quicksort + (kbd "v") #'dirvish-vc-menu + (kbd "q") #'dirvish-quit + (kbd "L") #'dirvish-history-go-forward + (kbd "H") #'dirvish-history-go-backward + (kbd "TAB") #'dirvish-subtree-toggle + (kbd "M-n") #'dirvish-narrow + (kbd "M-l") #'dirvish-ls-switches-menu + (kbd "M-m") #'dirvish-mark-menu + (kbd "M-t") #'dirvish-layout-toggle + (kbd "M-s") #'dirvish-setup-menu + (kbd "M-e") #'dirvish-emerge-menu + (kbd "M-j") #'dirvish-fd-jump)) + +(evil-global-set-key 'normal (kbd "-") #'dirvish-dwim) +(global-set-key (kbd "C-x d") #'dirvish-dwim) +(global-set-key (kbd "C-x C-d") #'joe/dirvish-find-directory) + +#+end_src +** Org Mode + +#+begin_src emacs-lisp +(straight-use-package 'org-bullets) + +(defun joe/org-init () + (setq org-todo-keywords '((sequence "TODO" "IN-PROGRESS" "|" "DONE" "BACKLOG"))) + (setq org-agenda-files '("~/todo.org")) + + (org-babel-do-load-languages + 'org-babel-load-languages + '((emacs-lisp . t) + (makefile . t) + (shell . t))) + + (require 'org-tempo) + (add-to-list 'org-structure-template-alist '("el" . "src emacs-lisp")) + (setq org-edit-src-content-indentation 0)) +(with-eval-after-load 'org (joe/org-init)) + +(setq org-blank-before-new-entry + '((heading . nil) + (plain-list-item . nil))) +(setq org-cycle-separator-lines 1) +(setq org-hide-emphasis-markers t) +(setq org-src-window-setup 'current-window) + +(defun joe/org-hook () + (local-set-key (kbd "C-. C-i") 'consult-org-heading) + (org-bullets-mode) + (org-indent-mode)) +(add-hook 'org-mode-hook 'joe/org-hook) #+end_src ** Avy @@ -637,64 +847,6 @@ targets." (global-set-key (kbd "C-h C-d") #'helpful-at-point) (global-set-key (kbd "C-h F") #'helpful-function) (global-set-key (kbd "C-h C") #'helpful-command) -#+end_src -** Dirvish/Dired -#+begin_src emacs-lisp -(straight-use-package 'dirvish) -(with-eval-after-load 'dirvish - (dirvish-override-dired-mode) - (setq delete-by-moving-to-trash t) - (setq dired-dwim-target t) - (setq dirvish-reuse-session nil) - - (dirvish-define-preview exa (file) - "Use `exa' to generate directory preview." - :require ("exa") ; tell Dirvish to check if we have the executable - (when (file-directory-p file) ; we only interest in directories here - `(shell . ("exa" "--icons" "--color=always" "--no-user" "-al" "--group-directories-first" ,file)))) - (add-to-list 'dirvish-preview-dispatchers 'exa) - - (setq dired-listing-switches "-l --sort=version --almost-all --human-readable --time-style=long-iso --group-directories-first --no-group") - (setq dirvish-preview-dispatchers (cl-substitute 'pdf-preface 'pdf dirvish-preview-dispatchers)) - (setq dirvish-attributes '(all-the-icons file-size collapse subtree-state)) - - (defun joe/dirvish-find-directory (dir) - (interactive "FDirvish Directory:") - (dirvish-dwim dir)) - - (setq dirvish-quick-access-entries - '(("h" "~/" "Home") - ("d" "~/Downloads/" "Downloads") - ("D" "~/Documents/" "Documents") - ("b" "~/Documents/Books/" "Books") - ("p" "~/Development/" "Dev") - ("r" "~/Repositories" "Repos") - ("B" "~/pCloudDrive/" "pCloud"))) - - (define-key dirvish-mode-map (kbd "C-c f") #'dirvish-fd) - (define-key dirvish-mode-map (kbd "a" ) #'dirvish-quick-access) - (define-key dirvish-mode-map (kbd "." ) #'dired-create-empty-file) - (define-key dirvish-mode-map (kbd "f" ) #'dirvish-file-info-menu) - (define-key dirvish-mode-map (kbd "y" ) #'dirvish-yank-menu) - (define-key dirvish-mode-map (kbd "N" ) #'dirvish-narrow) - (define-key dirvish-mode-map (kbd "^" ) #'dired-up-directory) - (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) - (define-key dirvish-mode-map (kbd "M-l" ) #'dirvish-ls-switches-menu) - (define-key dirvish-mode-map (kbd "M-m" ) #'dirvish-mark-menu) - (define-key dirvish-mode-map (kbd "M-t" ) #'dirvish-layout-toggle) - (define-key dirvish-mode-map (kbd "M-s" ) #'dirvish-setup-menu) - (define-key dirvish-mode-map (kbd "M-e" ) #'dirvish-emerge-menu) - (define-key dirvish-mode-map (kbd "M-j" ) #'dirvish-fd-jump)) - -(global-set-key (kbd "C-x d") #'dirvish-dwim) -(global-set-key (kbd "C-x C-d") #'joe/dirvish-find-directory) - #+end_src ** Terminals/Shells #+begin_src emacs-lisp @@ -750,146 +902,6 @@ startup. Reason we have to call this is so the vterm fucntion can call `vterm--i (setq undo-strong-limit 100663296) ;; 96mb. (setq undo-outer-limit 1006632960) ;; 960mb. #+end_src -** Text Editor - -Emacs is an great operating system, if only it had a good text editor... - -*** Text editing -#+begin_src emacs-lisp -(global-set-key (kbd "M-z") #'zap-up-to-char) -(global-set-key (kbd "M-Z") #'zap-to-char) - -(defun joe/duplicate-line-comment () - (interactive) - (let ((col (current-column))) - (duplicate-line) - (comment-line 1) - (move-to-column col))) - -(global-set-key (kbd "C-c d") 'duplicate-line) -(global-set-key (kbd "C-c C-;") 'joe/duplicate-line-comment) - -#+end_src -*** Hydra -#+begin_src emacs-lisp -(straight-use-package 'hydra) - -(defhydra hydra-navigate (global-map "") - "Window Navigation" - ("q" nil "quit") - ("d" joe/smooth-scroll-half-page-down "half page down") - ("u" joe/smooth-scroll-half-page-up "half page up") - ("e" joe/smooth-scroll-short-down "line down") - ("y" joe/smooth-scroll-short-up "line up") - ("n" next-line "line down") - ("p" previous-line "line up") - ("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 -*** Evil -#+begin_src emacs-lisp - -(setq evil-want-keybinding nil) -(setq evil-undo-system 'undo-fu) -(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") 'project-find-file) -(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 "ba") 'consult-buffer) -(evil-define-key 'normal 'global (kbd "bb") 'consult-project-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 "gg") 'magit-status) -(evil-define-key 'normal 'global (kbd "gc") 'magit-clone) -(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 "mr") 'joe/compile-run) -(evil-define-key 'normal 'global (kbd "mc") 'joe/compile-comp) -(evil-define-key 'normal 'global (kbd "ct") 'consult-theme) -(evil-define-key 'normal 'global (kbd "cl") 'consult-line) -(evil-define-key 'normal 'global (kbd "ci") 'consult-imenu) -(evil-define-key 'normal 'global (kbd "cy") 'consult-yank-from-kill-ring) -(evil-define-key 'normal 'global (kbd "cg") 'consult-ripgrep) -(evil-define-key 'normal 'global (kbd "cF") 'consult-find) -(evil-define-key 'normal 'global (kbd "co") 'consult-outline) - -(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 "C-p") 'tab-previous) -(evil-define-key 'normal 'global (kbd "C-n") 'tab-next) -(evil-define-key 'normal 'global (kbd "tn") 'tab-new) -(evil-define-key 'normal 'global (kbd "tc") 'tab-close) -(evil-define-key 'normal 'global (kbd "tr") 'tab-rename) - -(evil-define-key 'normal 'global (kbd "q") 'avy-goto-word-0) - -;; (define-prefix-command 'evil-consult-map) -;; (define-key evil-consult-map "b" 'evil-window-bottom-right) -;; (define-key evil-consult-map "c" 'evil-window-delete) - -;; (define-key evil-normal-state-map "," 'evil-consult-map) - -(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 ** Which Key #+begin_src emacs-lisp