;;; 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