   (define-key evil-normal-state-map (kbd ":") 'evil-repeat-find-char)
 
   ; Backtab = jump backwards
-  (define-key evil-normal-state-map (kbd "<backtab>") 'evil-jump-backward))
+  (define-key evil-normal-state-map (kbd "<backtab>") 'evil-jump-backward)
+
+  ; Preserve visual mode
+  (defun evil-shift-left-visual ()
+    (interactive)
+    (evil-shift-left (region-beginning) (region-end))
+    (evil-normal-state)
+    (evil-visual-restore))
+
+  (defun evil-shift-right-visual ()
+    (interactive)
+    (evil-shift-right (region-beginning) (region-end))
+    (evil-normal-state)
+      (evil-visual-restore))
+
+  (define-key evil-visual-state-map (kbd ">") 'evil-shift-right-visual)
+  (define-key evil-visual-state-map (kbd "<") 'evil-shift-left-visual))
 
 (pkg 'evil-leader
   (global-evil-leader-mode)

; Packages
(require 'package) ; {{{
  ; Define repos
  (add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t)

  ; Activate packages
  (package-initialize)

  ; Fetch packages
  (or (file-exists-p package-user-dir) (package-refresh-contents))

  ; Helper to install and require
  (defun pkg (p &rest body)
    (unless (require p nil t)
      (package-install p)
      (require p))
    body)
; }}}

(pkg 'mouse
  (xterm-mouse-mode t)


; Aliases
(defalias 'yes-or-no-p 'y-or-n-p)

; Settings
(let
