about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--init.el710
1 files changed, 320 insertions, 390 deletions
diff --git a/init.el b/init.el index 6010297..f5a9bbd 100644 --- a/init.el +++ b/init.el
@@ -6,60 +6,177 @@
6;; which pointed out that I could use `outline-mode' (or in my case, 6;; which pointed out that I could use `outline-mode' (or in my case,
7;; `outshine') to fold and navigate a pure-elisp `init.el'. So that's 7;; `outshine') to fold and navigate a pure-elisp `init.el'. So that's
8;; what I'm doing. 8;; what I'm doing.
9;;; Custom Functions
10(defun acdw/split-and-follow-window-below ()
11 "Split the window below and switch to the split."
12 (interactive)
13 (split-window-below)
14 (balance-windows)
15 (other-window 1))
16
17(defun acdw/split-and-follow-window-right ()
18 "Split the window right and switch to the split."
19 (interactive)
20 (split-window-right)
21 (balance-windows)
22 (other-window 1))
23
24(defun acdw/full-auto-save ()
25 "Save all buffers that (a) have files associated and (b) are modified."
26 (interactive)
27 (save-excursion
28 (dolist (buf (buffer-list))
29 (set-buffer buf)
30 (if (and (buffer-file-name) (buffer-modified-p))
31 (basic-save-buffer)))))
32
33(defun acdw/kill-this-buffer ()
34 "Kill the current buffer."
35 (interactive)
36 (kill-buffer nil))
37
38;; https://bling.github.io/blog/2016/01/18/why-are-you-changing-gc-cons-threshold/
39(defun acdw/stop-gc ()
40 "Stop garbage collection by setting it to a very high number."
41 (setq gc-cons-threshold most-positive-fixnum))
42
43(defun acdw/start-gc ()
44 "Start garbage collection by resetting it to `*acdw/gc-cons*'."
45 (setq gc-cons-threshold *acdw/gc-cons*))
46
47(defun post-to-gemlog-blue (post-title user pass)
48 "Post current buffer to gemlog.blue."
49 (interactive
50 (let* ((title-maybe (progn ;; TODO this is ... clunky
51 (goto-char (point-min))
52 (if (re-search-forward "^# \\(.*\\)" nil t)
53 (buffer-substring-no-properties
54 (match-beginning 1)
55 (match-end 1))
56 "")))
57 (title (read-string
58 (format "Title%s: "
59 (if (string= "" title-maybe)
60 ""
61 (concat " (" title-maybe ")")))
62 nil nil title-maybe))
63 (user (read-string "User: " nil))
64 (pass (read-passwd "Pass: " nil)))
65 (list title user pass)))
66
67 (require 'mm-url)
68 (let ((url-request-method "POST")
69 (url-request-extra-headers
70 '(("Content-Type" . "application/x-www-form-urlencoded")))
71 (url-request-data
72 (mm-url-encode-www-form-urlencoded
73 `(("title" . ,post-title)
74 ("gemloguser" . ,user)
75 ("pw" . ,pass)
76 ("post" . ,(buffer-string))))))
77 (with-current-buffer
78 (url-retrieve-synchronously "https://gemlog.blue/post.php")
79 (goto-char (point-min))
80 (re-search-forward "\\(gemini://.*\\.gmi\\)")
81 (elpher-go (match-string 1)))))
9 82
10;;; Basic emacs config & built-in packages 83;;; Basic emacs config & built-in packages
11;;;; /Really/ basic emacs config 84;;;; /Really/ basic emacs config
12;; I /did/ use `better-defaults', but it turns out that that package 85(use-package calendar
13;; is (a) short and (b) mostly overriden by other settings. 86 :straight nil
14(use-package emacs 87 :custom
15 :demand ; make sure this stuff loads 88 (calendar-location-name "Baton Rouge, LA")
16 :init 89 (calendar-latitude 30.39)
17 ;; where I am 90 (calendar-longitude -91.83))
18 (setq calendar-location-name "Baton Rouge, LA")
19 (setq calendar-latitude 30.39)
20 (setq calendar-longitude -91.83)
21 91
22 ;; firefox is love, firefox is life 92(use-package browse-url
23 (setq browse-url-browser-function 'browse-url-firefox 93 :straight nil
24 browse-url-new-window-flag t 94 :custom
25 browse-url-firefox-new-window-is-tab t) 95 (browse-url-browser-function 'browse-url-firefox)
96 (browse-url-new-window-flag t)
97 (browse-url-firefox-new-window-is-tab t))
26 98
27 ;; honestly not sure if this is necessary 99(use-package paren
28 (autoload 'zap-up-to-char "misc" 100 :straight nil
29 "Kill up to, but not including, ARGth occurence of CHAR." t) 101 :custom
102 (show-paren-style 'mixed)
103 :hook
104 (after-init-hook . show-paren-mode))
30 105
31 ;; show parentheses 106(use-package simple
32 (setq show-paren-style 'mixed) 107 :straight nil
33 (show-paren-mode) 108 :custom
109 (save-interprogram-paste-before-kill
110 t "Save existing clipboard text into killring before replacing it.")
111 :hook
112 (after-init-hook . global-visual-line-mode))
34 113
35 ;; always work on visual lines 114(use-package delsel
36 (global-visual-line-mode) 115 :straight nil
116 :hook
117 (after-init-hook . delete-selection-mode))
37 118
38 ;; make the mouse avoid where I'm typing 119(use-package emacs
39 (mouse-avoidance-mode 'jump) 120 :straight nil
121 :demand t
122 :custom
123 ;; completion
124 (completion-ignore-case t)
125 (read-buffer-completion-ignore-case t)
126 (read-file-name-completion-ignore-case t)
127 ;; etc.
128 (indent-tabs-mode nil "Indentation won't insert tabs.")
129 (visible-bell (not *acdw/at-larry*) "Don't ring a bell, unless at larry.")
130 (use-dialog-box nil "Ask questions in the modeline.")
131 (mark-even-if-inactive nil "Don't use the mark when inactive.")
132 ;; paragraphs
133 (sentence-end-double-space t "Sentences end with two spaces.")
134 ;; cursor
135 (cursor-type 'bar)
136 (cursor-in-non-selected-windows 'hollow)
137 (default-frame-alist '((tool-bar-lines . 0)
138 (menu-bar-lines . 0)
139 (vertical-scroll-bars . nil)
140 (horizontal-scroll-bars . nil)
141 (right-divider-width . 2)
142 (bottom-divider-width . 2)
143 (left-fringe-width . 2)
144 (right-fringe-width . 2)))
145 (inhibit-startup-buffer-menu t)
146 (inhibit-startup-screen t)
147 (initial-buffer-choice t "Start out in *scratch*.")
148 (initial-scratch-message nil)
149 :config
150 (fset 'yes-or-no-p 'y-or-n-p)
151 (blink-cursor-mode 0)
152 :bind
153 ("C-z" . nil)
154 ("C-x k" . acdw/kill-this-buffer)
155 ("C-x K" . kill-buffer)
156 :hook
157 (prog-mode-hook . prettify-symbols-mode)
158 ((auto-save-hook focus-out-hook) . acdw/full-auto-save)
159 (before-save-hook . delete-trailing-whitespace)
160 (minibuffer-setup-hook . acdw/stop-gc)
161 (minibuffer-exit-hook . acdw/start-gc))
40 162
41 ;; delete the selection when I start typing, like a normal editor 163(use-package display-line-numbers
42 (delete-selection-mode) 164 :straight nil
165 :when (and (fboundp 'display-line-numbers-mode)
166 (display-graphic-p))
167 :hook
168 (prog-mode-hook . display-line-numbers-mode))
43 169
44 ;; ignore case 170(use-package linum
45 (setq-default completion-ignore-case t 171 :straight nil
46 read-buffer-completion-ignore-case t 172 :unless (and (fboundp 'display-line-numbers-mode)
47 read-file-name-completion-ignore-case t) 173 (display-graphic-p))
174 :hook
175 (prog-mode-hook . linum-mode))
48 176
49 ;; etc defaults 177(use-package mule
50 (fset 'yes-or-no-p 'y-or-n-p) 178 :straight nil
51 (setq-default indent-tabs-mode nil 179 :init
52 save-interprogram-paste-before-kill t
53 apropos-do-all t
54 mouse-yank-at-point t
55 require-final-newline t
56 visible-bell (not *acdw/at-larry*)
57 ediff-window-setup-function 'ediff-setup-windows-plain
58 use-dialog-box nil
59 mark-even-if-inactive nil
60 sentence-end-double-space t)
61
62 ;; utf-8 is now, old man
63 (set-charset-priority 'unicode) 180 (set-charset-priority 'unicode)
64 (set-language-environment "UTF-8") 181 (set-language-environment "UTF-8")
65 (set-default-coding-systems 'utf-8) 182 (set-default-coding-systems 'utf-8)
@@ -67,101 +184,45 @@
67 (set-keyboard-coding-system 'utf-8) 184 (set-keyboard-coding-system 'utf-8)
68 (set-selection-coding-system 'utf-8) 185 (set-selection-coding-system 'utf-8)
69 (prefer-coding-system 'utf-8) 186 (prefer-coding-system 'utf-8)
70 (setq default-buffer-file-coding-system 'utf-8 187 :custom
71 default-process-coding-system '(utf-8-unix . utf-8-unix) 188 (default-buffer-file-coding-system 'utf-8)
72 locale-coding-system 'utf-8) 189 (default-process-coding-system '(utf-8-unix . utf-8-unix))
73 190 (locale-coding-system 'utf-8))
74 ;; don't confirm killing 191
75 (setq confirm-kill-processes nil 192(use-package mouse
76 confirm-kill-emacs nil) 193 :straight nil
77 194 :custom
78 ;; simplify the GUI 195 (mouse-yank-at-point t "Yank at point instead of click."))
79 (setq default-frame-alist '((tool-bar-lines . 0)
80 (menu-bar-lines . 0)
81 (vertical-scroll-bars . nil)
82 (horizontal-scroll-bars . nil)
83 (right-divider-width . 2)
84 (bottom-divider-width . 2)
85 (left-fringe-width . 2)
86 (right-fringe-width . 2))
87 inhibit-startup-buffer-menu t
88 inhibit-startup-screen t
89 initial-buffer-choice t
90 initial-scratch-message nil)
91
92 ;; set up the cursor
93 (blink-cursor-mode 0)
94 (setq-default cursor-type 'bar
95 cursor-in-non-selected-windows 'hollow)
96
97 ;; display line numbers in `prog-mode'
98 (add-hook 'prog-mode-hook
99 (if (and (fboundp 'display-line-numbers-mode)
100 (display-graphic-p))
101 #'display-line-numbers-mode
102 #'linum-mode))
103
104 ;; custom functions
105 (defun split-and-follow-below ()
106 "Split the window below and switch to the split."
107 (interactive)
108 (split-window-below)
109 (balance-windows)
110 (other-window 1))
111
112 (defun split-and-follow-right ()
113 "Split the window right and switch to the split."
114 (interactive)
115 (split-window-right)
116 (balance-windows)
117 (other-window 1))
118
119 (defun full-auto-save ()
120 "Save all buffers that (a) have files associated and (b) are modified."
121 (interactive)
122 (save-excursion
123 (dolist (buf (buffer-list))
124 (set-buffer buf)
125 (if (and (buffer-file-name) (buffer-modified-p))
126 (basic-save-buffer)))))
127
128 (defun kill-this-buffer ()
129 "Kill the current buffer."
130 (interactive)
131 (kill-buffer nil))
132 196
197(use-package files
198 :straight nil
199 :custom
200 (require-final-newline t)
201 (confirm-kill-processes nil)
202 (confirm-kill-emacs nil)
133 :bind 203 :bind
134 ("C-x C-b" . ibuffer) 204 ("C-x f" . find-file))
135 ("M-z" . zap-up-to-char)
136 ([remap split-window-below] . split-and-follow-below)
137 ([remap split-window-right] . split-and-follow-right)
138 ("C-x f" . find-file)
139 ("C-z" . nil)
140 ("C-x k" . kill-this-buffer)
141 ("C-x K" . kill-buffer)
142 205
143 :hook 206(use-package window
144 (prog-mode-hook . prettify-symbols-mode) 207 :straight nil
145 ((auto-save-hook focus-out-hook) . full-auto-save) 208 :bind
146 (before-save-hook . delete-trailing-whitespace)) 209 ([remap split-window-below] . acdw/split-and-follow-window-below)
210 ([remap split-window-right] . acdw/split-and-follow-window-right))
147 211
148;;;; Keep .emacs.d clean 212;;;; Keep .emacs.d clean
149;; load this early for other packages to use 213;; load this early for other packages to use
150(use-package no-littering 214(use-package no-littering
151 :demand 215 :demand
216 :custom
217 (create-lockfiles nil)
218 (delete-old-versions t)
219 (kept-new-versions 6)
220 (kept-old-versions 2)
221 (version-control t)
152 :config 222 :config
153 (setq custom-file (no-littering-expand-etc-file-name "custom.el")) 223 (setq custom-file (no-littering-expand-etc-file-name "custom.el"))
154
155 (setq create-lockfiles nil)
156
157 (setq delete-old-versions t
158 kept-new-versions 6
159 kept-old-versions 2
160 version-control t)
161
162 (setq backup-directory-alist 224 (setq backup-directory-alist
163 `((".*" . ,(no-littering-expand-var-file-name "backup/")))) 225 `((".*" . ,(no-littering-expand-var-file-name "backup/"))))
164
165 (setq auto-save-file-name-transforms 226 (setq auto-save-file-name-transforms
166 `((".*" ,(no-littering-expand-var-file-name "auto-save/") t))) 227 `((".*" ,(no-littering-expand-var-file-name "auto-save/") t)))
167 (auto-save-mode)) 228 (auto-save-mode))
@@ -169,49 +230,51 @@
169;;;; Uniquily name buffers 230;;;; Uniquily name buffers
170(use-package uniquify 231(use-package uniquify
171 :straight nil 232 :straight nil
172 :init 233 :custom
173 (setq uniquify-buffer-name-style 'forward)) 234 (uniquify-buffer-name-style 'forward))
174 235
175;;;; Use async when possible 236;;;; Use async when possible
176(use-package async 237(use-package async
177 :config 238 :config ;; not sure when this is loaded
178 (dired-async-mode)) 239 (dired-async-mode))
179 240
180;;;; Autocompile elisp files (like this one) 241;;;; Autocompile elisp files (like this one)
181(use-package auto-compile 242(use-package auto-compile
182 :init 243 :custom
183 (setq load-prefer-newer t) 244 (load-prefer-newer t)
184 :config 245 :hook
185 (auto-compile-on-load-mode)) 246 (emacs-lisp-mode-hook . (lambda ()
247 (auto-compile-on-load-mode)
248 (auto-compile-on-save-mode))))
186 249
187;;;; Recent files 250;;;; Recent files
188(use-package recentf 251(use-package recentf
189 :init
190 (setq recentf-max-menu-items 100
191 recentf-max-saved-items 100)
192 :config 252 :config
193 (add-to-list 'recentf-exclude no-littering-var-directory) 253 (add-to-list 'recentf-exclude no-littering-var-directory)
194 (add-to-list 'recentf-exclude no-littering-etc-directory) 254 (add-to-list 'recentf-exclude no-littering-etc-directory)
195 (recentf-mode)) 255 :custom
256 (recentf-max-menu-items 100)
257 (recentf-max-saved-items 100)
258 :hook
259 (after-init-hook . recentf-mode))
196 260
197;;;; Save places in files 261;;;; Save places in files
198(use-package saveplace 262(use-package saveplace
199 :init 263 :custom
200 (setq save-place-file (no-littering-expand-var-file-name "places")) 264 (save-place-file (no-littering-expand-var-file-name "places"))
201 (when *acdw/at-work* 265 (save-place-forget-unreadable-files (not *acdw/at-work*))
202 (setq save-place-forget-unreadable-files nil)) 266 :hook
203 :config 267 (after-init-hook . save-place-mode))
204 (save-place-mode))
205 268
206;;;; Save history of commands, etc. 269;;;; Save history of commands, etc.
207(use-package savehist 270(use-package savehist
208 :init 271 :custom
209 (setq savehist-additional-variables 272 (savehist-additional-variables
210 '(kill-ring 273 '(kill-ring
211 search-ring 274 search-ring
212 regexp-search-ring)) 275 regexp-search-ring))
213 :config 276 :hook
214 (savehist-mode)) 277 (after-init-hook . savehist-mode))
215 278
216;;;; Authority sources for logins 279;;;; Authority sources for logins
217;; TODO: use gpg 280;; TODO: use gpg
@@ -234,11 +297,10 @@
234;;;;; Pop-up help for keys 297;;;;; Pop-up help for keys
235(use-package which-key 298(use-package which-key
236 :diminish which-key-mode 299 :diminish which-key-mode
237 :init 300 :custom
238 (setq which-key-enable-extended-define-key t) 301 (which-key-enable-extended-define-key t)
239 :config 302 :hook
240 (which-key-setup-side-window-right-bottom) 303 (after-init-hook . which-key-mode))
241 (which-key-mode))
242 304
243;;;;; A better help buffer 305;;;;; A better help buffer
244(use-package helpful 306(use-package helpful
@@ -252,8 +314,8 @@
252 314
253;;;;; A better `outline-mode' 315;;;;; A better `outline-mode'
254(use-package outshine 316(use-package outshine
255 :init 317 :custom
256 (setq outshine-cycle-emulate-tab t) 318 (outshine-cycle-emulate-tab t)
257 :bind (:map outshine-mode-map 319 :bind (:map outshine-mode-map
258 ("<S-iso-lefttab>" . outshine-cycle-buffer) 320 ("<S-iso-lefttab>" . outshine-cycle-buffer)
259 ("<backtab>" . outshine-cycle-buffer)) 321 ("<backtab>" . outshine-cycle-buffer))
@@ -262,80 +324,81 @@
262 324
263;;;;; Item selection & narrowing 325;;;;; Item selection & narrowing
264(use-package selectrum 326(use-package selectrum
327 :custom
328 (enable-recursive-minibuffers t)
265 :init 329 :init
266 (setq enable-recursive-minibuffers t)
267 (minibuffer-depth-indicate-mode) 330 (minibuffer-depth-indicate-mode)
268 :config 331 :hook
269 (selectrum-mode)) 332 (after-init-hook . selectrum-mode))
270 333
271(use-package prescient) 334(use-package prescient)
272 335
273(use-package selectrum-prescient 336(use-package selectrum-prescient
274 :config 337 :hook
275 (selectrum-prescient-mode) 338 (after-init-hook . (lambda ()
276 (prescient-persist-mode)) 339 (selectrum-prescient-mode)
340 (prescient-persist-mode))))
277 341
278;;;;; Searching 342;;;;; Searching
279(use-package ctrlf 343(use-package ctrlf
280 :config 344 :hook
281 (ctrlf-mode)) 345 (after-init-hook . ctrlf-mode))
282 346
283;;;;; Visually switch windows 347;;;;; Visually switch windows
284(use-package switch-window 348(use-package ctrlxo
285 :init 349 :straight (ctrlxo
286 (setq switch-window-shortcut-style 'qwerty) 350 :host github
351 :repo "muffinmad/emacs-ctrlxo")
287 :bind 352 :bind
288 ([remap other-window] . switch-window) 353 ([remap other-window] . ctrlxo))
289 ("s-o" . switch-window))
290 354
291;;;; Theming, looks, fonts 355;;;; Theming, looks, fonts
292;;;;; Fonts 356;;;;; Fonts
293;; I'm doing these outside of any 'package' b/c ... idk. I want to? 357;; https://github.com/kaushalmodi/.emacs.d/blob/master/init.el#L376
294(let* ((fixed-pitch-sans-serif-family 358;; modi/font-check
295 (cond ((x-list-fonts "Fira Code") '(:family "Fira Code")) 359(defun acdw/setup-fonts ()
296 ((x-list-fonts "Consolas") '(:family "Consolas")) 360 (let* ((fixed-pitch-sans-serif-family
297 ((x-list-fonts "DejaVu Sans Mono") '(:family "DejaVu Sans Mono")) 361 (cond ((x-list-fonts "Fira Code") '(:family "Fira Code"))
298 ((x-list-fonts "Fixed") '(:family "Fixed")) 362 ((x-list-fonts "Consolas") '(:family "Consolas"))
299 (nil (warn "Can't find a good fixed pitch sans-serif font.")))) 363 ((x-list-fonts "DejaVu Sans Mono") '(:family "DejaVu Sans Mono"))
300 (fixed-pitch-serif-family 364 ((x-list-fonts "Fixed") '(:family "Fixed"))
301 (cond ((x-list-fonts "Go Mono") '(:family "Go Mono")) 365 (nil (warn "Can't find a good fixed pitch sans-serif font."))))
302 ((x-list-fonts "Courier Prime") '(:family "Courier Prime")) 366 (fixed-pitch-serif-family
303 ((x-list-fonts "Courier New") '(:family "Courier New")) 367 (cond ((x-list-fonts "Go Mono") '(:family "Go Mono"))
304 ((x-list-fonts "Courier") '(:family "Courier")) 368 ((x-list-fonts "Courier Prime") '(:family "Courier Prime"))
305 (nil (warn "Can't find a good fixed pitch serif font.")))) 369 ((x-list-fonts "Courier New") '(:family "Courier New"))
306 (variable-pitch-sans-serif-family 370 ((x-list-fonts "Courier") '(:family "Courier"))
307 (cond ((x-list-fonts "DejaVu Sans") '(:family "DejaVu Sans")) 371 (nil (warn "Can't find a good fixed pitch serif font."))))
308 ((x-list-fonts "Go") '(:family "Go")) 372 (variable-pitch-sans-serif-family
309 ((x-list-fonts "Arial") '(:family "Arial")) 373 (cond ((x-list-fonts "DejaVu Sans") '(:family "DejaVu Sans"))
310 (nil (warn "Cant't find a good variable pitch sans-serif font.")))) 374 ((x-list-fonts "Go") '(:family "Go"))
311 (variable-pitch-serif-family 375 ((x-list-fonts "Arial") '(:family "Arial"))
312 (cond ((x-list-fonts "DejaVu Serif") '(:family "DejaVu Serif")) 376 (nil (warn "Cant't find a good variable pitch sans-serif font."))))
313 ((x-list-fonts "Georgia") '(:family "Georgia")) 377 (variable-pitch-serif-family
314 ((x-list-fonts "Times New Roman") '(:family "Times New Roman")) 378 (cond ((x-list-fonts "DejaVu Serif") '(:family "DejaVu Serif"))
315 ((x-list-fonts "Times") '(:family "Times")) 379 ((x-list-fonts "Georgia") '(:family "Georgia"))
316 (nil (warn "Can't find a good variable pitch serif font.")))) 380 ((x-list-fonts "Times New Roman") '(:family "Times New Roman"))
317 381 ((x-list-fonts "Times") '(:family "Times"))
318 (fixed-pitch-family fixed-pitch-sans-serif-family) 382 (nil (warn "Can't find a good variable pitch serif font."))))
319 (variable-pitch-family variable-pitch-serif-family) 383
320 (default-family fixed-pitch-family)) 384 (fixed-pitch-family fixed-pitch-sans-serif-family)
321 (custom-theme-set-faces 385 (variable-pitch-family variable-pitch-serif-family)
322 'user 386 (default-family fixed-pitch-family))
323 `(fixed-pitch ((t (,@fixed-pitch-family)))) 387 (custom-theme-set-faces
324 `(fixed-pitch-serif ((t (,@fixed-pitch-serif-family)))) 388 'user
325 `(variable-pitch ((t (,@variable-pitch-family)))) 389 `(fixed-pitch ((t (,@fixed-pitch-family))))
326 `(default ((t (,@default-family)))))) 390 `(fixed-pitch-serif ((t (,@fixed-pitch-serif-family))))
391 `(variable-pitch ((t (,@variable-pitch-family))))
392 `(default ((t (,@default-family))))))
393 (remove-hook 'focus-in-hook #'acdw/setup-fonts))
394(add-hook 'focus-in-hook #'acdw/setup-fonts)
327;;;;; Modeline 395;;;;; Modeline
328(use-package doom-modeline 396(use-package doom-modeline
329 :init 397 :custom
330 (setq doom-modeline-icon nil 398 (doom-modeline-icon nil)
331 doom-modeline-enable-word-count t) 399 (doom-modeline-enable-word-count t)
332
333 ;; (when *acdw/at-larry*
334 ;; (setq display-time-format "%R")
335 ;; (display-time-mode))
336
337 :hook 400 :hook
338 (window-setup-hook . doom-modeline-mode)) 401 (after-init-hook . doom-modeline-mode))
339 402
340;;;;; Ligatures 403;;;;; Ligatures
341(use-package ligature 404(use-package ligature
@@ -358,22 +421,21 @@
358 ":=" "..." ":>" ":<" ">:" "<:" 421 ":=" "..." ":>" ":<" ">:" "<:"
359 "::=" ;; add others here 422 "::=" ;; add others here
360 )) 423 ))
361 (global-ligature-mode)) 424 :hook
425 (after-init-hook . global-ligature-mode))
362 426
363;;;;; Unicode 427;;;;; Unicode
364(use-package unicode-fonts 428(use-package unicode-fonts
365 :config 429 :hook
366 (unicode-fonts-setup)) 430 (after-init-hook . unicode-fonts-setup))
367 431
368;;;;; Modus themes 432;;;;; Modus themes
369(use-package modus-operandi-theme 433(use-package modus-operandi-theme
370 :if window-system
371 :config 434 :config
372 (load-theme 'modus-operandi t t) 435 (load-theme 'modus-operandi t t)
373 436
374 (defun acdw/sunrise () 437 (defun acdw/sunrise ()
375 (enable-theme 'modus-operandi) 438 (enable-theme 'modus-operandi))
376 (start-process-shell-command "light" nil "light -S 60"))
377 439
378 (if *acdw/at-work* 440 (if *acdw/at-work*
379 (enable-theme 'modus-operandi) 441 (enable-theme 'modus-operandi)
@@ -382,13 +444,11 @@
382 444
383(when *acdw/at-home* 445(when *acdw/at-home*
384 (use-package modus-vivendi-theme 446 (use-package modus-vivendi-theme
385 :if window-system
386 :config 447 :config
387 (load-theme 'modus-vivendi t t) 448 (load-theme 'modus-vivendi t t)
388 449
389 (defun acdw/sunset () 450 (defun acdw/sunset ()
390 (enable-theme 'modus-vivendi) 451 (enable-theme 'modus-vivendi))
391 (start-process-shell-command "light" nil "light -S 35"))
392 452
393 (run-at-time (nth 4 (split-string (sunrise-sunset))) 453 (run-at-time (nth 4 (split-string (sunrise-sunset)))
394 (* 60 60 24) #'acdw/sunset) 454 (* 60 60 24) #'acdw/sunset)
@@ -403,8 +463,8 @@
403 463
404;;;;; Show text commands acted on 464;;;;; Show text commands acted on
405(use-package volatile-highlights 465(use-package volatile-highlights
406 :config 466 :hook
407 (volatile-highlights-mode)) 467 (after-init-hook . volatile-highlights-mode))
408 468
409;;;;; Visual replacement for `zap-to-char' 469;;;;; Visual replacement for `zap-to-char'
410(use-package zop-to-char 470(use-package zop-to-char
@@ -420,8 +480,8 @@
420 480
421;;;;; Operate on the current line if no region is active 481;;;;; Operate on the current line if no region is active
422(use-package whole-line-or-region 482(use-package whole-line-or-region
423 :config 483 :hook
424 (whole-line-or-region-global-mode)) 484 (after-init-hook . whole-line-or-region-global-mode))
425 485
426;;;;; Expand region 486;;;;; Expand region
427(use-package expand-region 487(use-package expand-region
@@ -432,9 +492,9 @@
432 492
433;;;;; Code completion 493;;;;; Code completion
434(use-package company 494(use-package company
435 :init 495 :custom
436 (setq company-idle-delay 0.1 496 (company-idle-delay 0.1)
437 company-show-numbers t) 497 (company-show-numbers t)
438 :config 498 :config
439 (let ((map company-active-map)) 499 (let ((map company-active-map))
440 (mapc (lambda (x) 500 (mapc (lambda (x)
@@ -459,7 +519,7 @@
459 519
460;;;;; Git integration 520;;;;; Git integration
461(use-package magit 521(use-package magit
462 :if *acdw/at-home* 522 :when *acdw/at-home*
463 :bind 523 :bind
464 ("C-x g" . magit-status) 524 ("C-x g" . magit-status)
465 :config 525 :config
@@ -474,7 +534,7 @@
474 ) 534 )
475 535
476(use-package forge 536(use-package forge
477 :if *acdw/at-home* 537 :when *acdw/at-home*
478 :after magit 538 :after magit
479 :config 539 :config
480 (setq forge-owned-accounts '(("duckwork")))) 540 (setq forge-owned-accounts '(("duckwork"))))
@@ -489,9 +549,10 @@
489 549
490;;;;;; Smartly deal with pairs 550;;;;;; Smartly deal with pairs
491(use-package smartparens 551(use-package smartparens
492 :config 552 :hook
493 (require 'smartparens-config) 553 (prog-mode-hook . (lambda ()
494 (smartparens-global-mode)) 554 (require 'smartparens-config)
555 (smartparens-global-mode))))
495 556
496;;;;;; Show delimiters as different colors 557;;;;;; Show delimiters as different colors
497(use-package rainbow-delimiters 558(use-package rainbow-delimiters
@@ -507,9 +568,9 @@
507 568
508;;;;; `fill-column', but in `visual-line-mode' 569;;;;; `fill-column', but in `visual-line-mode'
509(use-package visual-fill-column 570(use-package visual-fill-column
510 :init 571 :custom
511 (setq split-window-preferred-function 'visual-fill-column-split-window-sensibly) 572 (split-window-preferred-function 'visual-fill-column-split-window-sensibly)
512 (setq visual-fill-column-center-text t) 573 (visual-fill-column-center-text t)
513 :config 574 :config
514 (advice-add 'text-scale-adjust 575 (advice-add 'text-scale-adjust
515 :after #'visual-fill-column-adjust)) 576 :after #'visual-fill-column-adjust))
@@ -521,13 +582,13 @@
521 582
522;;;;;; Edit files with `sudo' (I think?) 583;;;;;; Edit files with `sudo' (I think?)
523 (use-package su 584 (use-package su
524 :config 585 :hook
525 (su-mode)) 586 (after-init-hook . su-mode))
526 587
527;;;;;; Implement XDG Trash specification 588;;;;;; Implement XDG Trash specification
528 (use-package trashed 589 (use-package trashed
529 :init 590 :custom
530 (setq delete-by-moving-to-trash t)) 591 (delete-by-moving-to-trash t))
531 592
532;;;;;; Build exec-path from $PATH 593;;;;;; Build exec-path from $PATH
533 (use-package exec-path-from-shell 594 (use-package exec-path-from-shell
@@ -554,150 +615,18 @@
554 615
555(use-package gemini-mode 616(use-package gemini-mode
556 :straight (gemini-mode 617 :straight (gemini-mode
557 :repo "https://git.carcosa.net/jmcbray/gemini.el.git")) 618 :repo "https://git.carcosa.net/jmcbray/gemini.el.git")
619 :hook (gemini-mode-hook . (lambda ()
620 ;; (variable-pitch-mode)
621 (set-fill-column 100)
622 (visual-fill-column-mode))))
558 623
559(use-package gemini-write 624(use-package gemini-write
560 :straight (gemini-write 625 :straight (gemini-write
561 :repo "https://alexschroeder.ch/cgit/gemini-write")) 626 :repo "https://alexschroeder.ch/cgit/gemini-write"))
562 627
563(defun post-to-gemlog-blue (post-title user pass)
564 "Post current buffer to gemlog.blue."
565 (interactive
566 (let* ((title-maybe (progn ;; TODO this is ... clunky
567 (goto-char (point-min))
568 (if (re-search-forward "^# \\(.*\\)" nil t)
569 (buffer-substring-no-properties
570 (match-beginning 1)
571 (match-end 1))
572 "")))
573 (title (read-string
574 (format "Title%s: "
575 (if (string= "" title-maybe)
576 ""
577 (concat " (" title-maybe ")")))
578 nil nil title-maybe))
579 (user (read-string "User: " nil))
580 (pass (read-passwd "Pass: " nil)))
581 (list title user pass)))
582
583 (require 'mm-url)
584 (let ((url-request-method "POST")
585 (url-request-extra-headers
586 '(("Content-Type" . "application/x-www-form-urlencoded")))
587 (url-request-data
588 (mm-url-encode-www-form-urlencoded
589 `(("title" . ,post-title)
590 ("gemloguser" . ,user)
591 ("pw" . ,pass)
592 ("post" . ,(buffer-string))))))
593 (with-current-buffer
594 (url-retrieve-synchronously "https://gemlog.blue/post.php")
595 (goto-char (point-min))
596 (re-search-forward "\\(gemini://.*\\.gmi\\)")
597 (elpher-go (match-string 1)))))
598
599;;;; exwm ~ Emacs X Window Manager
600;; (when *acdw/at-larry*
601;; (use-package exwm
602;; :if window-system
603;; :demand
604;; :init
605;; (add-to-list 'default-frame-alist '(fullscreen . maximized)))
606;; :custom
607;; (exwm-layout-show-all-buffers t)
608;; (exwm-workspace-warp-cursor t)
609;; ;;(mouse-autoselect-window t)
610;; (exwm-workspace-number 4)
611;; (exwm-input-global-keys
612;; `(
613;; ([remap split-window-below] . split-and-follow-below)
614;; ([remap split-window-right] . split-and-follow-right)
615;; ([?\s-r] . exwm-reset)
616;; ([?\s-w] . exwm-workspace-switch)
617;; ([?\s-&] . (lambda (command)
618;; (interactive (list (read-shell-command "$ ")))
619;; (start-process-shell-command command nil command)))
620;; ,@(mapcar (lambda (i)
621;; `(,(kbd (format "s-%d" i)) .
622;; (lambda ()
623;; (interactive)
624;; (exwm-workspace-switch-create ,i))))
625;; (number-sequence 0 9))))
626;; (exwm-input-simulation-keys
627;; '(([?\C-b] . [left])
628;; ([?\M-b] . [C-left])
629;; ([?\C-f] . [right])
630;; ([?\M-f] . [C-right])
631;; ([?\C-p] . [up])
632;; ([?\C-n] . [down])
633;; ([?\C-a] . [home])
634;; ([?\C-e] . [end])
635;; ([?\M-v] . [prior])
636;; ([?\C-v] . [next])
637;; ([?\C-d] . [delete])
638;; ([?\C-k] . [S-end delete])
639;; ([?\C-s] . [?\C-f])
640;; ([?\C-w] . [?\C-x])
641;; ([?\M-w] . [?\C-c])
642;; ([?\C-y] . [?\C-v])))
643;; :hook
644;; ((exwm-update-class-hook .
645;; (lambda () "Rename buffer to window's class name"
646;; (exwm-workspace-rename-buffer exwm-class-name)))
647;; (exwm-update-title-hook .
648;; (lambda () "Update workspace name to window title"
649;; (when (not exwm-instance-name)
650;; (exwm-workspace-rename-buffer exwm-title))))
651;; (exwm-init-hook . window-divider-mode)
652;; (exwm-init-hook .
653;; (lambda () "Autostart"
654;; (start-process-shell-command "cmst" nil "cmst -m -w 5")
655;; (start-process-shell-command "keepassxc" nil "keepassxc")
656;; (start-process-shell-command
657;; "pa-applet" nil
658;; "pa-applet --disable-key-grabbing --disable-notifications")
659;; (start-process-shell-command
660;; "cbatticon" nil "cbatticon"))))
661;; :config
662;; (require 'exwm)
663;; (exwm-enable)
664;; (require 'exwm-systemtray)
665;; (exwm-systemtray-enable))
666
667;; (use-package exwm-firefox-core
668;; :after exwm
669;; :straight (exwm-firefox-core
670;; :type git
671;; :host github
672;; :repo "walseb/exwm-firefox-core"))
673
674;; (use-package exwm-firefox
675;; :after exwm-firefox-core
676;; :straight (exwm-firefox
677;; :type git
678;; :host github
679;; :repo "ieure/exwm-firefox")
680;; :config
681;; (exwm-firefox-mode))
682
683;; (use-package exwm-mff
684;; :straight (exwm-mff
685;; :host github
686;; :repo "ieure/exwm-mff"
687;; :fork (
688;; :host github
689;; :repo "duckwork/exwm-mff"))
690;; :after exwm
691;; :hook
692;; (exwm-init-hook . exwm-mff-mode))
693
694;; (use-package exwm-edit)
695
696;; ) ;; end of *acdw/at-larry* block for exwm
697
698;;;; IRC 628;;;; IRC
699(use-package circe 629(use-package circe
700 :if *acdw/at-larry*
701 :init 630 :init
702 (defun my/fetch-password (&rest params) 631 (defun my/fetch-password (&rest params)
703 "Fetch a password from auth-sources" 632 "Fetch a password from auth-sources"
@@ -790,14 +719,14 @@
790 719
791;;;; org-mode 720;;;; org-mode
792(use-package org 721(use-package org
793 :init 722 :custom
794 (setq org-startup-indented t) 723 (org-startup-indented t)
795 (setq org-src-tab-acts-natively t) 724 (org-src-tab-acts-natively t)
796 (setq org-hide-emphasis-markers t) 725 (org-hide-emphasis-markers t)
797 (setq org-fontify-done-headline t) 726 (org-fontify-done-headline t)
798 (setq org-hide-leading-stars t) 727 (org-hide-leading-stars t)
799 (setq org-pretty-entities t) 728 (org-pretty-entities t)
800 729 :config
801 (font-lock-add-keywords 'org-mode 730 (font-lock-add-keywords 'org-mode
802 '(("^ *\\([-+*]\\) " 731 '(("^ *\\([-+*]\\) "
803 (0 (prog1 () (compose-region (match-beginning 1) 732 (0 (prog1 () (compose-region (match-beginning 1)
@@ -808,13 +737,14 @@
808 737
809(use-package org-bullets 738(use-package org-bullets
810 :hook 739 :hook
811 (org-mode-hook . (lambda () (org-bullets-mode)))) 740 (org-mode-hook . org-bullets-mode))
812 741
813;;;; SLIME -- for LISP 742;;;; SLIME -- for LISP
814(use-package slime 743(use-package slime
815 :init 744 :custom
816 (setq inferior-lisp-program (cond ((executable-find "sbcl") 745 (inferior-lisp-program (cond ((executable-find "sbcl")
817 (executable-find "sbcl"))))) 746 (executable-find "sbcl")))))
747
818 748
819(provide 'init) 749(provide 'init)
820;;; init.el ends here 750;;; init.el ends here