.emacs.d/lisp/init-general.el

166 lines
6.3 KiB
EmacsLisp
Raw Permalink Normal View History

2024-09-06 11:42:11 +02:00
;;; init-general.el --- config for general keybindings
;;; Commentary:
;;; Code:
(require-package 'general)
(general-evil-setup)
;; set up 'SPC' as the global leader key
(general-create-definer cr/leader-keys
:states '(normal insert visual emacs)
:keymaps 'override
:prefix "SPC" ;; set leader
:global-prefix "M-SPC") ;; access leader in insert mode
(cr/leader-keys
"SPC" '(counsel-M-x :wk "Counsel M-x")
"." '(find-file :wk "Find file"))
(cr/leader-keys
"b" '(:ignore t :wk "Bookmarks/Buffers")
"b b" '(switch-to-buffer :wk "Switch to buffer")
"b p" '(previous-buffer :wk "Switch to previous buffer")
"d d" '(dired :wk "Open dired")
"d f" '(dired-finish-edit :wk "Writable dired finish edit")
"d j" '(dired-jump :wk "Dired jump to current")
"d w" '(wdired-change-to-wdired-mode :wk "Writable dired"))
(cr/leader-keys
"e" '(:ignore t :wk "Ediff/Eshell/Eval/EWW")
"e b" '(eval-buffer :wk "Evaluate elisp in buffer")
"e d" '(eval-defun :wk "Evaluate defun containing or after point")
"e e" '(eval-expression :wk "Evaluate an elisp expression")
"e f" '(ediff-files :wk "Run ediff on a pair of files")
"e F" '(ediff-files3 :wk "Run ediff on three files")
"e h" '(counsel-esh-history :which-key "Eshell history")
"e l" '(eval-last-sexp :wk "Evaluate elisp expression before point")
"e r" '(eval-region :wk "Evaluate elisp in region"))
(cr/leader-keys
"f" '(:ignore t :wk "Files")
"f c" '((lambda () (interactive)
(find-file "~/.emacs.d/init.el"))
:wk "Open emacs init.el")
"f e" '((lambda () (interactive)
(dired "~/.emacs.d"))
:wk "Open user-emacs-directory in dired")
"f d" '(find-grep-dired :wk "Search for string in files in DIR")
"f g" '(counsel-grep-or-swiper :wk "Search for string current file")
"f j" '(counsel-file-jump :wk "Jump to a file below current directory")
"f l" '(counsel-locate :wk "Locate a file")
"f r" '(counsel-recentf :wk "Find recent files")
"f u" '(sudo-edit-find-file :wk "Sudo find file")
"f U" '(sudo-edit :wk "Sudo edit file"))
(cr/leader-keys
"g" '(:ignore t :wk "Git")
"g /" '(magit-displatch :wk "Magit dispatch")
"g ." '(magit-file-displatch :wk "Magit file dispatch")
"g b" '(magit-branch-checkout :wk "Switch branch")
"g c" '(:ignore t :wk "Create")
"g c b" '(magit-branch-and-checkout :wk "Create branch and checkout")
"g c c" '(magit-commit-create :wk "Create commit")
"g c f" '(magit-commit-fixup :wk "Create fixup commit")
"g C" '(magit-clone :wk "Clone repo")
"g f" '(:ignore t :wk "Find")
"g f c" '(magit-show-commit :wk "Show commit")
"g f f" '(magit-find-file :wk "Magit find file")
"g f g" '(magit-find-git-config-file :wk "Find gitconfig file")
"g F" '(magit-fetch :wk "Git fetch")
"g g" '(magit-status :wk "Magit status")
"g i" '(magit-init :wk "Initialize git repo")
"g l" '(magit-log-buffer-file :wk "Magit buffer log")
"g r" '(vc-revert :wk "Git revert file")
"g s" '(magit-stage-file :wk "Git stage file")
"g t" '(git-timemachine :wk "Git time machine")
"g u" '(magit-stage-file :wk "Git unstage file"))
(cr/leader-keys
"h" '(:ignore t :wk "Help")
"h a" '(counsel-apropos :wk "Apropos")
"h b" '(describe-bindings :wk "Describe bindings")
"h c" '(describe-char :wk "Describe character under cursor")
"h d" '(:ignore t :wk "Emacs documentation")
"h f" '(describe-function :wk "Describe function")
"h F" '(describe-face :wk "Describe face")
"h i" '(info :wk "Info")
"h k" '(describe-key :wk "Describe key")
"h l" '(view-lossage :wk "Display recent keystrokes and the commands run")
"h m" '(describe-mode :wk "Describe mode")
"h t" '(load-theme :wk "Load theme")
"h v" '(describe-variable :wk "Describe variable")
"h w" '(where-is :wk "Prints keybinding for command if set")
"h x" '(describe-command :wk "Display full documentation for command"))
(cr/leader-keys
"m" '(:ignore t :wk "Org")
"m a" '(org-agenda :wk "Org agenda")
"m e" '(org-export-dispatch :wk "Org export dispatch")
"m i" '(org-toggle-item :wk "Org toggle item")
"m t" '(org-todo :wk "Org todo")
"m B" '(org-babel-tangle :wk "Org babel tangle")
"m T" '(org-todo-list :wk "Org todo list"))
(cr/leader-keys
"m b" '(:ignore t :wk "Tables")
"m b -" '(org-table-insert-hline :wk "Insert hline in table"))
(cr/leader-keys
"m d" '(:ignore t :wk "Date/deadline")
"m d t" '(org-time-stamp :wk "Org time stamp"))
(cr/leader-keys
"o" '(:ignore t :wk "Open")
"o d" '(dashboard-open :wk "Dashboard")
"o e" '(elfeed :wk "Elfeed RSS")
"o f" '(make-frame :wk "Open buffer in new frame")
"o F" '(select-frame-by-name :wk "Select frame by name"))
;; projectile-command-map already has a ton of bindings
;; set for us, so no need to specify each individually.
(cr/leader-keys
"p" '(projectile-command-map :wk "Projectile"))
(cr/leader-keys
"s" '(:ignore t :wk "Search")
"s d" '(dictionary-search :wk "Search dictionary")
"s m" '(man :wk "Man pages")
"s t" '(tldr :wk "Lookup TLDR docs for a command"))
(cr/leader-keys
"t" '(:ignore t :wk "Toggle")
"t f" '(flycheck-mode :wk "Toggle flycheck")
"t l" '(display-line-numbers-mode :wk "Toggle line numbers")
"t o" '(org-mode :wk "Toggle org mode")
"t r" '(rainbow-mode :wk "Toggle rainbow mode")
"t t" '(visual-line-mode :wk "Toggle truncated lines")
"t v" '(vterm-toggle :wk "Toggle vterm")
"t u" '((lambda () (interactive) (load-file "~/.emacs.d/init.el")) :wk "Reload config"))
(cr/leader-keys
"w" '(:ignore t :wk "Windows/Words")
;; Window splits
"w c" '(evil-window-delete :wk "Close window")
"w n" '(evil-window-new :wk "New window")
"w s" '(evil-window-split :wk "Horizontal split window")
"w v" '(evil-window-vsplit :wk "Vertical split window")
;; Window motions
"w h" '(evil-window-left :wk "Window left")
"w j" '(evil-window-down :wk "Window down")
"w k" '(evil-window-up :wk "Window up")
"w l" '(evil-window-right :wk "Window right")
"w w" '(evil-window-next :wk "Goto next window")
;; Move Windows
"w H" '(buf-move-left :wk "Buffer move left")
"w J" '(buf-move-down :wk "Buffer move down")
"w K" '(buf-move-up :wk "Buffer move up")
"w L" '(buf-move-right :wk "Buffer move right")
;; Words
"w d" '(downcase-word :wk "Downcase word")
"w u" '(upcase-word :wk "Upcase word")
"w =" '(count-words :wk "Count words/lines for buffer"))
(provide 'init-general)
;;; end of file init-general.el