tvl-depot/configs/shared/emacs/.emacs.d/wpc/packages/wpc-keybindings.el
William Carroll f7b3e0a7a9 Drop OSX support; support desktop, laptop, cloudtop
Dropping support for OSX. Moving forward these dotfiles will depend on Linux
systems. Furthermore, since I'm support a ~/bin, the machines that consume these
dotfiles depend on i386 architectures. Linux and i386 are two dependencies that
I'm okay with since the leverage this assumption provides, makes their existence
tolerable.

There is some Google leakage herein, which includes aliases, functions, and
mentions of cloudtop. For now, this is okay. I may break the Google specific
code into its own repository, but for now, this is less maintenance.

This also introduces a ~/.profile instead of erroneously defining environment
variables in my zshrc file, which was unadvised.

This is a large commit and also introduces new aliases, variables, functions
that I accumulated over the past week or so while migrating away from OSX and
onto my new setup. Hopefully in the future I'll be more precise with my commits.
2019-03-18 14:14:26 +00:00

138 lines
4.3 KiB
EmacsLisp

;;; keybindings.el --- My Evil preferences -*- lexical-binding: t -*-
;; Author: William Carroll <wpcarro@gmail.com>
;;; Commentary:
;; This module hosts my Evil preferences
;;
;; Wish List:
;; - drop support for `evil-leader' library in favor of `general.el'
;; - restore support for concise (n <kbd> <function>) instead of `general-mmap'
;; - restore support for `general-unbind'
;;; Code:
(use-package evil
:init
(setq evil-want-integration nil)
(general-evil-setup)
:config
(general-mmap
:keymaps 'override
"RET" #'evil-goto-line
"H" #'evil-first-non-blank
"L" #'evil-end-of-line
"-" #'dired-jump
"sl" #'wpc/evil-window-vsplit-right
"sh" #'evil-window-vsplit
"sk" #'evil-window-split
"sj" #'wpc/evil-window-split-down)
(general-nmap
:keymaps 'override
"gd" #'xref-find-definitions)
(general-unbind 'motion "M-." "C-p")
(general-unbind 'normal "s" "M-.")
(general-unbind 'insert "C-d" "C-a" "C-e" "C-n" "C-p" "C-k")
(setq evil-symbol-word-search t)
(evil-mode 1))
;; evil keybindings
(use-package evil-collection
:after (evil)
:config
(evil-collection-init))
;; expose a leader key
(use-package evil-leader
:after (evil counsel)
:config
(global-evil-leader-mode)
(evil-leader/set-leader "<SPC>")
;; global
(evil-leader/set-key
"i" #'counsel-semantic-or-imenu
"j" #'jump-to-register
"h" #'help
"a" #'wpc/toggle-terminal
"p" #'flycheck-previous-error
"P" #'counsel-git-grep
"f" #'wpc/find-file
"n" #'flycheck-next-error
"N" #'smerge-next
"P" #'smerge-prev
"b" #'ivy-switch-buffer
"gs" #'magit-status
"es" #'wpc/create-snippet
"ev" (lambda () (interactive) (wpc/find-file-split "~/.config/nvim/init.vim"))
"ee" (lambda () (interactive) (wpc/find-file-split "~/.emacs.d/init.el"))
"ez" (lambda () (interactive) (wpc/find-file-split "~/.zshrc"))
"ea" (lambda () (interactive) (wpc/find-file-split "~/aliases.zsh"))
"ef" (lambda () (interactive) (wpc/find-file-split "~/functions.zsh"))
"el" (lambda () (interactive) (wpc/find-file-split "~/variables.zsh"))
"ex" (lambda () (interactive) (wpc/find-file-split "~/.Xresources"))
"ei" (lambda () (interactive) (wpc/find-file-split "~/.config/i3/config"))
"em" (lambda () (interactive) (wpc/find-file-split "~/.tmux.conf"))
"B" #'magit-blame
"w" #'save-buffer
"x" #'evil-save-and-close
"W" #'save-all-buffers
"r" #'wpc/evil-replace-under-point
))
;; create comments easily
(use-package evil-commentary
:after (evil)
:config
(evil-commentary-mode))
;; evil surround
(use-package evil-surround
:after (evil)
:config
(global-evil-surround-mode 1))
;; Custom minor mode that ensures that my kbds are available no matter which major
;; or minor modes are active.
(add-hook 'after-load-functions #'ensure-william-carroll-kbds)
(defun ensure-william-carroll-kbds (_ignore)
"Try to ensure that my keybindings retain priority over other minor modes."
(unless (eq (caar minor-mode-map-alist) 'wpc/kbds-minor-mode)
(let ((mykbds (assq 'wpc/kbds-minor-mode minor-mode-map-alist)))
(assq-delete-all 'wpc/kbds-minor-mode minor-mode-map-alist)
(add-to-list 'minor-mode-map-alist mykbds))))
(defvar wpc/kbds
(let ((map (make-sparse-keymap)))
(bind-keys :map map
("M-q" . delete-window)
("C-x C-;" . comment-or-uncomment-region)
("C-x h" . help)
("<s-return>" . toggle-frame-fullscreen)
("<down-mouse-1>" . ffap-other-window)
("M-h" . wpc/tmux-emacs-windmove-left)
("M-l" . wpc/tmux-emacs-windmove-right)
("M-k" . wpc/tmux-emacs-windmove-up)
("M-j" . wpc/tmux-emacs-windmove-down)
("M--" . wpc/evil-window-split-down)
("M-\\" . wpc/evil-window-vsplit-right)
("M-q" . delete-window))
map)
"William Carroll's keybindings that should have the highest precedence.")
(define-minor-mode wpc/kbds-minor-mode
"A minor mode so that my key settings override annoying major modes."
:init-value t
:lighter " wpc/kbds"
:keymap wpc/kbds)
;; allow jk to escape
(use-package key-chord
:after (evil)
:config
(key-chord-mode 1)
(key-chord-define evil-insert-state-map "jk" 'evil-normal-state))
(provide 'wpc-keybindings)
;;; wpc-keybindings.el ends here