#+begin_src emacs-lisp
(require 'use-package)
-(if nil ; set to t when need to debug init
+(if nil ; set to t when need to debug init
(setq use-package-verbose t
use-package-expand-minimally nil
use-package-compute-statistics t
(setq body `(after! ,next ,@body)))
body)
((listp features)
- `(after! (:all ,@features) ,@body)))))
+ `(after! (:all ,@features) ,@body)))))
#+end_src
* Core
(auto-compile-on-load-mode)
(auto-compile-on-save-mode)
(setq auto-compile-display-buffer nil
- auto-compile-mode-line-counter t
- auto-compile-source-recreate-deletes-dest t
- auto-compile-toggle-deletes-nonlib-dest t
- auto-compile-update-autoloads t)
+ auto-compile-mode-line-counter t
+ auto-compile-source-recreate-deletes-dest t
+ auto-compile-toggle-deletes-nonlib-dest t
+ auto-compile-update-autoloads t)
(add-hook 'auto-compile-inhibit-compile-hook
'auto-compile-inhibit-compile-detached-git-head))
#+end_src
-*** [[https://github.com/noctuid/general.el][general]]
+*** [[https://github.com/Kungsgeten/ryo-modal][ryo-modal]]
#+begin_quote
Roll your own modal mode
#+end_quote
#+begin_src emacs-lisp
-(use-package general
- :demand t
- :config
- (general-evil-setup t)
-
- (general-override-mode)
-
- (general-create-definer
- ab--mode-leader-keys
- :keymaps 'override
- :states '(emacs normal visual motion insert)
- :non-normal-prefix "C-,"
- :prefix ",")
-
- (general-create-definer
- ab--leader-keys
- :keymaps 'override
- :states '(emacs normal visual motion insert)
- :non-normal-prefix "M-m"
- :prefix "SPC"))
-#+end_src
-
-*** evil
-
-#+begin_src emacs-lisp
-(use-package evil
- :demand t
- :hook (view-mode . evil-motion-state)
- :config (evil-mode 1))
-#+end_src
-
-#+begin_src emacs-lisp
-(use-package evil-escape
- :demand t
- :init
- (setq evil-escape-excluded-states '(normal visual multiedit emacs motion)
- evil-escape-excluded-major-modes '(neotree-mode)
- evil-escape-key-sequence "jk"
- evil-escape-delay 0.25)
- :general
- (:states '(insert replace visual operator)
- "C-g" #'evil-escape)
+(use-package ryo-modal
+ :commands ryo-modal-mode
+ :bind ("M-m" . ryo-modal-mode)
+ :after which-key
:config
- (evil-escape-mode 1)
- ;; no `evil-escape' in minibuffer
- (push #'minibufferp evil-escape-inhibit-functions))
+ (push '((nil . "ryo:.*:") . (nil . "")) which-key-replacement-alist)
+ (ryo-modal-keys
+ ("," ryo-modal-repeat)
+ ("q" ryo-modal-mode)
+ ("b" backward-char)
+ ("n" next-line)
+ ("p" previous-line)
+ ("f" forward-char))
+
+ (ryo-modal-keys
+ ;; First argyment to ryo-modal-keys may be a list of keywords.
+ ;; These keywords will be applied to all keybindings.
+ (:norepeat t)
+ ("0" "M-0")
+ ("1" "M-1")
+ ("2" "M-2")
+ ("3" "M-3")
+ ("4" "M-4")
+ ("5" "M-5")
+ ("6" "M-6")
+ ("7" "M-7")
+ ("8" "M-8")
+ ("9" "M-9"))
+ :hook ((text-mode . ryo-modal-mode)
+ (prog-mode . ryo-modal-mode)))
#+end_src
*** [[https://orgmode.org/][Org mode]]
#+begin_src emacs-lisp
(use-package magit
- :general (ab--leader-keys "g s" 'magit-status)
+ :ryo ("SPC" (("g s" magit-status)))
:defer t
:bind (("s-g" . magit-status)
- ("C-x g" . magit-status)
+ ("C-x g" . magit-status)
("C-x M-g" . magit-dispatch-popup))
:config
(magit-add-section-hook 'magit-status-sections-hook
([S-up] . ivy-previous-history-element)
([S-down] . ivy-next-history-element)
("DEL" . ivy-backward-delete-char))
+ :ryo ("SPC ," ivy-switch-buffer)
:config
(setq ivy-wrap t)
(ivy-mode 1))
#+begin_src emacs-lisp
(use-package swiper
- :general (:states 'normal "/" 'swiper)
+ :ryo ("/" swiper)
:bind (([remap isearch-forward] . swiper)
- ([remap isearch-backward] . swiper)))
+ ([remap isearch-backward] . swiper)))
#+end_src
**** Counsel
#+begin_src emacs-lisp
(use-package counsel
:defer 1
- :general (ab--leader-keys
- "f r" 'counsel-recentf
- "SPC" 'counsel-M-x
- "." 'counsel-find-file)
+ :ryo
+ ("SPC" (("f r" counsel-recentf)
+ ("SPC" counsel-M-x)
+ ("." counsel-find-file)))
:bind (([remap execute-extended-command] . counsel-M-x)
([remap find-file] . counsel-find-file)
("s-r" . counsel-recentf)
:map minibuffer-local-map
- ("C-r" . counsel-minibuffer-history))
+ ("C-r" . counsel-minibuffer-history))
:config
(counsel-mode 1)
(defalias 'locate #'counsel-locate))
:defer 5
:bind
(:map company-active-map
- ([tab] . company-complete-common-or-cycle))
+ ([tab] . company-complete-common-or-cycle))
:custom
(company-idle-delay 0.3)
(company-minimum-prefix-length 1)
** Customizations
#+begin_src emacs-lisp
-(ab--leader-keys
- "b s" 'save-buffer
- "b b" 'ivy-switch-buffer
- "," 'ivy-switch-buffer
- "b k" 'kill-this-buffer
- "q q" 'evil-save-and-quit)
+(ryo-modal-key
+ "SPC" '(("b b" ibuffer-list-buffers)
+ ("b k" kill-this-buffer)
+ ("b s" save-buffer)
+ ("q q" save-buffers-kill-terminal)))
#+end_src
* Syntax and spell checking
#+begin_src emacs-lisp
(use-package lean-mode
:bind (:map lean-mode-map
- ("S-SPC" . company-complete)))
+ ("S-SPC" . company-complete)))
#+end_src
** Haskell
:config
(setq haskell-indentation-layout-offset 4
haskell-indentation-left-offset 4
- flycheck-checker 'haskell-hlint
- flycheck-disabled-checkers '(haskell-stack-ghc haskell-ghc)))
+ flycheck-checker 'haskell-hlint
+ flycheck-disabled-checkers '(haskell-stack-ghc haskell-ghc)))
#+end_src
*** [[https://github.com/jyp/dante][dante]]
#+begin_src emacs-lisp
(use-package hlint-refactor
:bind (:map hlint-refactor-mode-map
- ("C-c l b" . hlint-refactor-refactor-buffer)
- ("C-c l r" . hlint-refactor-refactor-at-point))
+ ("C-c l b" . hlint-refactor-refactor-buffer)
+ ("C-c l r" . hlint-refactor-refactor-at-point))
:hook (haskell-mode . hlint-refactor-mode))
#+end_src
(new-old-code ""))
(save-excursion
(switch-to-buffer (get-file-buffer fname))
- (goto-char (point-min))
- (forward-line (1- fline))
+ (goto-char (point-min))
+ (forward-line (1- fline))
(beginning-of-line)
(setf bline (point))
(when (or hs-lint-replace-without-ask
(delete-other-windows)
(notmuch))
-;; (ab--leader-keys
-;; "m" 'ab/notmuch
-;; "s" 'save-buffer
-;; "SPC" 'counsel-M-x)
-
;; (map!
;; :leader
;; :desc "notmuch" :n "m" #'ab/notmuch
mml-secure-openpgp-sign-with-sender t))
(use-package notmuch
- :general (ab--leader-keys "m" 'ab/notmuch)
+ :ryo ("SPC m" ab/notmuch)
:config
(setq notmuch-hello-sections
'(notmuch-hello-insert-header
;; :override #'kill-this-buffer)
:bind
(:map notmuch-hello-mode-map
- ("g" . notmuch-poll-and-refresh-this-buffer)
- ("i" . (lambda ()
- "Search for `inbox' tagged messages"
- (interactive)
- (notmuch-hello-search "tag:inbox")))
- ("u" . (lambda ()
- "Search for `unread' tagged messages"
- (interactive)
- (notmuch-hello-search "tag:unread")))
- ("l" . (lambda ()
- "Search for `latest tagged messages"
- (interactive)
- (notmuch-hello-search "tag:latest")))
- ("M" . (lambda ()
- "Compose new mail and prompt for sender"
- (interactive)
- (let ((current-prefix-arg t))
- (call-interactively #'notmuch-mua-new-mail)))))
+ ("g" . notmuch-poll-and-refresh-this-buffer)
+ ("i" . (lambda ()
+ "Search for `inbox' tagged messages"
+ (interactive)
+ (notmuch-hello-search "tag:inbox")))
+ ("u" . (lambda ()
+ "Search for `unread' tagged messages"
+ (interactive)
+ (notmuch-hello-search "tag:unread")))
+ ("l" . (lambda ()
+ "Search for `latest tagged messages"
+ (interactive)
+ (notmuch-hello-search "tag:latest")))
+ ("M" . (lambda ()
+ "Compose new mail and prompt for sender"
+ (interactive)
+ (let ((current-prefix-arg t))
+ (call-interactively #'notmuch-mua-new-mail)))))
(:map notmuch-search-mode-map
- ("g" . notmuch-poll-and-refresh-this-buffer)
- ("k" . (lambda ()
- "Mark message read"
- (interactive)
- (notmuch-search-tag '("-unread"))
- ;; (notmuch-search-archive-thread)
- (notmuch-search-next-thread)))
- ("u" . (lambda ()
- "Mark message unread"
- (interactive)
- (notmuch-search-tag '("+unread"))
- (notmuch-search-next-thread)))
- ("K" . (lambda ()
- "Mark message deleted"
- (interactive)
- (notmuch-search-tag '("-unread" "-inbox" "+deleted"))
- (notmuch-search-archive-thread)))
- ("S" . (lambda ()
- "Mark message as spam"
- (interactive)
- (notmuch-search-tag '("-unread" "-inbox" "-webmasters" "+spam"))
- (notmuch-search-archive-thread))))
+ ("g" . notmuch-poll-and-refresh-this-buffer)
+ ("k" . (lambda ()
+ "Mark message read"
+ (interactive)
+ (notmuch-search-tag '("-unread"))
+ ;; (notmuch-search-archive-thread)
+ (notmuch-search-next-thread)))
+ ("u" . (lambda ()
+ "Mark message unread"
+ (interactive)
+ (notmuch-search-tag '("+unread"))
+ (notmuch-search-next-thread)))
+ ("K" . (lambda ()
+ "Mark message deleted"
+ (interactive)
+ (notmuch-search-tag '("-unread" "-inbox" "+deleted"))
+ (notmuch-search-archive-thread)))
+ ("S" . (lambda ()
+ "Mark message as spam"
+ (interactive)
+ (notmuch-search-tag '("-unread" "-inbox" "-webmasters" "+spam"))
+ (notmuch-search-archive-thread))))
(:map notmuch-tree-mode-map ; TODO: additional bindings
- ("S" . (lambda ()
- "Mark message as spam"
- (interactive)
- (notmuch-tree-tag '("-unread" "-inbox" "-webmasters" "+spam"))
- (notmuch-tree-archive-thread))))
+ ("S" . (lambda ()
+ "Mark message as spam"
+ (interactive)
+ (notmuch-tree-tag '("-unread" "-inbox" "-webmasters" "+spam"))
+ (notmuch-tree-archive-thread))))
)
;; (use-package counsel-notmuch