summary refs log tree commit diff stats
path: root/init.el
diff options
context:
space:
mode:
Diffstat (limited to 'init.el')
-rw-r--r--init.el617
1 files changed, 302 insertions, 315 deletions
diff --git a/init.el b/init.el index d6363ea..707125e 100644 --- a/init.el +++ b/init.el
@@ -21,52 +21,52 @@
21 21
22(use-package emacs ; Misc. config 22(use-package emacs ; Misc. config
23 :config 23 :config
24 (setopt recenter-positions '(top middle bottom) 24 (setq recenter-positions '(top middle bottom)
25 initial-major-mode 'lisp-interaction-mode 25 initial-major-mode 'lisp-interaction-mode
26 initial-scratch-message ";; Emacs!\n\n" 26 initial-scratch-message ";; Emacs!\n\n"
27 ;; (format "%s\n\n" 27 ;; (format "%s\n\n"
28 ;; (mapconcat (lambda (s) (format ";; %s" s)) 28 ;; (mapconcat (lambda (s) (format ";; %s" s))
29 ;; (process-lines "fortune" "-s") 29 ;; (process-lines "fortune" "-s")
30 ;; "\n")) 30 ;; "\n"))
31 eval-expression-print-level nil 31 eval-expression-print-level nil
32 eval-expression-print-length nil 32 eval-expression-print-length nil
33 x-select-enable-clipboard-manager nil) 33 x-select-enable-clipboard-manager nil)
34 ;; TODO: move this ... elsewhere 34 ;; TODO: move this ... elsewhere
35 (setopt mode-line-format 35 (setq mode-line-format
36 '("%e" 36 '("%e"
37 mode-line-front-space 37 mode-line-front-space
38 ;; (:propertize ("" mode-line-mule-info 38 ;; (:propertize ("" mode-line-mule-info
39 ;; mode-line-client 39 ;; mode-line-client
40 ;; mode-line-modified 40 ;; mode-line-modified
41 ;; mode-line-remote) 41 ;; mode-line-remote)
42 ;; display (min-width (5.0))) 42 ;; display (min-width (5.0)))
43 ("" mode-line-mule-info 43 ("" mode-line-mule-info
44 mode-line-client 44 mode-line-client
45 mode-line-modified 45 mode-line-modified
46 mode-line-remote) 46 mode-line-remote)
47 mode-line-frame-identification 47 mode-line-frame-identification
48 mode-line-buffer-identification 48 mode-line-buffer-identification
49 " " 49 " "
50 mode-line-position 50 mode-line-position
51 (vc-mode vc-mode) 51 (vc-mode vc-mode)
52 " " 52 " "
53 minions-mode-line-modes 53 minions-mode-line-modes
54 mode-line-misc-info 54 mode-line-misc-info
55 mode-line-end-spaces)) 55 mode-line-end-spaces))
56 (keymap-global-unset "C-\\") 56 (keymap-global-unset "C-\\")
57 (keymap-global-unset "<f2>") 57 (keymap-global-unset "<f2>")
58 (setf (alist-get "\\*Compile-Log\\*" display-buffer-alist nil nil #'equal) 58 (setf (alist-get "\\*Compile-Log\\*" display-buffer-alist nil nil #'equal)
59 '(display-buffer-no-window)) 59 '(display-buffer-no-window))
60 (add-hook 'after-init-hook 60 ;; (add-hook 'after-init-hook
61 (defun global-mode-string@setup () 61 ;; (defun global-mode-string@setup ()
62 (defvar jabber-activity-mode-string) 62 ;; (defvar jabber-activity-mode-string)
63 (defvar org-mode-line-string) 63 ;; (defvar org-mode-line-string)
64 (defvar display-time-mode) 64 ;; (defvar display-time-mode)
65 (defvar display-time-string) 65 ;; (defvar display-time-string)
66 (setf global-mode-string 66 ;; (setf global-mode-string
67 '((t jabber-activity-mode-string) 67 ;; '((t jabber-activity-mode-string)
68 org-mode-line-string 68 ;; org-mode-line-string
69 (display-time-mode display-time-string))))) 69 ;; (display-time-mode display-time-string)))))
70 (keymap-global-set "C-c t" 70 (keymap-global-set "C-c t"
71 (define-keymap 71 (define-keymap
72 :prefix 'toggle-map 72 :prefix 'toggle-map
@@ -87,23 +87,22 @@
87 "Recursive Mono Casual Static" 87 "Recursive Mono Casual Static"
88 "Comic Code" 88 "Comic Code"
89 "DejaVu Sans Mono") 89 "DejaVu Sans Mono")
90 :height 100))) 90 :height 110)))
91 (face-spec-set 'fixed-pitch 91 (face-spec-set 'fixed-pitch
92 `((t :family ,(find-font 92 `((t :family ,(find-font
93 "Recursive Mono Casual Static" 93 "Recursive Mono Linear Static"
94 "Comic Code" 94 "Comic Code"
95 "DejaVu Sans Mono") 95 "DejaVu Sans Mono")
96 :height 1.0))) 96 :height 1.0)))
97 (face-spec-set 'variable-pitch 97 (face-spec-set 'variable-pitch
98 `((t :family ,(find-font 98 `((t :family ,(find-font
99 "Recursive Sans Linear Static" 99 "Recursive Sans Casual Static"
100 "Atkinson Hyperlegible" 100 "Atkinson Hyperlegible"
101 "DejaVu Serif") 101 "DejaVu Serif")
102 :height 1.0))) 102 :height 1.0)))
103 (face-spec-set 'font-lock-comment-face 103 (face-spec-set 'font-lock-comment-face
104 `((t :inherit variable-pitch))) 104 `((t :slant italic
105 (face-spec-set 'font-lock-string-face 105 :inherit variable-pitch)))
106 `((t :inherit variable-pitch)))
107 ;; Emojis 106 ;; Emojis
108 (cl-loop with ffl = (font-family-list) 107 (cl-loop with ffl = (font-family-list)
109 for font in '("Noto Emoji" "Noto Color Emoji" 108 for font in '("Noto Emoji" "Noto Color Emoji"
@@ -147,8 +146,11 @@
147 146
148(use-package prog-mode 147(use-package prog-mode
149 :config 148 :config
150 (setopt tab-width 8 149 ;;; TABS
151 sh-indentation tab-width) 150 (setq tab-width 8
151 sh-indentation tab-width
152 )
153 ;;; Hooks
152 (add-hook 'prog-mode-hook #'auto-fill-mode) 154 (add-hook 'prog-mode-hook #'auto-fill-mode)
153 (add-hook 'prog-mode-hook 155 (add-hook 'prog-mode-hook
154 (defun prog@indent-tabs-maybe () 156 (defun prog@indent-tabs-maybe ()
@@ -158,11 +160,12 @@
158 'scheme-mode 160 'scheme-mode
159 'python-mode 161 'python-mode
160 'haskell-mode) 162 'haskell-mode)
161 -1 1))))) 163 -1 1))))
164 (global-prettify-symbols-mode))
162 165
163(use-package auth-source 166(use-package auth-source
164 :config 167 :config
165 (setopt auth-sources '(default "secrets:passwords")) 168 (setq auth-sources '(default "secrets:passwords"))
166 (add-hook 'auth-info-hook #'truncate-lines-local-mode)) 169 (add-hook 'auth-info-hook #'truncate-lines-local-mode))
167 170
168(use-package fringe 171(use-package fringe
@@ -171,7 +174,7 @@
171 174
172(use-package ispell 175(use-package ispell
173 :config 176 :config
174 (setopt ispell-program-name (choose-executable "aspell" "ispell")) 177 (setq ispell-program-name (choose-executable "aspell" "ispell"))
175 ;; (add-hook 'before-save-hook 178 ;; (add-hook 'before-save-hook
176 ;; #'+ispell-move-buffer-words-to-dir-locals-hook) 179 ;; #'+ispell-move-buffer-words-to-dir-locals-hook)
177 (put 'ispell-buffer-session-localwords 'safe-local-variable 180 (put 'ispell-buffer-session-localwords 'safe-local-variable
@@ -185,23 +188,23 @@
185 ("<backspace>" . dired-up-directory)) 188 ("<backspace>" . dired-up-directory))
186 :config 189 :config
187 (require 'dired-x) 190 (require 'dired-x)
188 (setopt dired-recursive-copies 'always 191 (setq dired-recursive-copies 'always
189 dired-recursive-deletes 'always 192 dired-recursive-deletes 'always
190 dired-create-destination-dirs 'always 193 dired-create-destination-dirs 'always
191 dired-do-revert-buffer t 194 dired-do-revert-buffer t
192 dired-hide-details-hide-symlink-targets nil 195 dired-hide-details-hide-symlink-targets nil
193 dired-isearch-filenames 'dwim 196 dired-isearch-filenames 'dwim
194 delete-by-moving-to-trash t 197 delete-by-moving-to-trash t
195 dired-auto-revert-buffer t 198 dired-auto-revert-buffer t
196 dired-listing-switches "-AlFhv --group-directories-first" 199 dired-listing-switches "-AlFhv --group-directories-first"
197 ls-lisp-dirs-first t 200 ls-lisp-dirs-first t
198 dired-ls-F-marks-symlinks t 201 dired-ls-F-marks-symlinks t
199 dired-clean-confirm-killing-deleted-buffers nil 202 dired-clean-confirm-killing-deleted-buffers nil
200 dired-no-confirm '(byte-compile 203 dired-no-confirm '(byte-compile
201 load chgrp chmod chown 204 load chgrp chmod chown
202 copy move hardlink symlink 205 copy move hardlink symlink
203 shell touch) 206 shell touch)
204 dired-dwim-target t) 207 dired-dwim-target t)
205 (add-hook 'dired-mode-hook #'dired-hide-details-mode) 208 (add-hook 'dired-mode-hook #'dired-hide-details-mode)
206 (add-hook 'dired-mode-hook #'hl-line-mode) 209 (add-hook 'dired-mode-hook #'hl-line-mode)
207 (add-hook 'dired-mode-hook #'truncate-lines-local-mode)) 210 (add-hook 'dired-mode-hook #'truncate-lines-local-mode))
@@ -226,43 +229,68 @@
226 229
227(use-package mouse 230(use-package mouse
228 :config 231 :config
229 (setopt context-menu-functions '(context-menu-undo 232 (setq context-menu-functions '(context-menu-undo
230 context-menu-region 233 context-menu-region
231 context-menu-middle-separator 234 context-menu-middle-separator
232 context-menu-local 235 context-menu-local
233 context-menu-minor)) 236 context-menu-minor))
234 (context-menu-mode)) 237 (context-menu-mode))
235 238
236(use-package password-cache 239(use-package password-cache
237 :config 240 :config
238 (setopt password-cache t 241 (setq password-cache t
239 password-cache-expiry 3600)) 242 password-cache-expiry 3600))
240 243
241(use-package time 244(use-package time
242 :config 245 :config
243 (setopt display-time-format " %H:%M" 246 (setq display-time-format " %H:%M"
244 display-time-interval 60 247 display-time-interval 60
245 display-time-use-mail-icon t 248 display-time-use-mail-icon t
246 display-time-mail-function 249 display-time-mail-function
247 (defun +notmuch-new-mail-p () 250 (defun +notmuch-new-mail-p ()
248 (plist-get (cl-find "inbox+unread" 251 (plist-get (cl-find "inbox+unread"
249 (ignore-errors 252 (ignore-errors
250 (notmuch-hello-query-counts notmuch-saved-searches)) 253 (notmuch-hello-query-counts notmuch-saved-searches))
251 :key (lambda (l) (plist-get l :name)) 254 :key (lambda (l) (plist-get l :name))
252 :test #'equal) 255 :test #'equal)
253 :count)) 256 :count))
254 display-time-default-load-average nil) 257 display-time-default-load-average nil)
255 (with-eval-after-load 'notmuch 258 (with-eval-after-load 'notmuch
256 (add-hook 'notmuch-after-tag-hook #'display-time-update)) 259 (add-hook 'notmuch-after-tag-hook #'display-time-update))
257 (display-time-mode)) 260 ;; (display-time-mode)
261 )
258 262
259(use-package tab-bar 263(use-package tab-bar
260 :config 264 :config
261 (setopt tab-bar-show t 265 (setq tab-bar-show t
262 tab-bar-close-button-show t) 266 tab-bar-close-button-show t)
263 ;; (add-to-list 'tab-bar-format 'tab-bar-format-menu-bar) 267 (setopt tab-bar-format
264 (add-to-list 'tab-bar-format 'tab-bar-format-align-right :append) 268 `(tab-bar-format-history
265 (add-to-list 'tab-bar-format 'tab-bar-format-global :append) 269 tab-bar-format-tabs
270 tab-bar-separator
271 tab-bar-format-add-tab
272 tab-bar-format-align-right
273 ,(defun tab-bar-extra-info ()
274 `((global menu-item
275 ,(format-mode-line
276 '((jabber-activity-mode jabber-activity-mode-string)
277 (:eval (when (and (fboundp 'org-clocking-p)
278 (org-clocking-p))
279 (format " %s"
280 (truncate-string-to-width
281 org-mode-line-string
282 16
283 nil
284 nil
285 (truncate-string-ellipsis)))))
286 (:eval (tmr-mode-line))
287 (display-time-mode
288 (:eval (format " %s" (string-trim display-time-string))))
289 ("" " ")))
290 ignore))))
291 mode-line-misc-info (cl-delete-if (lambda (x)
292 (eq (car x) 'global-mode-string))
293 mode-line-misc-info))
266 (if (daemonp) 294 (if (daemonp)
267 (add-hook 'server-after-make-frame-hook 295 (add-hook 'server-after-make-frame-hook
268 (defun after-frame@tab-bar () 296 (defun after-frame@tab-bar ()
@@ -306,7 +334,7 @@
306 334
307(use-package eldoc 335(use-package eldoc
308 :config 336 :config
309 (setopt eldoc-documentation-strategy #'eldoc-documentation-compose-eagerly) 337 (setq eldoc-documentation-strategy #'eldoc-documentation-compose-eagerly)
310 (setf (alist-get "^\\*eldoc for" display-buffer-alist nil nil #'equal) 338 (setf (alist-get "^\\*eldoc for" display-buffer-alist nil nil #'equal)
311 '(display-buffer-at-bottom 339 '(display-buffer-at-bottom
312 (window-height . 4))) 340 (window-height . 4)))
@@ -314,15 +342,15 @@
314 342
315(use-package pulse 343(use-package pulse
316 :config 344 :config
317 (setopt pulse-flag nil 345 (setq pulse-flag nil
318 pulse-delay 1 346 pulse-delay 1
319 pulse-iterations 1)) 347 pulse-iterations 1))
320 348
321(use-package flyspell 349(use-package flyspell
322 :hook (org-mode-hook)) 350 :hook (org-mode-hook))
323 351
324(use-package display-fill-column-indicator 352;; (use-package display-fill-column-indicator
325 :hook (prog-mode-hook)) 353;; :hook (prog-mode-hook))
326 354
327(use-package package 355(use-package package
328 :config 356 :config
@@ -382,6 +410,23 @@ See `inferior-emacs-lisp-mode' for details."
382 (add-hook 'ielm-mode-hook #'+ielm-init-history) 410 (add-hook 'ielm-mode-hook #'+ielm-init-history)
383 (advice-add 'ielm-send-input :after #'+ielm-write-history)) 411 (advice-add 'ielm-send-input :after #'+ielm-write-history))
384 412
413(use-package elec-pair
414 :config
415 (setopt electric-pair-skip-whitespace 'chomp)
416 (electric-pair-mode))
417
418(use-package bookmark
419 :config
420 (setopt bookmark-save-flag 1))
421
422(use-package sh-script
423 :config
424 (sh-electric-here-document-mode -1))
425
426(use-package cc-mode
427 :config
428 (setopt c-basic-offset 8))
429
385 430
386;;; Applications 431;;; Applications
387 432
@@ -413,7 +458,7 @@ See `inferior-emacs-lisp-mode' for details."
413(use-package +scratch 458(use-package +scratch
414 :load-path "lisp/" 459 :load-path "lisp/"
415 :config 460 :config
416 (setopt +scratch-save-dir (sync/ "emacs/scratch.d/" t)) 461 (setq +scratch-save-dir (sync/ "emacs/scratch.d/" t))
417 (add-hook 'kill-buffer-query-functions #'+scratch@immortal) 462 (add-hook 'kill-buffer-query-functions #'+scratch@immortal)
418 (add-hook 'kill-emacs-hook #'+scratch-save-on-exit) 463 (add-hook 'kill-emacs-hook #'+scratch-save-on-exit)
419 (with-current-buffer (get-scratch-buffer-create) 464 (with-current-buffer (get-scratch-buffer-create)
@@ -424,21 +469,14 @@ See `inferior-emacs-lisp-mode' for details."
424 (run-at-time t (* 60 60 24) #'+scratch-clean)) 469 (run-at-time t (* 60 60 24) #'+scratch-clean))
425 470
426(use-package pulse-location 471(use-package pulse-location
427 :load-path "~/src/emacs/pulse-location/" 472 :load-path "~/src/pulse-location.el/"
428 :config 473 :config
429 (pulse-location-mode)) 474 (pulse-location-mode))
430 475
431(use-package dawn 476(use-package emacs ; `modus-themes' isn't a package ...
432 :load-path "~/src/emacs/dawn/"
433 :after custom-allowed
434 :config 477 :config
435 (add-hook 'custom-allowed-after-load-hook
436 (defun dawn-modus ()
437 (dawn-schedule-themes 'modus-operandi
438 'modus-vivendi)))
439 (setopt modus-themes-mixed-fonts t) 478 (setopt modus-themes-mixed-fonts t)
440 (load-theme 'modus-vivendi t) 479 (add-hook 'modus-themes-after-load-theme-hook
441 (add-hook 'dawn-after-load-theme-hook
442 (defun +reset-faces () 480 (defun +reset-faces ()
443 (dolist (face '(font-lock-regexp-face 481 (dolist (face '(font-lock-regexp-face
444 font-lock-variable-name-face 482 font-lock-variable-name-face
@@ -469,23 +507,28 @@ See `inferior-emacs-lisp-mode' for details."
469 :weight bold))) 507 :weight bold)))
470 (face-spec-set 'font-lock-doc-face 508 (face-spec-set 'font-lock-doc-face
471 '((t :slant italic))))) 509 '((t :slant italic)))))
472 (+reset-faces)) 510 (add-hook 'after-init-hook
511 (defun modus@load ()
512 (+reset-faces)
513 (pcase (string-trim (shell-command-to-string "darkman get"))
514 ("light" (load-theme 'modus-operandi t))
515 ("dark" (load-theme 'modus-vivendi t))))))
473 516
474(use-package electric-cursor 517(use-package electric-cursor
475 :load-path "~/src/emacs/electric-cursor/" 518 :load-path "~/src/electric-cursor.el/"
476 :config 519 :config
477 (setopt electric-cursor-alist '((overwrite-mode . box) 520 (setq electric-cursor-alist '((overwrite-mode . box)
478 (t . bar))) 521 (t . bar)))
479 (electric-cursor-mode)) 522 (electric-cursor-mode))
480 523
481(use-package mode-line-bell 524(use-package mode-line-bell
482 :load-path "~/src/emacs/mode-line-bell/" 525 :load-path "~/src/mode-line-bell.el/"
483 :config 526 :config
484 (setopt mode-line-bell-flash-time 0.25) 527 (setq mode-line-bell-flash-time 0.25)
485 (mode-line-bell-mode)) 528 (mode-line-bell-mode))
486 529
487(use-package titlecase 530(use-package titlecase
488 :load-path "~/src/emacs/titlecase.el/" 531 :load-path "~/src/titlecase.el/"
489 :preface 532 :preface
490 (defun +titlecase-sentence-style-dwim (&optional arg) 533 (defun +titlecase-sentence-style-dwim (&optional arg)
491 "Titlecase a sentence. 534 "Titlecase a sentence.
@@ -515,7 +558,7 @@ With prefix ARG, toggle the value of
515 (keymap-set scule-map "M-t" #'titlecase-dwim))) 558 (keymap-set scule-map "M-t" #'titlecase-dwim)))
516 559
517(use-package scule 560(use-package scule
518 :load-path "~/src/emacs/scule/" 561 :load-path "~/src/scule.el/"
519 :bind-keymap ("M-c" . scule-map) 562 :bind-keymap ("M-c" . scule-map)
520 :init 563 :init
521 ;; Use M-u for prefix keys 564 ;; Use M-u for prefix keys
@@ -523,23 +566,23 @@ With prefix ARG, toggle the value of
523 (keymap-set universal-argument-map "M-u" #'universal-argument-more)) 566 (keymap-set universal-argument-map "M-u" #'universal-argument-more))
524 567
525(use-package filldent 568(use-package filldent
526 :load-path "~/src/emacs/filldent/" 569 :load-path "~/src/filldent.el/"
527 :bind ("M-q" . filldent-dwim) 570 :bind ("M-q" . filldent-dwim)
528 :config 571 :config
529 (setopt filldent-fill-modes '(web-mode))) 572 (setq filldent-fill-modes '(web-mode)))
530 573
531(use-package frowny 574(use-package frowny
532 :load-path "~/src/emacs/frowny/" 575 :load-path "~/src/frowny.el/"
533 :config 576 :config
534 (global-frowny-mode)) 577 (global-frowny-mode))
535 578
536(use-package keepassxc-shim 579(use-package keepassxc-shim
537 :load-path "~/src/emacs/keepassxc-shim/" 580 :load-path "~/src/keepassxc-shim.el/"
538 :config 581 :config
539 (keepassxc-shim-activate)) 582 (keepassxc-shim-activate))
540 583
541(use-package hippie-completing-read 584(use-package hippie-completing-read
542 :load-path "~/src/emacs/hippie-completing-read/" 585 :load-path "~/src/hippie-completing-read.el/"
543 :bind (("M-/" . hippie-completing-read))) 586 :bind (("M-/" . hippie-completing-read)))
544 587
545 588
@@ -549,7 +592,7 @@ With prefix ARG, toggle the value of
549 :ensure t 592 :ensure t
550 :config 593 :config
551 ;; https://github.com/jwiegley/emacs-async/issues/64 594 ;; https://github.com/jwiegley/emacs-async/issues/64
552 ;; (setopt message-send-mail-function #'async-smtpmail-send-it) 595 ;; (setq message-send-mail-function #'async-smtpmail-send-it)
553 (dired-async-mode) 596 (dired-async-mode)
554 (async-bytecomp-package-mode)) 597 (async-bytecomp-package-mode))
555 598
@@ -560,11 +603,11 @@ With prefix ARG, toggle the value of
560 :ensure t 603 :ensure t
561 :hook (prog-mode-hook)) 604 :hook (prog-mode-hook))
562 605
563(use-package clean-kill-ring 606;; (use-package clean-kill-ring
564 :vc (:url "https://github.com/NicholasBHubbard/clean-kill-ring.el") 607;; :vc (:url "https://github.com/NicholasBHubbard/clean-kill-ring.el")
565 :config 608;; :config
566 (setopt clean-kill-ring-prevent-duplicates t) 609;; (setq clean-kill-ring-prevent-duplicates t)
567 (clean-kill-ring-mode)) 610;; (clean-kill-ring-mode))
568 611
569(use-package minions 612(use-package minions
570 :ensure t 613 :ensure t
@@ -641,7 +684,7 @@ The prefix argument is as in `visual-fill-column-widen' but negated."
641(use-package wgrep 684(use-package wgrep
642 :ensure t 685 :ensure t
643 :config 686 :config
644 (setopt wgrep-enable-key (kbd "C-x C-q")) 687 (setq wgrep-enable-key (kbd "C-x C-q"))
645 :bind (:map grep-mode-map 688 :bind (:map grep-mode-map
646 ("C-x C-q" . wgrep-change-to-wgrep-mode))) 689 ("C-x C-q" . wgrep-change-to-wgrep-mode)))
647 690
@@ -651,8 +694,8 @@ The prefix argument is as in `visual-fill-column-widen' but negated."
651 :map isearch-mode-map 694 :map isearch-mode-map
652 ("M-j" . avy-isearch)) 695 ("M-j" . avy-isearch))
653 :config 696 :config
654 (setopt avy-background t 697 (setq avy-background t
655 avy-keys (string-to-list "asdfghjklqwertyuiopzxcvbnm"))) 698 avy-keys (string-to-list "asdfghjklqwertyuiopzxcvbnm")))
656 699
657(use-package zzz-to-char 700(use-package zzz-to-char
658 :ensure t 701 :ensure t
@@ -666,11 +709,11 @@ The prefix argument is as in `visual-fill-column-widen' but negated."
666(use-package isearch-mb 709(use-package isearch-mb
667 :ensure t 710 :ensure t
668 :config 711 :config
669 (setopt isearch-lazy-count t 712 (setq isearch-lazy-count t
670 isearch-regexp-lax-whitespace t 713 isearch-regexp-lax-whitespace t
671 search-whitespace-regexp "\\W+" 714 search-whitespace-regexp "\\W+"
672 search-default-mode t ; Search regexp by default 715 search-default-mode t ; Search regexp by default
673 isearch-wrap-pause 'no) 716 isearch-wrap-pause 'no)
674 (define-advice isearch-cancel (:before (&rest _) add-search-to-history) 717 (define-advice isearch-cancel (:before (&rest _) add-search-to-history)
675 "Add search string to history when canceling." 718 "Add search string to history when canceling."
676 (unless (equal "" isearch-string) 719 (unless (equal "" isearch-string)
@@ -702,46 +745,46 @@ The prefix argument is as in `visual-fill-column-widen' but negated."
702 "C-M-%" #'anzu-isearch-query-replace) 745 "C-M-%" #'anzu-isearch-query-replace)
703 (isearch-mb-mode)) 746 (isearch-mb-mode))
704 747
705(use-package paredit 748;; (use-package paredit
706 :ensure t 749;; :ensure t
707 :hook ( emacs-lisp-mode-hook ielm-mode-hook 750;; :hook ( emacs-lisp-mode-hook ielm-mode-hook
708 eval-expression-minibuffer-setup-hook 751;; eval-expression-minibuffer-setup-hook
709 lisp-interaction-mode-hook 752;; lisp-interaction-mode-hook
710 lisp-mode-hook scheme-mode-hook 753;; lisp-mode-hook scheme-mode-hook
711 fennel-mode-hook fennel-repl-mode-hook 754;; fennel-mode-hook fennel-repl-mode-hook
712 geiser-mode-hook geiser-repl-mode-hook) 755;; geiser-mode-hook geiser-repl-mode-hook)
713 :config 756;; :config
714 (keymap-set paredit-mode-map "C-j" 757;; (keymap-set paredit-mode-map "C-j"
715 (defun +paredit-newline () 758;; (defun +paredit-newline ()
716 (interactive) 759;; (interactive)
717 (call-interactively 760;; (call-interactively
718 (if (derived-mode-p 'lisp-interaction-mode) 761;; (if (derived-mode-p 'lisp-interaction-mode)
719 #'eval-print-last-sexp #'paredit-newline)))) 762;; #'eval-print-last-sexp #'paredit-newline))))
720 (keymap-unset paredit-mode-map "RET" t) 763;; (keymap-unset paredit-mode-map "RET" t)
721 (keymap-unset paredit-mode-map "M-s" t) 764;; (keymap-unset paredit-mode-map "M-s" t)
722 (keymap-unset paredit-mode-map "M-r" t) 765;; (keymap-unset paredit-mode-map "M-r" t)
723 (add-to-list 'paredit-space-for-delimiter-predicates 766;; (add-to-list 'paredit-space-for-delimiter-predicates
724 (defun paredit@dont-space-@ (endp delimiter) 767;; (defun paredit@dont-space-@ (endp delimiter)
725 "Don't add a space after @ in `paredit-mode'." 768;; "Don't add a space after @ in `paredit-mode'."
726 (let ((point (point))) 769;; (let ((point (point)))
727 (or endp 770;; (or endp
728 (seq-every-p 771;; (seq-every-p
729 (lambda (prefix) 772;; (lambda (prefix)
730 (and (> point (length prefix)) 773;; (and (> point (length prefix))
731 (let ((start (- point (length prefix))) 774;; (let ((start (- point (length prefix)))
732 (end point)) 775;; (end point))
733 (not (string= (buffer-substring start end) 776;; (not (string= (buffer-substring start end)
734 prefix))))) 777;; prefix)))))
735 ;; Add strings to this list to inhibit adding a space 778;; ;; Add strings to this list to inhibit adding a space
736 ;; after them. 779;; ;; after them.
737 '(",@"))))))) 780;; '(",@")))))))
738 781
739(use-package hungry-delete 782(use-package hungry-delete
740 :ensure t 783 :ensure t
741 :config 784 :config
742 (setopt hungry-delete-chars-to-skip " \t" 785 (setq hungry-delete-chars-to-skip " \t"
743 hungry-delete-skip-regexp (format "[%s]" hungry-delete-chars-to-skip) 786 hungry-delete-skip-regexp (format "[%s]" hungry-delete-chars-to-skip)
744 hungry-delete-join-reluctantly nil) 787 hungry-delete-join-reluctantly nil)
745 (add-to-list 'hungry-delete-except-modes 'eshell-mode) 788 (add-to-list 'hungry-delete-except-modes 'eshell-mode)
746 (add-to-list 'hungry-delete-except-modes 'nim-mode) 789 (add-to-list 'hungry-delete-except-modes 'nim-mode)
747 (add-to-list 'hungry-delete-except-modes 'python-mode) 790 (add-to-list 'hungry-delete-except-modes 'python-mode)
@@ -758,9 +801,9 @@ The prefix argument is as in `visual-fill-column-widen' but negated."
758 (interactive "*p") 801 (interactive "*p")
759 (if (looking-at hungry-delete-skip-regexp) 802 (if (looking-at hungry-delete-skip-regexp)
760 (hungry-delete-forward (or arg 1)) 803 (hungry-delete-forward (or arg 1))
761 (paredit-forward-delete arg)))) 804 (paredit-forward-delete arg)))))
762 ;; Mode 805 ;; Mode
763 (global-hungry-delete-mode))) 806 (global-hungry-delete-mode))
764 807
765(use-package macrostep 808(use-package macrostep
766 :ensure t 809 :ensure t
@@ -777,7 +820,7 @@ The prefix argument is as in `visual-fill-column-widen' but negated."
777 :ensure t 820 :ensure t
778 :when inferior-lisp-program 821 :when inferior-lisp-program
779 :preface 822 :preface
780 (setopt inferior-lisp-program (choose-executable "sbcl")) 823 (setq inferior-lisp-program (choose-executable "sbcl"))
781 (defun +sly-start-or-mrepl () 824 (defun +sly-start-or-mrepl ()
782 (interactive) 825 (interactive)
783 (if (ignore-errors (sly-connection)) 826 (if (ignore-errors (sly-connection))
@@ -787,7 +830,7 @@ The prefix argument is as in `visual-fill-column-widen' but negated."
787 :config 830 :config
788 (autoload 'sly-mrepl "sly-mrepl" nil t) 831 (autoload 'sly-mrepl "sly-mrepl" nil t)
789 (keymap-set sly-mode-map "C-c C-z" #'+sly-start-or-mrepl) 832 (keymap-set sly-mode-map "C-c C-z" #'+sly-start-or-mrepl)
790 (setopt sly-net-coding-system 'utf-8-unix) 833 (setq sly-net-coding-system 'utf-8-unix)
791 (sly-symbol-completion-mode -1)) 834 (sly-symbol-completion-mode -1))
792 835
793(use-package pdf-tools 836(use-package pdf-tools
@@ -825,9 +868,9 @@ The prefix argument is as in `visual-fill-column-widen' but negated."
825 :ensure t 868 :ensure t
826 :mode "\\.\\(?:md\\|markdown\\|mkd\\|mdown\\|mkdn\\|mdwn\\)\\'" 869 :mode "\\.\\(?:md\\|markdown\\|mkd\\|mdown\\|mkdn\\|mdwn\\)\\'"
827 :config 870 :config
828 (setopt markdown-command (choose-executable 871 (setq markdown-command (choose-executable
829 '("pandoc" "--from=markdown" "--to=html5") 872 '("pandoc" "--from=markdown" "--to=html5")
830 "markdown")) 873 "markdown"))
831 (add-hook 'markdown-mode-hook #'visual-fill-column-mode)) 874 (add-hook 'markdown-mode-hook #'visual-fill-column-mode))
832 875
833(use-package pandoc-mode 876(use-package pandoc-mode
@@ -864,31 +907,44 @@ The prefix argument is as in `visual-fill-column-widen' but negated."
864 :bind (("C-c r p" . eradio-toggle|play) 907 :bind (("C-c r p" . eradio-toggle|play)
865 ("C-c r s" . eradio-stop)) 908 ("C-c r s" . eradio-stop))
866 :config 909 :config
867 (setopt eradio-player '("mpv" "--no-video" "--no-terminal") 910 (setq eradio-player '("mpv" "--no-video" "--no-terminal")
868 eradio-channels 911 eradio-channels
869 ;; At some point I should actually ... write this in to this file or 912 ;; (name . url)
870 ;; something. But until I decide to quit using radish altogether, this 913 '(("Nightwave Plaza" . "http://radio.plaza.one/ogg")
871 ;; what I got. 914 ("Radio Paradise - Main Mix" .
872 (with-current-buffer (find-file-noselect "~/etc/radish/stations") 915 "http://stream.radioparadise.com/rp_192m.ogg")
873 (let (chans) 916 ("Radio Paradise - Mellow Mix" .
874 (dolist (line (string-split (buffer-substring-no-properties 917 "http://stream.radioparadise.com/mellow-96m.ogg")
875 (point-min) (point-max)) 918 ("Radio Paradise - Rock Mix" .
876 "\n") 919 "http://stream.radioparadise.com/rock-96m.ogg")
877 chans) 920 ("Radio Paradise - Global Mix" .
878 (unless (string-match-p "^#" line) 921 "http://stream.radioparadise.com/global-96m.ogg")
879 (let* ((ll (string-split line "\t")) 922 ("KLSU" . "http://130.39.238.143:8010/stream.mp3"))
880 (url (cl-first ll)) 923 ;; At some point I should actually ... write this in to this file or
881 (name (cl-second ll)) 924 ;; something. But until I decide to quit using radish altogether, this
882 (tags (cl-third ll))) 925 ;; what I got.
883 (when (and name 926 ;; (with-current-buffer (find-file-noselect "~/etc/radish/stations")
884 (string-match-p "[^ \n\t]*://[^ \n\t]*" url)) 927 ;; (let (chans)
885 (push (cons (format "%s - %s" name tags) url) chans))))))))) 928 ;; (dolist (line (string-split (buffer-substring-no-properties
929 ;; (point-min) (point-max))
930 ;; "\n")
931 ;; chans)
932 ;; (unless (string-match-p "^#" line)
933 ;; (let* ((ll (string-split line "\t"))
934 ;; (url (cl-first ll))
935 ;; (name (cl-second ll))
936 ;; (tags (cl-third ll)))
937 ;; (when (and name
938 ;; (string-match-p "[^ \n\t]*://[^ \n\t]*" url))
939 ;; (push (cons (format "%s - %s" name tags) url)
940 ;; chans)))))))
941 ))
886 942
887(use-package wiki-abbrev 943(use-package wiki-abbrev
888 :after org ; Don't need abbrevs til I load org. 944 :after org ; Don't need abbrevs til I load org.
889 :load-path "~/src/emacs/wiki-abbrev.el/" 945 :load-path "~/src/wiki-abbrev.el/"
890 :config 946 :config
891 (setopt wiki-abbrev-file (etc/ "wiki-abbrevs")) 947 (setq wiki-abbrev-file (etc/ "wiki-abbrevs"))
892 (wiki-abbrev-insinuate)) 948 (wiki-abbrev-insinuate))
893 949
894(use-package flyspell-correct 950(use-package flyspell-correct
@@ -931,7 +987,7 @@ With PREFIX, prompt to change the current dictionary."
931 :bind (:map dired-mode-map 987 :bind (:map dired-mode-map
932 (")" . dired-git-info-mode)) 988 (")" . dired-git-info-mode))
933 :config 989 :config
934 (setopt dgi-auto-hide-details-p nil)) 990 (setq dgi-auto-hide-details-p nil))
935 991
936(use-package expand-region ; needed for embrace anyway 992(use-package expand-region ; needed for embrace anyway
937 :ensure t 993 :ensure t
@@ -963,7 +1019,7 @@ With PREFIX, prompt to change the current dictionary."
963 (keymap-set org-mode-map "=" (org-insert-or-embrace "=")) 1019 (keymap-set org-mode-map "=" (org-insert-or-embrace "="))
964 (keymap-set org-mode-map "~" (org-insert-or-embrace "~")) 1020 (keymap-set org-mode-map "~" (org-insert-or-embrace "~"))
965 (keymap-set org-mode-map "+" (org-insert-or-embrace "+"))) 1021 (keymap-set org-mode-map "+" (org-insert-or-embrace "+")))
966 :bind (("C-\"" . embrace-commander)) 1022 :bind (("C-'" . embrace-commander))
967 :hook ((org-mode-hook . embrace-org-mode-hook) 1023 :hook ((org-mode-hook . embrace-org-mode-hook)
968 (ruby-mode-hook . embrace-ruby-mode-hook) 1024 (ruby-mode-hook . embrace-ruby-mode-hook)
969 (emacs-lisp-mode-hook . embrace-emacs-lisp-mode-hook) 1025 (emacs-lisp-mode-hook . embrace-emacs-lisp-mode-hook)
@@ -972,7 +1028,7 @@ With PREFIX, prompt to change the current dictionary."
972(use-package apheleia 1028(use-package apheleia
973 :ensure t 1029 :ensure t
974 :config 1030 :config
975 (setopt apheleia-hide-log-buffers t) 1031 (setq apheleia-hide-log-buffers t)
976 (setf (alist-get 'shfmt apheleia-formatters) 1032 (setf (alist-get 'shfmt apheleia-formatters)
977 '("shfmt" "--case-indent")) 1033 '("shfmt" "--case-indent"))
978 (global-set-key (kbd "M-C-\\") 1034 (global-set-key (kbd "M-C-\\")
@@ -997,44 +1053,24 @@ With PREFIX, prompt to change the current dictionary."
997(use-package rec-mode 1053(use-package rec-mode
998 :ensure t) 1054 :ensure t)
999 1055
1000;; (use-package gauche-mode
1001;; :load-path "~/src/emacs/gauche-mode/"
1002;; :mode "\\.scm\\'"
1003;; :config
1004;; (setopt gauche-mode-info-language 'en
1005;; scheme-program-name "gosh -i"
1006;; scheme-compile-exp-command "%s")
1007;; (add-to-list 'scheme-source-modes 'gauche-mode)
1008;; (setf (alist-get "\\*scheme\\*" display-buffer-alist nil nil #'equal)
1009;; '((display-buffer-reuse-window
1010;; display-buffer-pop-up-window)
1011;; (inhibit-same-window . t)))
1012;; (add-hook 'gauche-mode-hook #'enable-gauche-paredit-mode)
1013;; (add-hook 'inferior-scheme-mode-hook #'enable-gauche-paredit-mode)
1014;; ;; Extras
1015;; (define-key gauche-mode-map (kbd "C-c C-k")
1016;; (defun +gauche-mode-send-buffer ()
1017;; (interactive)
1018;; (save-mark-and-excursion
1019;; (let ((start (point-min))
1020;; (end (point-max)))
1021;; (goto-char start)
1022;; (while (or (looking-at "#!") ; Shebang
1023;; (looking-at ":;") ; "shell trampoline"
1024;; )
1025;; (forward-line 1)
1026;; (beginning-of-line)
1027;; (setq start (point)))
1028;; (scheme-send-region-and-go start end))))))
1029 1056
1030(use-package geiser 1057(use-package geiser
1031 :ensure t 1058 :ensure t
1032 :config 1059 :config
1033 (use-package geiser-guile :ensure t) 1060 (when (executable-find "guile")
1034 (use-package geiser-chicken :ensure t) 1061 (use-package geiser-guile :ensure t))
1035 (use-package geiser-chez :ensure t) 1062 (when (executable-find "chicken")
1036 (use-package geiser-gambit :ensure t) 1063 (use-package geiser-chicken :ensure t))
1037 (use-package geiser-chibi :ensure t) 1064 (when (or (prog1 (executable-find "chez")
1065 (setopt geiser-chez-binary
1066 (executable-find "chez")))
1067 (executable-find "petite")
1068 (executable-find "scheme"))
1069 (use-package geiser-chez :ensure t))
1070 (when (executable-find "gambit")
1071 (use-package geiser-gambit :ensure t))
1072 (when (executable-find "chibi-scheme")
1073 (use-package geiser-chibi :ensure t))
1038 (use-package macrostep-geiser 1074 (use-package macrostep-geiser
1039 :ensure t 1075 :ensure t
1040 :config 1076 :config
@@ -1047,21 +1083,6 @@ With PREFIX, prompt to change the current dictionary."
1047 (keymap-unset geiser-mode-map "C-." t) 1083 (keymap-unset geiser-mode-map "C-." t)
1048 (keymap-unset scheme-mode-map "M-o" t))) 1084 (keymap-unset scheme-mode-map "M-o" t)))
1049 1085
1050(use-package treesit-auto
1051 ;; XXX: I don't really get the utility of this package, but I spent a ton of
1052 ;; time figuring out how to properly build it ... so here it is.
1053 :ensure t
1054 :when (treesit-available-p)
1055 :config
1056 ;; (setopt treesit-extra-load-path
1057 ;; ;; https://github.com/casouri/tree-sitter-module/
1058 ;; `(,(expand-file-name "~/misc/tree-sitter-module/dist/")))
1059 (setopt treesit-auto-install nil) ; javascript keeps failing
1060 (global-treesit-auto-mode))
1061
1062(use-package elpher
1063 :ensure t)
1064
1065(use-package detached 1086(use-package detached
1066 :when (executable-find "dtach") 1087 :when (executable-find "dtach")
1067 :ensure t 1088 :ensure t
@@ -1078,33 +1099,33 @@ With PREFIX, prompt to change the current dictionary."
1078(use-package lin 1099(use-package lin
1079 :ensure t 1100 :ensure t
1080 :config 1101 :config
1081 (setopt lin-face 'lin-cyan 1102 (setq lin-face 'lin-cyan
1082 lin-mode-hooks 1103 lin-mode-hooks
1083 '(dired-mode-hook 1104 '(dired-mode-hook
1084 ;; bongo-mode-hook 1105 ;; bongo-mode-hook
1085 ;; elfeed-search-mode-hook 1106 ;; elfeed-search-mode-hook
1086 git-rebase-mode-hook 1107 git-rebase-mode-hook
1087 grep-mode-hook 1108 grep-mode-hook
1088 ibuffer-mode-hook 1109 ibuffer-mode-hook
1089 ilist-mode-hook 1110 ilist-mode-hook
1090 ;; ledger-report-mode-hook 1111 ;; ledger-report-mode-hook
1091 log-view-mode-hook 1112 log-view-mode-hook
1092 magit-log-mode-hook 1113 magit-log-mode-hook
1093 ;; mu4e-headers-mode-hook 1114 ;; mu4e-headers-mode-hook
1094 notmuch-search-mode-hook 1115 notmuch-search-mode-hook
1095 notmuch-tree-mode-hook 1116 notmuch-tree-mode-hook
1096 occur-mode-hook 1117 occur-mode-hook
1097 org-agenda-mode-hook 1118 org-agenda-mode-hook
1098 pdf-outline-buffer-mode-hook 1119 pdf-outline-buffer-mode-hook
1099 proced-mode-hook 1120 proced-mode-hook
1100 tabulated-list-mode-hook)) 1121 tabulated-list-mode-hook))
1101 (lin-global-mode)) 1122 (lin-global-mode))
1102 1123
1103(use-package gcmh 1124(use-package gcmh
1104 :ensure t 1125 :ensure t
1105 :config 1126 :config
1106 (setopt gcmh-idle-delay 'auto 1127 (setq gcmh-idle-delay 'auto
1107 gcmh-verbose nil) 1128 gcmh-verbose nil)
1108 (gcmh-mode)) 1129 (gcmh-mode))
1109 1130
1110(use-package tmr 1131(use-package tmr
@@ -1116,44 +1137,10 @@ With PREFIX, prompt to change the current dictionary."
1116 tmr--timers) 1137 tmr--timers)
1117 (propertize "⏲" 'face 'font-lock-warning-face) 1138 (propertize "⏲" 'face 'font-lock-warning-face)
1118 "")) 1139 ""))
1119 (add-to-list 'global-mode-string 1140 ;; (add-to-list 'global-mode-string
1120 '("" (:eval (tmr-mode-line))) 1141 ;; '("" (:eval (tmr-mode-line)))
1121 'append)) 1142 ;; 'append)
1122 1143 )
1123;; (use-package elfeed
1124;; :ensure t
1125;; :preface
1126;; ;; https://karthinks.com/software/lazy-elfeed/
1127;; (defun elfeed-scroll-up-command (&optional arg)
1128;; "Scroll up or go to next feed item in Elfeed"
1129;; (interactive "^P")
1130;; (let ((scroll-error-top-bottom nil))
1131;; (condition-case-unless-debug nil
1132;; (scroll-up-command arg)
1133;; (error (elfeed-show-next)))))
1134;; (defun elfeed-scroll-down-command (&optional arg)
1135;; "Scroll up or go to next feed item in Elfeed"
1136;; (interactive "^P")
1137;; (let ((scroll-error-top-bottom nil))
1138;; (condition-case-unless-debug nil
1139;; (scroll-down-command arg)
1140;; (error (elfeed-show-prev)))))
1141;; :bind (("C-c f" . elfeed))
1142;; :config
1143;; (setopt elfeed-enclosure-default-dir "~/var/download/"
1144;; elfeed-db-directory (sync/ "emacs/elfeed/db" t)
1145;; elfeed-curl-max-connections 4)
1146;; (add-hook 'elfeed-search-update-hook #'truncate-lines-local-mode)
1147;; (keymap-set elfeed-show-mode-map "SPC" #'elfeed-scroll-up-command)
1148;; (keymap-set elfeed-show-mode-map "S-SPC" #'elfeed-scroll-down-command)
1149;; (keymap-set elfeed-search-mode-map "a" #'elfeed-search-untag-all-unread)
1150;; (setq elfeed-feeds nil) ; Always reload the feed list from feeds.opml
1151;; (elfeed-load-opml "~/var/feeds.opml"))
1152
1153(use-package iedit ; XXX: is this necessary?
1154 :ensure t
1155 :init
1156 (customize-set-variable 'iedit-toggle-key-default (kbd "C-'")))
1157 1144
1158(use-package dumb-jump 1145(use-package dumb-jump
1159 :ensure t 1146 :ensure t