|
@@ -1,11 +1,11 @@
|
|
;;; use-package example:
|
|
;;; use-package example:
|
|
-; (use-package foo
|
|
|
|
-; :init ; Runs before loading the package. WIll always run, even if foo isn't on this system.
|
|
|
|
-; :config ; Runs after.
|
|
|
|
-; :bind (("M-s O" . action)
|
|
|
|
-; ("" . some-other-action))
|
|
|
|
-; :commands foo-mode ; Creates autoloads for commands: defers loading until called.
|
|
|
|
-; )
|
|
|
|
|
|
+;; (use-package foo
|
|
|
|
+;; :init ; Runs before loading the package. WIll always run, even if foo isn't on this system.
|
|
|
|
+;; :config ; Runs after.
|
|
|
|
+;; :bind (("M-s O" . action)
|
|
|
|
+;; ("" . some-other-action))
|
|
|
|
+;; :commands foo-mode ; Creates autoloads for commands: defers loading until called.
|
|
|
|
+;; )
|
|
|
|
|
|
;; Package installation
|
|
;; Package installation
|
|
|
|
|
|
@@ -35,68 +35,68 @@
|
|
(defun ensure-package-installed (prompt &rest packages)
|
|
(defun ensure-package-installed (prompt &rest packages)
|
|
(mapcar
|
|
(mapcar
|
|
(lambda (package)
|
|
(lambda (package)
|
|
- (if (package-installed-p package)
|
|
|
|
- nil
|
|
|
|
- (if (or prompt (y-or-n-p (format "Package %s is missing. Install it? " package)))
|
|
|
|
- ;; If this is the 1st install this session, update before install
|
|
|
|
- (cond ((eq packages-installed-this-session 0)
|
|
|
|
- (package-refresh-contents)
|
|
|
|
- (setq packages-installed-this-session 1)
|
|
|
|
- (package-install package))
|
|
|
|
- (t (package-install package))
|
|
|
|
- nil)
|
|
|
|
- package)))
|
|
|
|
|
|
+ (if (package-installed-p package)
|
|
|
|
+ nil
|
|
|
|
+ (if (or prompt (y-or-n-p (format "Package %s is missing. Install it? " package)))
|
|
|
|
+ ;; If this is the 1st install this session, update before install
|
|
|
|
+ (cond ((eq packages-installed-this-session 0)
|
|
|
|
+ (package-refresh-contents)
|
|
|
|
+ (setq packages-installed-this-session 1)
|
|
|
|
+ (package-install package))
|
|
|
|
+ (t (package-install package))
|
|
|
|
+ nil)
|
|
|
|
+ package)))
|
|
packages))
|
|
packages))
|
|
|
|
|
|
;; List of packages to install on all systems
|
|
;; List of packages to install on all systems
|
|
(setq required-packages
|
|
(setq required-packages
|
|
'(
|
|
'(
|
|
- use-package
|
|
|
|
- bind-key
|
|
|
|
- iedit
|
|
|
|
- magit
|
|
|
|
- evil-magit
|
|
|
|
- magithub
|
|
|
|
- undo-tree
|
|
|
|
- evil
|
|
|
|
- evil-leader
|
|
|
|
- powerline-evil
|
|
|
|
- monokai-theme
|
|
|
|
- challenger-deep-theme
|
|
|
|
- linum-relative
|
|
|
|
- multi-term
|
|
|
|
- neotree
|
|
|
|
- evil-numbers
|
|
|
|
- editorconfig
|
|
|
|
- company
|
|
|
|
- ivy
|
|
|
|
- flx
|
|
|
|
- flycheck
|
|
|
|
- flycheck-pos-tip
|
|
|
|
- evil-surround
|
|
|
|
- diminish
|
|
|
|
- dtrt-indent
|
|
|
|
- undohist
|
|
|
|
- evil-ediff
|
|
|
|
|
|
+ use-package
|
|
|
|
+ bind-key
|
|
|
|
+ iedit
|
|
|
|
+ magit
|
|
|
|
+ evil-magit
|
|
|
|
+ magithub
|
|
|
|
+ undo-tree
|
|
|
|
+ evil
|
|
|
|
+ evil-leader
|
|
|
|
+ powerline-evil
|
|
|
|
+ monokai-theme
|
|
|
|
+ challenger-deep-theme
|
|
|
|
+ linum-relative
|
|
|
|
+ multi-term
|
|
|
|
+ neotree
|
|
|
|
+ evil-numbers
|
|
|
|
+ editorconfig
|
|
|
|
+ company
|
|
|
|
+ ivy
|
|
|
|
+ flx
|
|
|
|
+ flycheck
|
|
|
|
+ flycheck-pos-tip
|
|
|
|
+ evil-surround
|
|
|
|
+ diminish
|
|
|
|
+ dtrt-indent
|
|
|
|
+ undohist
|
|
|
|
+ evil-ediff
|
|
rainbow-delimiters
|
|
rainbow-delimiters
|
|
rainbow-identifiers
|
|
rainbow-identifiers
|
|
rainbow-mode
|
|
rainbow-mode
|
|
- ))
|
|
|
|
|
|
+ ))
|
|
|
|
|
|
;; List of optional packages
|
|
;; List of optional packages
|
|
(setq optional-packages
|
|
(setq optional-packages
|
|
'(
|
|
'(
|
|
- flymd
|
|
|
|
- markdown-mode
|
|
|
|
- latex-preview-pane
|
|
|
|
- tide
|
|
|
|
- web-mode
|
|
|
|
- racket-mode
|
|
|
|
- fuzzy
|
|
|
|
- general
|
|
|
|
- haskell-mode
|
|
|
|
- emojify
|
|
|
|
- ))
|
|
|
|
|
|
+ flymd
|
|
|
|
+ markdown-mode
|
|
|
|
+ latex-preview-pane
|
|
|
|
+ tide
|
|
|
|
+ web-mode
|
|
|
|
+ racket-mode
|
|
|
|
+ fuzzy
|
|
|
|
+ general
|
|
|
|
+ haskell-mode
|
|
|
|
+ emojify
|
|
|
|
+ ))
|
|
|
|
|
|
|
|
|
|
;; Check that all packages are installed
|
|
;; Check that all packages are installed
|
|
@@ -104,7 +104,7 @@
|
|
|
|
|
|
;; Declare function for optional packages
|
|
;; Declare function for optional packages
|
|
(defun optional-packages-install ()
|
|
(defun optional-packages-install ()
|
|
- (interactive)
|
|
|
|
|
|
+ (interactive)
|
|
(apply 'ensure-package-installed nil optional-packages))
|
|
(apply 'ensure-package-installed nil optional-packages))
|
|
|
|
|
|
|
|
|
|
@@ -112,7 +112,7 @@
|
|
(diminish 'visual-line-mode)
|
|
(diminish 'visual-line-mode)
|
|
(diminish 'abbrev-mode)
|
|
(diminish 'abbrev-mode)
|
|
|
|
|
|
-;;; Flyspell
|
|
|
|
|
|
+;;; Flyspell
|
|
|
|
|
|
;; map ]s and [s to next and previously wrong word
|
|
;; map ]s and [s to next and previously wrong word
|
|
|
|
|
|
@@ -159,7 +159,7 @@
|
|
|
|
|
|
;; Add folds to programming modes
|
|
;; Add folds to programming modes
|
|
(add-hook 'prog-mode-hook
|
|
(add-hook 'prog-mode-hook
|
|
- 'hs-minor-mode)
|
|
|
|
|
|
+ 'hs-minor-mode)
|
|
(add-hook 'hs-minor-mode-hook
|
|
(add-hook 'hs-minor-mode-hook
|
|
(lambda ()
|
|
(lambda ()
|
|
(diminish 'hs-minor-mode)))
|
|
(diminish 'hs-minor-mode)))
|
|
@@ -168,10 +168,10 @@
|
|
:diminish auto-revert-mode)
|
|
:diminish auto-revert-mode)
|
|
|
|
|
|
(use-package recentf
|
|
(use-package recentf
|
|
- :config
|
|
|
|
|
|
+ :config
|
|
(recentf-mode 1)
|
|
(recentf-mode 1)
|
|
(setq recentf-max-saved-items 200
|
|
(setq recentf-max-saved-items 200
|
|
- recentf-max-menu-items 15))
|
|
|
|
|
|
+ recentf-max-menu-items 15))
|
|
|
|
|
|
|
|
|
|
(use-package evil
|
|
(use-package evil
|
|
@@ -194,14 +194,34 @@
|
|
(define-key evil-window-map (kbd "q") 'delete-window)
|
|
(define-key evil-window-map (kbd "q") 'delete-window)
|
|
(define-key evil-window-map (kbd "C-q") 'delete-window)
|
|
(define-key evil-window-map (kbd "C-q") 'delete-window)
|
|
|
|
|
|
- ; Add window recovery to C-w
|
|
|
|
|
|
+ ;; Add window recovery to C-w
|
|
(define-key evil-window-map (kbd "u") 'winner-undo)
|
|
(define-key evil-window-map (kbd "u") 'winner-undo)
|
|
(define-key evil-window-map (kbd "U") 'winner-redo)
|
|
(define-key evil-window-map (kbd "U") 'winner-redo)
|
|
|
|
|
|
- ; Don't echo evil's states
|
|
|
|
|
|
+ ;; Don't echo evil's states
|
|
(setq evil-insert-state-message nil)
|
|
(setq evil-insert-state-message nil)
|
|
(setq evil-visual-state-message nil)
|
|
(setq evil-visual-state-message nil)
|
|
|
|
|
|
|
|
+ ;; Little words (camelCase)
|
|
|
|
+ (evil-define-motion evil-little-word (count)
|
|
|
|
+ :type exclusive
|
|
|
|
+ (let* ((case-fold-search nil)
|
|
|
|
+ (count (if count count 1)))
|
|
|
|
+ (while (> count 0)
|
|
|
|
+ (forward-char)
|
|
|
|
+ (search-forward-regexp "[_A-Z]\\|\\W" nil t)
|
|
|
|
+ (backward-char)
|
|
|
|
+ (decf count))))
|
|
|
|
+
|
|
|
|
+ ;; Don't litter registers with whitespace
|
|
|
|
+ (defun destroy-whitespace--evil-delete-around (func beg end type &optional reg yh)
|
|
|
|
+ (let ((clean-string (replace-regexp-in-string "[ \t\n]" "" (buffer-substring beg end))))
|
|
|
|
+ (if (equal "" clean-string)
|
|
|
|
+ (apply func beg end type ?_ yh)
|
|
|
|
+ (apply func beg end type reg yh))))
|
|
|
|
+
|
|
|
|
+ (advice-add 'evil-delete :around #'destroy-whitespace--evil-delete-around)
|
|
|
|
+
|
|
;; eval the last sexp while in normal mode (include the character the cursor is currently on)
|
|
;; eval the last sexp while in normal mode (include the character the cursor is currently on)
|
|
(defun evil-eval-last-sexp ()
|
|
(defun evil-eval-last-sexp ()
|
|
(interactive)
|
|
(interactive)
|
|
@@ -218,31 +238,32 @@
|
|
(interactive "@")
|
|
(interactive "@")
|
|
(set-window-hscroll (selected-window) (- (current-column) (window-width) -1)))
|
|
(set-window-hscroll (selected-window) (- (current-column) (window-width) -1)))
|
|
|
|
|
|
- ;; Horizontal scrolling
|
|
|
|
- (setq auto-hscroll-mode 't)
|
|
|
|
- (setq hscroll-margin 0
|
|
|
|
- hscroll-step 1)
|
|
|
|
|
|
+ ;; Horizontal scrolling
|
|
|
|
+ (setq auto-hscroll-mode 't)
|
|
|
|
+ (setq hscroll-margin 0
|
|
|
|
+ hscroll-step 1)
|
|
|
|
|
|
:bind (:map evil-normal-state-map
|
|
:bind (:map evil-normal-state-map
|
|
- ("zs" . hscroll-cursor-left)
|
|
|
|
- ("ze" . hscroll-cursor-right)
|
|
|
|
- ("[s" . flyspell-goto-previous-error)
|
|
|
|
- ("]s" . flyspell-goto-next-error)
|
|
|
|
- ("\C-x \C-e" . evil-eval-last-sexp)
|
|
|
|
|
|
+ ("zs" . hscroll-cursor-left)
|
|
|
|
+ ("ze" . hscroll-cursor-right)
|
|
|
|
+ ("[s" . flyspell-goto-previous-error)
|
|
|
|
+ ("]s" . flyspell-goto-next-error)
|
|
|
|
+ ("\C-x \C-e" . evil-eval-last-sexp)
|
|
:map Info-mode-map
|
|
:map Info-mode-map
|
|
- ("g" . nil)
|
|
|
|
- ("n" . nil)
|
|
|
|
- ("p" . nil)
|
|
|
|
|
|
+ ("g" . nil)
|
|
|
|
+ ("n" . nil)
|
|
|
|
+ ("p" . nil)
|
|
:map evil-window-map
|
|
:map evil-window-map
|
|
- ("q" . delete-window)
|
|
|
|
- ("C-q" . delete-window)))
|
|
|
|
-
|
|
|
|
|
|
+ ("q" . delete-window)
|
|
|
|
+ ("C-q" . delete-window)
|
|
|
|
+ :map evil-operator-state-map
|
|
|
|
+ ("lw" . evil-little-word)))
|
|
|
|
|
|
|
|
|
|
(use-package evil-numbers
|
|
(use-package evil-numbers
|
|
;; Increment and decrement (evil-numbers)
|
|
;; Increment and decrement (evil-numbers)
|
|
:bind (("C-c C-a" . evil-numbers/inc-at-pt)
|
|
:bind (("C-c C-a" . evil-numbers/inc-at-pt)
|
|
- ("C-c C-d" . evil-numbers/dec-at-pt)))
|
|
|
|
|
|
+ ("C-c C-d" . evil-numbers/dec-at-pt)))
|
|
|
|
|
|
|
|
|
|
(use-package undo-tree
|
|
(use-package undo-tree
|
|
@@ -283,14 +304,14 @@
|
|
(linum-mode)
|
|
(linum-mode)
|
|
(linum-relative-global-mode)
|
|
(linum-relative-global-mode)
|
|
(defun linum-update-window-scale-fix (win)
|
|
(defun linum-update-window-scale-fix (win)
|
|
- "fix linum for scaled text"
|
|
|
|
- (set-window-margins win
|
|
|
|
- (ceiling (* (if (boundp 'text-scale-mode-step)
|
|
|
|
- (expt text-scale-mode-step
|
|
|
|
- text-scale-mode-amount) 1)
|
|
|
|
- (if (car (window-margins))
|
|
|
|
- (car (window-margins)) 1)
|
|
|
|
- ))))
|
|
|
|
|
|
+ "fix linum for scaled text"
|
|
|
|
+ (set-window-margins win
|
|
|
|
+ (ceiling (* (if (boundp 'text-scale-mode-step)
|
|
|
|
+ (expt text-scale-mode-step
|
|
|
|
+ text-scale-mode-amount) 1)
|
|
|
|
+ (if (car (window-margins))
|
|
|
|
+ (car (window-margins)) 1)
|
|
|
|
+ ))))
|
|
(advice-add #'linum-update-window :after #'linum-update-window-scale-fix))
|
|
(advice-add #'linum-update-window :after #'linum-update-window-scale-fix))
|
|
|
|
|
|
|
|
|
|
@@ -306,41 +327,41 @@
|
|
(evil-leader/set-leader "<SPC>")
|
|
(evil-leader/set-leader "<SPC>")
|
|
|
|
|
|
(evil-leader/set-key
|
|
(evil-leader/set-key
|
|
- "d" 'diff-buffer-with-file
|
|
|
|
- ;"b" 'buffer-menu
|
|
|
|
- "v" 'ivy-switch-buffer
|
|
|
|
- "b" 'buffer-menu
|
|
|
|
- ;"f" '(lambda () (interactive) (dired '"./"))
|
|
|
|
- "f" 'neotree-toggle
|
|
|
|
- "u" 'undo-tree-visualize
|
|
|
|
- ;"m" 'recentf-open-files
|
|
|
|
- "m" 'ivy-switch-buffer ; includes recentf data
|
|
|
|
- "l" 'auto-fill-mode
|
|
|
|
- "s" '(lambda ()
|
|
|
|
- (interactive)
|
|
|
|
- ;; use flyspell-mode when in text buffers, otherwise use flyspell-prog-mode
|
|
|
|
- (let* ((current-mode
|
|
|
|
- (buffer-local-value 'major-mode (current-buffer)))
|
|
|
|
- (flyspell-mode-to-call
|
|
|
|
- (if (or (string= current-mode "text-mode") (string= current-mode "markdown-mode"))
|
|
|
|
- 'flyspell-mode
|
|
|
|
- 'flyspell-prog-mode)))
|
|
|
|
- ;; toggle the current flyspell mode, and eval the buffer if we turned it on
|
|
|
|
- (if flyspell-mode
|
|
|
|
- (funcall 'flyspell-mode '0)
|
|
|
|
- (funcall flyspell-mode-to-call)
|
|
|
|
- (flyspell-buffer))))
|
|
|
|
- ;"a" 'auto-complete-mode
|
|
|
|
- "a" 'company-mode
|
|
|
|
- "g" '(lambda () (interactive) (evil-magit-init) (magit-status))
|
|
|
|
- "M-g" 'magit-dispatch-popup
|
|
|
|
- "c" 'flycheck-mode
|
|
|
|
- ))
|
|
|
|
|
|
+ "d" 'diff-buffer-with-file
|
|
|
|
+ ;"b" 'buffer-menu
|
|
|
|
+ "v" 'ivy-switch-buffer
|
|
|
|
+ "b" 'buffer-menu
|
|
|
|
+ ;"f" '(lambda () (interactive) (dired '"./"))
|
|
|
|
+ "f" 'neotree-toggle
|
|
|
|
+ "u" 'undo-tree-visualize
|
|
|
|
+ ;"m" 'recentf-open-files
|
|
|
|
+ "m" 'ivy-switch-buffer ; includes recentf data
|
|
|
|
+ "l" 'auto-fill-mode
|
|
|
|
+ "s" '(lambda ()
|
|
|
|
+ (interactive)
|
|
|
|
+ ;; use flyspell-mode when in text buffers, otherwise use flyspell-prog-mode
|
|
|
|
+ (let* ((current-mode
|
|
|
|
+ (buffer-local-value 'major-mode (current-buffer)))
|
|
|
|
+ (flyspell-mode-to-call
|
|
|
|
+ (if (or (string= current-mode "text-mode") (string= current-mode "markdown-mode"))
|
|
|
|
+ 'flyspell-mode
|
|
|
|
+ 'flyspell-prog-mode)))
|
|
|
|
+ ;; toggle the current flyspell mode, and eval the buffer if we turned it on
|
|
|
|
+ (if flyspell-mode
|
|
|
|
+ (funcall 'flyspell-mode '0)
|
|
|
|
+ (funcall flyspell-mode-to-call)
|
|
|
|
+ (flyspell-buffer))))
|
|
|
|
+ ;"a" 'auto-complete-mode
|
|
|
|
+ "a" 'company-mode
|
|
|
|
+ "g" '(lambda () (interactive) (evil-magit-init) (magit-status))
|
|
|
|
+ "M-g" 'magit-dispatch-popup
|
|
|
|
+ "c" 'flycheck-mode
|
|
|
|
+ ))
|
|
|
|
|
|
(if (not (eq system-type 'windows-nt))
|
|
(if (not (eq system-type 'windows-nt))
|
|
(lambda ()
|
|
(lambda ()
|
|
((use-package magit
|
|
((use-package magit
|
|
- :diminish magit-auto-revert-mode)
|
|
|
|
|
|
+ :diminish magit-auto-revert-mode)
|
|
|
|
|
|
(use-package evil-magit)
|
|
(use-package evil-magit)
|
|
|
|
|
|
@@ -351,7 +372,7 @@
|
|
|
|
|
|
(use-package neotree
|
|
(use-package neotree
|
|
:config
|
|
:config
|
|
- ; Set vi-like bindings in neotree-mode that don't conflict with evil
|
|
|
|
|
|
+ ;; Set vi-like bindings in neotree-mode that don't conflict with evil
|
|
(evil-define-key 'normal neotree-mode-map (kbd "TAB") 'neotree-enter)
|
|
(evil-define-key 'normal neotree-mode-map (kbd "TAB") 'neotree-enter)
|
|
(evil-define-key 'normal neotree-mode-map (kbd "SPC") 'neotree-enter)
|
|
(evil-define-key 'normal neotree-mode-map (kbd "SPC") 'neotree-enter)
|
|
(evil-define-key 'normal neotree-mode-map (kbd "q") 'neotree-hide)
|
|
(evil-define-key 'normal neotree-mode-map (kbd "q") 'neotree-hide)
|
|
@@ -359,15 +380,14 @@
|
|
(evil-define-key 'normal neotree-mode-map (kbd "h") 'neotree-hidden-file-toggle)
|
|
(evil-define-key 'normal neotree-mode-map (kbd "h") 'neotree-hidden-file-toggle)
|
|
(evil-define-key 'normal neotree-mode-map (kbd "r") 'neotree-refresh)
|
|
(evil-define-key 'normal neotree-mode-map (kbd "r") 'neotree-refresh)
|
|
|
|
|
|
- ;Every time when the neotree window is opened, let it find current file and jump to node.
|
|
|
|
|
|
+ ;; Every time when the neotree window is opened, let it find current file and jump to node.
|
|
(setq neo-smart-open t)
|
|
(setq neo-smart-open t)
|
|
|
|
|
|
- ; List of files to hide
|
|
|
|
|
|
+ ; List of files to hide
|
|
(setq neo-hidden-regexp-list '("^\\." "\\.pyc$" "~$" "^#.*#$" "\\.elc$" "\\.class")))
|
|
(setq neo-hidden-regexp-list '("^\\." "\\.pyc$" "~$" "^#.*#$" "\\.elc$" "\\.class")))
|
|
|
|
|
|
|
|
|
|
;; tide/typescript
|
|
;; tide/typescript
|
|
-
|
|
|
|
(setq typescript-indent-level 2)
|
|
(setq typescript-indent-level 2)
|
|
|
|
|
|
;; JavaScript
|
|
;; JavaScript
|
|
@@ -378,7 +398,7 @@
|
|
:config
|
|
:config
|
|
(add-to-list 'auto-mode-alist '("\\.scm\\'" . racket-mode))
|
|
(add-to-list 'auto-mode-alist '("\\.scm\\'" . racket-mode))
|
|
|
|
|
|
- ; C-w prefix in racket-REPL
|
|
|
|
|
|
+ ; C-w prefix in racket-REPL
|
|
(add-hook 'racket-repl-mode-hook 'racket-repl-evil-hook)
|
|
(add-hook 'racket-repl-mode-hook 'racket-repl-evil-hook)
|
|
|
|
|
|
(defun racket-repl-evil-hook ()
|
|
(defun racket-repl-evil-hook ()
|
|
@@ -434,7 +454,7 @@
|
|
|
|
|
|
(use-package dtrt-indent
|
|
(use-package dtrt-indent
|
|
:diminish dtrt-indent-mode
|
|
:diminish dtrt-indent-mode
|
|
- :config
|
|
|
|
|
|
+ :config
|
|
(dtrt-indent-mode 1))
|
|
(dtrt-indent-mode 1))
|
|
|
|
|
|
|
|
|