diff options
Diffstat (limited to 'init.el')
-rw-r--r-- | init.el | 262 |
1 files changed, 11 insertions, 251 deletions
diff --git a/init.el b/init.el index ab596b6..52fc593 100644 --- a/init.el +++ b/init.el | |||
@@ -1,251 +1,11 @@ | |||
1 | ;;; init.el -*- lexical-binding: t; coding: utf-8; -*- | 1 | ;; This file replaces itself with the actual configuration when first run. To keep only this version in git, run this command: |
2 | 2 | ;; git update-index --assume-unchanged init.el | |
3 | ;;; Commentary: | 3 | ;; |
4 | ;; BANKRUPT_SCORE: 1 | 4 | ;; If it needs to be changed, start tracking it again thusly: |
5 | ;; ^ the number of times I've declared Emacs bankruptcy. | 5 | ;; git update-index --no-assume-unchanged init.el |
6 | ;; Does this mean I'm part of the cool kids now? | 6 | |
7 | 7 | (require 'org) | |
8 | ;;; Macros | 8 | (find-file (concat user-emacs-directory "init.org")) |
9 | (defmacro cuss (var val) | 9 | (org-babel-tangle) |
10 | "Basically `use-package' `:custom' but without either." | 10 | (load-file (concat user-emacs-directory "init.el")) |
11 | `(progn | 11 | (byte-compile-file (concat user-emacs-directory "init.el")) |
12 | (funcall (or (get ',var 'custom-set) #'set-default) | ||
13 | ',var ,val))) | ||
14 | |||
15 | ;;; Files | ||
16 | ;; keep `emacs-user-directory' tidy | ||
17 | (use-package no-littering) | ||
18 | |||
19 | ;; don't clutter `init.el' with customize crap | ||
20 | (cuss custom-file (no-littering-expand-etc-file-name "custom.el")) | ||
21 | |||
22 | ;; backups | ||
23 | (cuss backup-directory-alist | ||
24 | `((".*" . ,(no-littering-expand-var-file-name "backup/")))) | ||
25 | |||
26 | ;; recent files | ||
27 | (use-package recentf | ||
28 | :config | ||
29 | (add-to-list 'recentf-exclude no-littering-var-directory) | ||
30 | (add-to-list 'recentf-exclude no-littering-etc-directory) | ||
31 | :custom | ||
32 | (recentf-max-menu-items 100) | ||
33 | (recentf-max-saved-items 100) | ||
34 | :config | ||
35 | (recentf-mode +1)) | ||
36 | |||
37 | ;; encoding | ||
38 | (set-charset-priority 'unicode) | ||
39 | (set-language-environment "UTF-8") | ||
40 | (set-default-coding-systems 'utf-8) | ||
41 | (set-terminal-coding-system 'utf-8) | ||
42 | (set-keyboard-coding-system 'utf-8) | ||
43 | (set-selection-coding-system 'utf-8) | ||
44 | (prefer-coding-system 'utf-8) | ||
45 | |||
46 | ;;; Save/Restore | ||
47 | ;; autosave, but like, better | ||
48 | (use-package super-save | ||
49 | :custom | ||
50 | (auto-save-default nil) | ||
51 | (super-save-auto-save-when-idle t) | ||
52 | (super-save-exclude '(".gpg")) | ||
53 | :config | ||
54 | (super-save-mode +1)) | ||
55 | |||
56 | ;; save places in files | ||
57 | (use-package saveplace | ||
58 | :custom | ||
59 | (save-place-file (no-littering-expand-var-file-name "places")) | ||
60 | :config | ||
61 | (save-place-mode +1)) | ||
62 | |||
63 | ;; save history of variables | ||
64 | (use-package savehist | ||
65 | :custom | ||
66 | (savehist-additional-variables | ||
67 | '(kill-ring | ||
68 | search-ring | ||
69 | regexp-search-ring)) | ||
70 | :config | ||
71 | (savehist-mode +1)) | ||
72 | |||
73 | ;;; Buffers | ||
74 | ;; uniquely name buffers | ||
75 | (cuss uniquify-buffer-name-style 'forward) | ||
76 | |||
77 | ;;; UI | ||
78 | ;; frame defaults | ||
79 | (cuss 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 | |||
88 | ;; also disable these with modes, so I can re-enable them more easily | ||
89 | (menu-bar-mode -1) | ||
90 | (tool-bar-mode -1) | ||
91 | (scroll-bar-mode -1) | ||
92 | |||
93 | ;; cursor | ||
94 | (cuss cursor-type 'bar) | ||
95 | (cuss cursor-in-non-selected-windows 'hollow) | ||
96 | (blink-cursor-mode 0) | ||
97 | |||
98 | ;; mouse | ||
99 | (cuss mouse-yank-at-point t) ; yank at the point instead of where clicked | ||
100 | |||
101 | ;; startup screen | ||
102 | (cuss inhibit-startup-buffer-menu t) | ||
103 | (cuss inhibit-startup-screen t) | ||
104 | (cuss initial-buffer-choice t) ; start in *scratch* | ||
105 | (cuss initial-scratch-message nil) | ||
106 | |||
107 | ;; interactivity | ||
108 | (fset 'yes-or-no-p #'y-or-n-p) | ||
109 | |||
110 | (cuss use-dialog-box nil) | ||
111 | (cuss disabled-command-function nil) | ||
112 | |||
113 | ;; themes | ||
114 | (use-package modus-operandi-theme | ||
115 | :config | ||
116 | (load-theme 'modus-operandi t)) | ||
117 | |||
118 | (use-package modus-vivendi-theme) | ||
119 | |||
120 | ;; fonts | ||
121 | (set-face-attribute 'default nil | ||
122 | :family "DejaVu Sans Mono" | ||
123 | :height 110) | ||
124 | |||
125 | (set-face-attribute 'fixed-pitch nil | ||
126 | :family "DejaVu Sans Mono" | ||
127 | :height 110) | ||
128 | |||
129 | (set-face-attribute 'variable-pitch nil | ||
130 | :family "DejaVu Serif" | ||
131 | :height 120) | ||
132 | |||
133 | ;; unicode | ||
134 | (use-package unicode-fonts | ||
135 | :config | ||
136 | (unicode-fonts-setup)) | ||
137 | |||
138 | ;;; Selecting / Minibuffer | ||
139 | ;; ignore case | ||
140 | (cuss completion-ignore-case t) | ||
141 | (cuss read-buffer-completion-ignore-case t) | ||
142 | (cuss read-file-name-completion-ignore-case t) | ||
143 | |||
144 | (use-package selectrum | ||
145 | :config | ||
146 | (selectrum-mode +1)) | ||
147 | |||
148 | (use-package prescient | ||
149 | :config | ||
150 | (prescient-persist-mode +1)) | ||
151 | |||
152 | (use-package selectrum-prescient | ||
153 | :after (selectrum prescient) | ||
154 | :config | ||
155 | (selectrum-prescient-mode +1)) | ||
156 | |||
157 | ;; searching | ||
158 | (use-package ctrlf | ||
159 | :custom | ||
160 | (ctrlf-show-match-count-at-eol nil) | ||
161 | :config | ||
162 | (ctrlf-mode +1)) | ||
163 | |||
164 | ;;; Undo | ||
165 | (use-package undo-fu | ||
166 | :bind | ||
167 | ("C-/" . undo-fu-only-undo) | ||
168 | ("C-?" . undo-fu-only-redo)) | ||
169 | |||
170 | (use-package undo-fu-session | ||
171 | :after no-littering | ||
172 | :custom | ||
173 | (undo-fu-session-incompatible-files | ||
174 | '("/COMMIT_EDITMSG\\'" | ||
175 | "/git-rebase-todo\\'")) | ||
176 | (undo-fu-session-directory | ||
177 | (no-littering-expand-var-file-name "undos/")) | ||
178 | :config | ||
179 | (global-undo-fu-session-mode +1)) | ||
180 | |||
181 | ;;; Text editing | ||
182 | ;; visual line mode | ||
183 | (global-visual-line-mode +1) | ||
184 | |||
185 | (use-package whole-line-or-region | ||
186 | :config | ||
187 | (whole-line-or-region-global-mode +1)) | ||
188 | |||
189 | (use-package expand-region | ||
190 | :bind | ||
191 | ("C-=" . er/expand-region)) | ||
192 | |||
193 | ;; delete the selection when typing | ||
194 | (delete-selection-mode +1) | ||
195 | |||
196 | ;; clipboard | ||
197 | (cuss save-interprogram-paste-before-kill t) ; save existing clipboard text to kill ring before replacing it | ||
198 | |||
199 | ;; don't insert tabs. | ||
200 | (cuss indent-tabs-mode nil) | ||
201 | |||
202 | ;;; Programming | ||
203 | ;; Git | ||
204 | (use-package magit | ||
205 | :bind | ||
206 | ("C-x g" . magit-status) | ||
207 | :config | ||
208 | (add-to-list 'magit-no-confirm 'stage-all-changes)) | ||
209 | |||
210 | (when (executable-find "cmake") | ||
211 | (use-package libgit) | ||
212 | (use-package magit-libgit)) | ||
213 | |||
214 | (use-package forge | ||
215 | :after magit | ||
216 | :custom | ||
217 | (forge-owned-accounts '(("duckwork")))) | ||
218 | |||
219 | ;; Code formatting | ||
220 | (use-package format-all | ||
221 | :hook | ||
222 | (prog-mode . format-all-mode)) | ||
223 | |||
224 | ;; display | ||
225 | (add-hook 'prog-mode-hook #'prettify-symbols-mode) | ||
226 | |||
227 | ;; parentheses | ||
228 | (cuss show-paren-style 'mixed) | ||
229 | (show-paren-mode +1) | ||
230 | |||
231 | (use-package smartparens | ||
232 | :init | ||
233 | (defun acdw/setup-smartparens () | ||
234 | (require 'smartparens-config) | ||
235 | (smartparens-mode +1)) | ||
236 | :hook | ||
237 | (prog-mode . acdw/setup-smartparens)) | ||
238 | |||
239 | (use-package rainbow-delimiters | ||
240 | :hook | ||
241 | (prog-mode . rainbow-delimiters-mode)) | ||
242 | |||
243 | ;; line numbers | ||
244 | (add-hook 'prog-mode-hook | ||
245 | (if (and (fboundp 'display-line-numbers-mode) | ||
246 | (display-graphic-p)) | ||
247 | #'display-line-numbers-mode | ||
248 | #'linum-mode)) | ||
249 | |||
250 | ;;; Writing | ||
251 | (cuss sentence-end-double-space t) | ||