Compare commits

..

20 commits
devil ... main

Author SHA1 Message Date
eriedaberrie ecb3b93ed8 Don't highlight indent guides on really big buffers 2024-10-31 14:40:55 -07:00
eriedaberrie 9439ad064d Add vundo 2024-10-17 02:35:27 -07:00
eriedaberrie 433e433775 Remove obsolete eglot variables
To be fair the latest version of eglot has equivalent variables but honestly
the defaults are fine and I'm not sure why I set them in the first place.
2024-10-17 02:34:15 -07:00
eriedaberrie ec2179069f Temporary fix to all-the-icons-completion with marginalia 2024-10-10 23:14:03 -07:00
eriedaberrie 5d969593c7 Fix font size of current line number when zooming in or out 2024-09-27 11:58:27 -07:00
eriedaberrie 9e02bf9640 Stop indenting in org-mode 2024-09-09 15:24:04 -07:00
eriedaberrie c286cde1b4 Fill-column: 80 -> 78 2024-09-06 15:29:22 -07:00
eriedaberrie 199052c31d Ensure eglot on Python buffers 2024-07-11 23:31:00 -07:00
eriedaberrie 96ab2661e1 Increase font size from 10.5 to 11
I need glasses
2024-05-09 14:26:01 -07:00
eriedaberrie de0dc1f729 Switch to upstream emacs-everywhere from personal Hyprland fork
Because upstream has been updated and is customizable enough to support Hyprland
relatively easily without needing a fork now.
2024-04-30 23:09:38 -07:00
eriedaberrie db0995ea1f Make battery checker check more standardized values 2024-04-23 00:43:11 -07:00
eriedaberrie 89abc90a68 Add eglot-booster 2024-04-11 09:48:12 -07:00
eriedaberrie 652f639894 Guix is just not happening 2024-01-25 23:10:51 -08:00
eriedaberrie 764d6e0724 Hook rust-ts-mode to eglot-ensure 2024-01-25 23:10:25 -08:00
eriedaberrie 7b191e0d04 Make haskell-mode support interactive by default 2024-01-14 22:22:41 -08:00
eriedaberrie ad563d4031 Replace spell-fu with jinx 2024-01-14 22:22:01 -08:00
eriedaberrie d0e5e85867 Use more default ace-window
I am no longer using evil/meow so the default keys make more sense I guess
2023-12-14 17:32:40 -08:00
eriedaberrie 566ae9da48 Actually enable word count in doom modeline 2023-12-05 02:22:37 -08:00
eriedaberrie 5ca9de898c Switch god-mode C-M- mapping to `m' 2023-11-20 13:14:48 -08:00
eriedaberrie 34d6ee874d Map .epub files to nov-mode 2023-11-15 21:39:01 -08:00
2 changed files with 119 additions and 88 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-10.5") (setq default-frame-alist '((font . "JetbrainsMono Nerd Font-11")
(tool-bar-lines . 0) (tool-bar-lines . 0)
(menu-bar-lines . 0) (menu-bar-lines . 0)
(vertical-scroll-bars . nil))) (vertical-scroll-bars . nil)))

205
init.el
View file

@ -53,26 +53,65 @@
(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 devil (use-package vundo)
(use-package god-mode
: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--devil-del) ("C-h" . my--god-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--devil-del "DEL")) (define-kmacro-wrapper my--god-del "DEL")
(add-to-list 'devil-repeatable-keys '("%k v")) (define-kmacro-wrapper my--god-c-g "C-g"))
(add-to-list 'devil-repeatable-keys '("%k m v")) (with-eval-after-load 'catppuccin-theme
(global-devil-mode)) (add-hook 'god-mode-enabled-hook
(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-prev-like-this) ("C-<" . mc/mark-previous-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)
@ -124,15 +163,10 @@
(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)
@ -208,11 +242,15 @@
:hook prog-mode sly-mrepl-mode racket-repl-mode) :hook prog-mode sly-mrepl-mode racket-repl-mode)
(use-package highlight-indent-guides (use-package highlight-indent-guides
:hook prog-mode :hook (prog-mode . my-maybe-highlight-indent-guides)
:custom :custom
(highlight-indent-guides-auto-enabled nil) (highlight-indent-guides-auto-enabled nil)
(highlight-indent-guides-method 'character) (highlight-indent-guides-method 'character)
(highlight-indent-guides-responsive 'stack)) :config
(defun my-maybe-highlight-indent-guides ()
(interactive)
(unless (> (count-lines (point-min) (point-max)) 10000)
(highlight-indent-guides-mode))))
(use-package which-key (use-package which-key
:demand t :demand t
@ -243,24 +281,34 @@
(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)
(haskell-mode . eglot-ensure)
(lua-mode . eglot-ensure)
(nix-mode . eglot-ensure)
(js-mode . eglot-ensure) (js-mode . eglot-ensure)
(js-ts-mode . eglot-ensure) (js-ts-mode . eglot-ensure)
(lua-mode . eglot-ensure)
(nix-mode . eglot-ensure)
(python-mode . eglot-ensure)
(python-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
(eglot-events-buffer-size 0)
(eglot-autoshutdown t) (eglot-autoshutdown t)
(eglot-confirm-server-initiated-edits nil)
:config :config
(setq-default eglot-workspace-configuration (setq-default eglot-workspace-configuration
'((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)
@ -305,7 +353,6 @@
(use-package marginalia (use-package marginalia
: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))
@ -336,19 +383,27 @@
(use-package cape) (use-package cape)
(use-package all-the-icons (use-package all-the-icons)
:demand t)
(use-package all-the-icons-completion (use-package all-the-icons-completion
:after marginalia all-the-icons :demand t
:hook (marginalia-mode . all-the-icons-completion-marginalia-setup) :hook (marginalia-mode . all-the-icons-completion-marginalia-setup)
:init :config
(require 'marginalia)
;; NOTE: https://github.com/iyefrat/all-the-icons-completion/pull/33
(add-hook 'all-the-icons-completion-mode-hook
(lambda ()
(if all-the-icons-completion-mode
(advice-add (compat-function completion-metadata-get)
:around
#'all-the-icons-completion-completion-metadata-get)
(advice-remove (compat-function completion-metadata-get)
#'all-the-icons-completion-completion-metadata-get))))
(all-the-icons-completion-mode)) (all-the-icons-completion-mode))
(use-package treemacs) (use-package treemacs)
(use-package treemacs-all-the-icons (use-package treemacs-all-the-icons
:demand t
:after treemacs :after treemacs
:demand t
:config :config
(treemacs-load-theme 'all-the-icons)) (treemacs-load-theme 'all-the-icons))
@ -356,6 +411,7 @@
: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)
@ -368,8 +424,8 @@
(minions-mode)) (minions-mode))
(use-package dirvish (use-package dirvish
:demand t
:after dired :after dired
:demand t
:custom :custom
(dired-auto-revert-buffer t) (dired-auto-revert-buffer t)
(dirvish-attributes '(all-the-icons)) (dirvish-attributes '(all-the-icons))
@ -425,7 +481,6 @@
(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)
@ -491,7 +546,9 @@
: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))
@ -535,6 +592,7 @@
: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))
@ -555,57 +613,16 @@
(use-package meson-mode) (use-package meson-mode)
(use-package spell-fu (use-package jinx
:hook :hook text-mode)
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 . (lambda () :hook (git-commit-setup . git-commit-turn-on-auto-fill))
(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
@ -655,7 +672,7 @@
:sasl-password ,(if (functionp secret) :sasl-password ,(if (functionp secret)
(funcall secret) (funcall secret)
secret) secret)
:channels ("#guix" "#nonguix" "#emacs" "#nixos")))))) :channels ("#emacs" "#nixos" "#lisp" "#commonlisp"))))))
(add-hook 'lui-mode-hook (add-hook 'lui-mode-hook
(lambda () (lambda ()
(visual-line-mode) (visual-line-mode)
@ -701,7 +718,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)))) (line-number-current-line ((t (:inherit (hl-line default)))))
:custom :custom
(catppuccin-flavor 'mocha) (catppuccin-flavor 'mocha)
(catppuccin-highlight-matches t) (catppuccin-highlight-matches t)
@ -826,15 +843,29 @@
(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-frame-parameters '((name . "emacs-everywhere") (emacs-everywhere-app-info-function
(alpha-background . 1.0))) (lambda ()
(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
(setq emacs-everywhere-frame-parameters (dolist (f '((alpha-background . 1.0) (width . 120) (height . 20)))
(append '((alpha-background . 1.0) (width . 120) (height . 20)) (add-to-list 'emacs-everywhere-frame-parameters f)))
emacs-everywhere-frame-parameters)))
(use-package prettify-symbols (use-package prettify-symbols
:ensure nil :ensure nil
@ -905,7 +936,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 80) fill-column 78)
;; 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)))
@ -974,15 +1005,15 @@
(cd "~/"))) (cd "~/")))
(defvar my-ac-previous-status t (defvar my-ac-previous-status t
"Whether battery was not in use on last check.") "Whether connected to AC during 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 ?L (funcall battery-status-function))) (cdr (assq ?B (funcall battery-status-function)))
"BAT")))) "discharging"))))
(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)