Compare commits

..

1 commit
main ... devil

Author SHA1 Message Date
eriedaberrie bd8ae57367 Replace god-mode with devil 2023-11-13 12:59:34 -08:00
2 changed files with 79 additions and 99 deletions

View file

@ -15,7 +15,7 @@
(k-time (garbage-collect)))))) (k-time (garbage-collect))))))
;; Set frame parameters early ;; Set frame parameters early
(setq default-frame-alist '((font . "JetbrainsMono Nerd Font-11") (setq default-frame-alist '((font . "JetbrainsMono Nerd Font-10.5")
(tool-bar-lines . 0) (tool-bar-lines . 0)
(menu-bar-lines . 0) (menu-bar-lines . 0)
(vertical-scroll-bars . nil))) (vertical-scroll-bars . nil)))

176
init.el
View file

@ -53,63 +53,26 @@
(global-set-key (kbd "C-/") #'undo-fu-only-undo) (global-set-key (kbd "C-/") #'undo-fu-only-undo)
(global-set-key (kbd "C-?") #'undo-fu-only-redo)) (global-set-key (kbd "C-?") #'undo-fu-only-redo))
(use-package god-mode (use-package devil
:demand t :demand t
:bind :bind
("<escape>" . god-mode-all)
("ESC ESC ESC" . god-mode-all)
("C-S-h" . help-command) ("C-S-h" . help-command)
("C-h" . my--god-del) ("C-h" . my--devil-del)
(:map god-local-mode-map
("i" . god-mode-all)
("<escape>" . my--god-c-g)
("ESC ESC ESC" . keyboard-escape-quit)
("z" . repeat)
("q" . my--god-c-q))
(:map minibuffer-local-map
("<escape>" . abort-minibuffers)
("ESC ESC ESC" . keyboard-escape-quit))
:custom
(god-exempt-major-modes nil)
(god-exempt-predicates (list #'god-exempt-mode-p))
(god-mode-enable-function-key-translations nil)
(god-mode-alist '((nil . "C-")
("g" . "M-")
("m" . "C-M-")))
:config :config
(defun my--god-c-q ()
(interactive)
(let ((god-local-mode nil))
(if-let* ((buffer-read-only)
(ret (key-binding (read-kbd-macro "q")))
((not (or (eq ret #'self-insert-command) (and (boundp lispy-mode) lispy-mode)))))
(call-interactively ret)
(switch-to-prev-buffer))))
(cl-macrolet ((define-kmacro-wrapper (name key) (cl-macrolet ((define-kmacro-wrapper (name key)
`(defun ,name () `(defun ,name ()
(interactive) (interactive)
(call-interactively (key-binding (read-kbd-macro ,key)))))) (call-interactively (key-binding (read-kbd-macro ,key))))))
(define-kmacro-wrapper my--god-del "DEL") (define-kmacro-wrapper my--devil-del "DEL"))
(define-kmacro-wrapper my--god-c-g "C-g")) (add-to-list 'devil-repeatable-keys '("%k v"))
(with-eval-after-load 'catppuccin-theme (add-to-list 'devil-repeatable-keys '("%k m v"))
(add-hook 'god-mode-enabled-hook (global-devil-mode))
(lambda ()
(face-spec-set 'cursor `((t (:background ,(catppuccin-get-color 'rosewater)))))
(unless (display-graphic-p)
(send-string-to-terminal "\e[2 q"))))
(add-hook 'god-mode-disabled-hook
(lambda ()
(face-spec-set 'cursor `((t (:background ,(catppuccin-get-color 'mauve)))))
(unless (display-graphic-p)
;; Escape codes for hbar cursor in insert mode
(send-string-to-terminal "\e[4 q")))))
(god-mode))
(use-package multiple-cursors (use-package multiple-cursors
:bind :bind
("C-S-c" . mc/edit-lines) ("C-S-c" . mc/edit-lines)
("C->" . mc/mark-next-like-this) ("C->" . mc/mark-next-like-this)
("C-<" . mc/mark-previous-like-this) ("C-<" . mc/mark-prev-like-this)
("C-+" . mc/mark-all-like-this) ("C-+" . mc/mark-all-like-this)
("C-|" . mc/mark-pop) ("C-|" . mc/mark-pop)
("C-c c" . mc/mark-all-in-region) ("C-c c" . mc/mark-all-in-region)
@ -161,10 +124,15 @@
(use-package ace-window (use-package ace-window
:bind ("C-c w" . ace-window) :bind ("C-c w" . ace-window)
:custom :custom
(aw-keys '(?a ?w ?e ?r ?g ?h ?j ?k ?l ?p))
(aw-dispatch-always t) (aw-dispatch-always t)
(aw-scope 'frame) (aw-scope 'frame)
(aw-keys '(?a ?w ?d ?f ?g ?h ?k ?l))
:config :config
(dolist (c aw-dispatch-alist)
(cl-case (car c)
(?j (setcar c ?J))
(?v (setcar c ?s) (setcar (nthcdr 2 c) "Split Window"))
(?b (setcar c ?v) (setcar (nthcdr 2 c) "Vertical Split"))))
(with-eval-after-load 'catppuccin-theme (with-eval-after-load 'catppuccin-theme
(face-spec-set 'aw-leading-char-face `((t (:foreground (face-spec-set 'aw-leading-char-face `((t (:foreground
,(catppuccin-get-color 'crust) ,(catppuccin-get-color 'crust)
@ -275,16 +243,13 @@
(c-ts-mode . eglot-ensure) (c-ts-mode . eglot-ensure)
(c++-mode . eglot-ensure) (c++-mode . eglot-ensure)
(c++-ts-mode . eglot-ensure) (c++-ts-mode . eglot-ensure)
(haskell-mode . eglot-ensure)
(java-mode . eglot-ensure) (java-mode . eglot-ensure)
(java-ts-mode . eglot-ensure) (java-ts-mode . eglot-ensure)
(js-mode . eglot-ensure) (haskell-mode . eglot-ensure)
(js-ts-mode . eglot-ensure)
(lua-mode . eglot-ensure) (lua-mode . eglot-ensure)
(nix-mode . eglot-ensure) (nix-mode . eglot-ensure)
(python-mode . eglot-ensure) (js-mode . eglot-ensure)
(python-ts-mode . eglot-ensure) (js-ts-mode . eglot-ensure)
(rust-ts-mode . eglot-ensure)
(typescript-ts-mode . eglot-ensure) (typescript-ts-mode . eglot-ensure)
(tsx-ts-mode . eglot-ensure) (tsx-ts-mode . eglot-ensure)
:custom :custom
@ -296,15 +261,6 @@
'((haskell '((haskell
(formattingProvider . "floskell"))))) (formattingProvider . "floskell")))))
(use-package eglot-booster
:ensure nil
:after eglot
:demand t
:custom
(eglot-booster-no-remote-boost t)
:config
(eglot-booster-mode))
(use-package eglot-java (use-package eglot-java
:hook java-mode java-ts-mode) :hook java-mode java-ts-mode)
@ -348,8 +304,8 @@
(completion-category-overrides '((file (styles basic partial-completion))))) (completion-category-overrides '((file (styles basic partial-completion)))))
(use-package marginalia (use-package marginalia
:after vertico
:demand t :demand t
:after vertico
:bind (:map minibuffer-local-map ("M-a" . marginalia-cycle)) :bind (:map minibuffer-local-map ("M-a" . marginalia-cycle))
:config :config
(marginalia-mode)) (marginalia-mode))
@ -391,8 +347,8 @@
(use-package treemacs) (use-package treemacs)
(use-package treemacs-all-the-icons (use-package treemacs-all-the-icons
:after treemacs
:demand t :demand t
:after treemacs
:config :config
(treemacs-load-theme 'all-the-icons)) (treemacs-load-theme 'all-the-icons))
@ -400,7 +356,6 @@
:demand t :demand t
:custom :custom
(doom-modeline-continuous-word-count-modes '(markdown-mode gfm-mode org-mode)) (doom-modeline-continuous-word-count-modes '(markdown-mode gfm-mode org-mode))
(doom-modeline-enable-word-count t)
(doom-modeline-indent-info t) (doom-modeline-indent-info t)
(doom-modeline-minor-modes t) (doom-modeline-minor-modes t)
(doom-modeline-battery nil) (doom-modeline-battery nil)
@ -413,8 +368,8 @@
(minions-mode)) (minions-mode))
(use-package dirvish (use-package dirvish
:after dired
:demand t :demand t
:after dired
:custom :custom
(dired-auto-revert-buffer t) (dired-auto-revert-buffer t)
(dirvish-attributes '(all-the-icons)) (dirvish-attributes '(all-the-icons))
@ -470,6 +425,7 @@
(org-mode . my-inhibit-hl-line-mode) (org-mode . my-inhibit-hl-line-mode)
(org-mode . my-double-space-sentence) (org-mode . my-double-space-sentence)
:custom :custom
(org-startup-indented t)
(org-startup-with-inline-images t) (org-startup-with-inline-images t)
(org-special-ctrl-a/e t) (org-special-ctrl-a/e t)
(org-insert-heading-respect-content t) (org-insert-heading-respect-content t)
@ -535,9 +491,7 @@
:hook org-modern-mode) :hook org-modern-mode)
(use-package djvu) (use-package djvu)
(use-package nov)
(use-package nov
:mode ("\\.epub\\'" . nov-mode))
(use-package org-pdftools (use-package org-pdftools
:hook (org-mode . org-pdftools-setup-link)) :hook (org-mode . org-pdftools-setup-link))
@ -581,7 +535,6 @@
:hook (racket-mode . racket-xp-mode)) :hook (racket-mode . racket-xp-mode))
(use-package haskell-mode (use-package haskell-mode
:hook (haskell-mode . interactive-haskell-mode)
:custom :custom
(haskell-process-show-debug-tips nil)) (haskell-process-show-debug-tips nil))
@ -602,16 +555,57 @@
(use-package meson-mode) (use-package meson-mode)
(use-package jinx (use-package spell-fu
:hook text-mode) :hook
text-mode
(org-mode . (lambda ()
(setq spell-fu-faces-exclude
'(org-block-begin-line
org-block-end-line
org-code
org-date
org-drawer org-document-info-keyword
org-ellipsis
org-link
org-meta-line
org-properties
org-properties-value
org-special-keyword
org-src
org-tag
org-verbatim)))))
(use-package minimap (use-package minimap
:custom-face :custom-face
(minimap-active-region-background ((t (:background unspecified :inherit hl-line)))) (minimap-active-region-background ((t (:background unspecified :inherit hl-line))))
:hook (minimap-sb-mode . turn-on-solaire-mode)) :hook (minimap-sb-mode . turn-on-solaire-mode))
(defun my-magit-spell-fu-check-range (pos-beg pos-end)
(spell-fu--overlays-remove pos-beg pos-end)
(with-syntax-table spell-fu-syntax-table
(save-match-data
(save-excursion
(goto-char (point-min))
(let ((check-end (-> (format "^%s -+ >8 -+$" comment-start)
(re-search-forward pos-end t)
(or pos-end)))
(comment-start-char (aref comment-start 0)))
(goto-char pos-beg)
(while (< (point) check-end)
(unless (= (char-after) comment-start-char)
(let ((pos-line-end (pos-eol)))
(while (re-search-forward spell-fu-word-regexp pos-line-end t)
(let ((word-beg (match-beginning 0))
(word-end (match-end 0)))
(spell-fu-check-word word-beg word-end (match-string-no-properties 0))))))
(forward-line)))))))
(use-package magit (use-package magit
:hook (git-commit-setup . git-commit-turn-on-auto-fill)) :hook (git-commit-setup . (lambda ()
(git-commit-turn-on-auto-fill)
(spell-fu-mode)
(setq-local spell-fu-check-range #'my-magit-spell-fu-check-range)
(spell-fu--time-ensure t))))
(use-package forge (use-package forge
:after magit :after magit
@ -661,7 +655,7 @@
:sasl-password ,(if (functionp secret) :sasl-password ,(if (functionp secret)
(funcall secret) (funcall secret)
secret) secret)
:channels ("#emacs" "#nixos" "#lisp" "#commonlisp")))))) :channels ("#guix" "#nonguix" "#emacs" "#nixos"))))))
(add-hook 'lui-mode-hook (add-hook 'lui-mode-hook
(lambda () (lambda ()
(visual-line-mode) (visual-line-mode)
@ -707,7 +701,7 @@
(use-package catppuccin-theme (use-package catppuccin-theme
:demand t :demand t
:custom-face :custom-face
(line-number-current-line ((t (:inherit (hl-line default))))) (line-number-current-line ((t (:inherit hl-line))))
:custom :custom
(catppuccin-flavor 'mocha) (catppuccin-flavor 'mocha)
(catppuccin-highlight-matches t) (catppuccin-highlight-matches t)
@ -832,29 +826,15 @@
(org-msg-greeting-fmt "\nHi%s,\n\n")) (org-msg-greeting-fmt "\nHi%s,\n\n"))
(use-package emacs-everywhere (use-package emacs-everywhere
:ensure nil
:commands emacs-everywhere
:custom :custom
(emacs-everywhere-app-info-function (emacs-everywhere-frame-parameters '((name . "emacs-everywhere")
(lambda () (alpha-background . 1.0)))
(let* ((string-data (emacs-everywhere-call "hyprctl" "-j" "activewindow"))
(window-data (json-parse-string string-data
:object-type 'plist
:array-type 'list
:null-object nil
:false-object nil))
(window-id (plist-get window-data :address))
(app-id (plist-get window-data :class))
(window-title (plist-get window-data :title))
(window-geometry (append (plist-get window-data :at)
(plist-get window-data :size))))
(make-emacs-everywhere-app
:id window-id
:class app-id
:title window-title
:geometry window-geometry))))
(emacs-everywhere-window-focus-command '("hyprctl" "dispatch" "focuswindow" "address:%w"))
:config :config
(dolist (f '((alpha-background . 1.0) (width . 120) (height . 20))) (setq emacs-everywhere-frame-parameters
(add-to-list 'emacs-everywhere-frame-parameters f))) (append '((alpha-background . 1.0) (width . 120) (height . 20))
emacs-everywhere-frame-parameters)))
(use-package prettify-symbols (use-package prettify-symbols
:ensure nil :ensure nil
@ -925,7 +905,7 @@
json-ts-mode-indent-offset 4 json-ts-mode-indent-offset 4
sgml-basic-offset 4 sgml-basic-offset 4
tab-width 4 tab-width 4
fill-column 78) fill-column 80)
;; Because python-mode sets tab-width to 8 for some reason ;; Because python-mode sets tab-width to 8 for some reason
(add-hook 'python-mode-hook (lambda () (setq tab-width 4))) (add-hook 'python-mode-hook (lambda () (setq tab-width 4)))
@ -994,15 +974,15 @@
(cd "~/"))) (cd "~/")))
(defvar my-ac-previous-status t (defvar my-ac-previous-status t
"Whether connected to AC during last check.") "Whether battery was not in use on last check.")
(require 'battery) (require 'battery)
(defun my-bat-check () (defun my-bat-check ()
"Check if battery status has changed. "Check if battery status has changed.
Used to toggle `goggles-pulse', `pixel-scroll-precision-mode', and `nyan-mode'." Used to toggle `goggles-pulse', `pixel-scroll-precision-mode', and `nyan-mode'."
(let ((ac-status (not (string= (let ((ac-status (not (string=
(cdr (assq ?B (funcall battery-status-function))) (cdr (assq ?L (funcall battery-status-function)))
"discharging")))) "BAT"))))
(unless (eq ac-status my-ac-previous-status) (unless (eq ac-status my-ac-previous-status)
(setq my-ac-previous-status ac-status) (setq my-ac-previous-status ac-status)
(when (boundp 'goggles-pulse) (when (boundp 'goggles-pulse)