diff options
Diffstat (limited to 'lisp/+defaults.el')
-rw-r--r-- | lisp/+defaults.el | 239 |
1 files changed, 239 insertions, 0 deletions
diff --git a/lisp/+defaults.el b/lisp/+defaults.el new file mode 100644 index 0000000..ee49480 --- /dev/null +++ b/lisp/+defaults.el | |||
@@ -0,0 +1,239 @@ | |||
1 | ;;; +defaults.el --- measured defaults for Emacs -*- lexical-binding: t -*- | ||
2 | |||
3 | ;;; Commentary: | ||
4 | |||
5 | ;; I find myself copy-pasting a lot of "boilerplate" type code when | ||
6 | ;; bankrupting my Emacs config and starting afresh. Instead of doing | ||
7 | ;; that, I'm putting it here, where it'll be easier to include in my | ||
8 | ;; config. | ||
9 | |||
10 | ;; Of course, some might say I could just ... stop bankrupting my | ||
11 | ;; Emacs. But like, why would I want to? | ||
12 | |||
13 | ;; Other notable packages include | ||
14 | ;; https://git.sr.ht/~technomancy/better-defaults/ | ||
15 | |||
16 | ;;; Code: | ||
17 | |||
18 | (require 'early-init (locate-user-emacs-file "early-init.el")) | ||
19 | |||
20 | (defun +set-major-mode-from-buffer-name (&optional buf) | ||
21 | "Set the major mode for BUF from the buffer's name. | ||
22 | Do this only if the buffer is not visiting a file." | ||
23 | (unless buffer-file-name | ||
24 | (let ((buffer-file-name (buffer-name buf))) | ||
25 | (set-auto-mode)))) | ||
26 | |||
27 | ;;; General settings | ||
28 | |||
29 | (setq-default | ||
30 | apropos-do-all t | ||
31 | async-shell-command-buffer 'new-buffer | ||
32 | async-shell-command-display-buffer nil | ||
33 | auto-hscroll-mode 'current-line | ||
34 | auto-revert-verbose nil | ||
35 | auto-save-file-name-transforms `((".*" ,(.etc "auto-save/" t) t)) | ||
36 | auto-save-interval 60 | ||
37 | auto-save-list-file-prefix (.etc "auto-save/.saves-" t) | ||
38 | auto-save-timeout 60 | ||
39 | auto-save-visited-interval 60 | ||
40 | auto-window-vscroll nil | ||
41 | backup-by-copying t | ||
42 | backup-directory-alist `((".*" . ,(.etc "backup/" t))) | ||
43 | blink-cursor-blinks 1 | ||
44 | completion-category-defaults nil | ||
45 | completion-category-overrides '((file (styles . (partial-completion)))) | ||
46 | completion-ignore-case t | ||
47 | completion-styles '(substring partial-completion) | ||
48 | cursor-in-non-selected-windows 'hollow | ||
49 | cursor-type 'bar | ||
50 | custom-file (.etc "custom.el") | ||
51 | delete-old-versions t | ||
52 | echo-keystrokes 0.1 | ||
53 | ediff-window-setup-function 'ediff-setup-windows-plain | ||
54 | eldoc-echo-area-use-multiline-p nil | ||
55 | eldoc-idle-delay 0.1 | ||
56 | enable-recursive-minibuffers t | ||
57 | executable-prefix-env t | ||
58 | fast-but-imprecise-scrolling t | ||
59 | file-name-shadow-properties '(invisible t intangible t) | ||
60 | frame-resize-pixelwise t | ||
61 | global-auto-revert-non-file-buffers t | ||
62 | global-mark-ring-max 100 | ||
63 | hscroll-step 1 | ||
64 | imenu-auto-rescan t | ||
65 | indent-tabs-mode nil | ||
66 | inhibit-startup-screen t | ||
67 | initial-buffer-choice t | ||
68 | kill-do-not-save-duplicates t | ||
69 | kill-read-only-ok t | ||
70 | kill-ring-max 500 | ||
71 | kmacro-ring-max 20 | ||
72 | load-prefer-newer t | ||
73 | major-mode '+set-major-mode-from-buffer-name | ||
74 | mark-ring-max 50 | ||
75 | minibuffer-eldef-shorten-default t | ||
76 | minibuffer-prompt-properties '(read-only t | ||
77 | cursor-intangible t | ||
78 | face minibuffer-prompt) | ||
79 | mode-require-final-newline 'visit-save | ||
80 | mouse-drag-copy-region t | ||
81 | mouse-yank-at-point t | ||
82 | native-comp-async-report-warnings-errors 'silent | ||
83 | read-answer-short t | ||
84 | read-buffer-completion-ignore-case t | ||
85 | read-extended-command-predicate (when | ||
86 | (fboundp | ||
87 | 'command-completion-default-include-p) | ||
88 | 'command-completion-default-include-p) | ||
89 | recenter-positions '(top middle bottom) | ||
90 | regexp-search-ring-max 100 | ||
91 | regexp-search-ring-max 200 | ||
92 | save-interprogram-paste-before-kill t | ||
93 | scroll-conservatively 101 | ||
94 | scroll-preserve-screen-position 1 | ||
95 | scroll-step 1 | ||
96 | search-ring-max 200 | ||
97 | search-ring-max 200 | ||
98 | sentence-end-double-space t | ||
99 | set-mark-command-repeat-pop t | ||
100 | show-paren-delay 0 | ||
101 | show-paren-style 'mixed | ||
102 | show-paren-when-point-in-periphery t | ||
103 | show-paren-when-point-inside-paren t | ||
104 | tramp-backup-directory-alist backup-directory-alist | ||
105 | use-dialog-box nil | ||
106 | use-file-dialog nil | ||
107 | use-short-answers t | ||
108 | vc-follow-symlinks t | ||
109 | vc-make-backup-files t | ||
110 | version-control t | ||
111 | view-read-only t | ||
112 | visible-bell nil | ||
113 | window-resize-pixelwise t | ||
114 | x-select-enable-clipboard t | ||
115 | x-select-enable-primary t | ||
116 | yank-pop-change-selection t | ||
117 | ) | ||
118 | |||
119 | (when (version< emacs-version "28") | ||
120 | (fset 'yes-or-no-p 'y-or-n-p)) | ||
121 | |||
122 | ;; Encoding -- UTF-8 everywhere | ||
123 | (setq-default locale-coding-system 'utf-8-unix | ||
124 | coding-system-for-read 'utf-8-unix | ||
125 | coding-system-for-write 'utf-8-unix | ||
126 | buffer-file-coding-system 'utf-8-unix | ||
127 | default-process-coding-system '(utf-8-unix . utf-8-unix) | ||
128 | x-select-request-type '(UTF8_STRING | ||
129 | COMPOUND_TEXT | ||
130 | TEXT | ||
131 | STRING)) | ||
132 | |||
133 | (set-charset-priority 'unicode) | ||
134 | (set-language-environment "UTF-8") | ||
135 | (prefer-coding-system 'utf-8-unix) | ||
136 | (set-default-coding-systems 'utf-8-unix) | ||
137 | (set-terminal-coding-system 'utf-8-unix) | ||
138 | (set-keyboard-coding-system 'utf-8-unix) | ||
139 | |||
140 | (pcase system-type | ||
141 | ((or 'ms-dos 'windows-nt) | ||
142 | (set-clipboard-coding-system 'utf-16-le) | ||
143 | (set-selection-coding-system 'utf-16-le)) | ||
144 | (_ | ||
145 | (set-selection-coding-system 'utf-8) | ||
146 | (set-clipboard-coding-system 'utf-8))) | ||
147 | |||
148 | ;;; Modes | ||
149 | |||
150 | (dolist (enable-mode '(global-auto-revert-mode | ||
151 | blink-cursor-mode | ||
152 | electric-pair-mode | ||
153 | show-paren-mode | ||
154 | global-so-long-mode | ||
155 | minibuffer-depth-indicate-mode | ||
156 | file-name-shadow-mode | ||
157 | minibuffer-electric-default-mode | ||
158 | delete-selection-mode | ||
159 | column-number-mode)) | ||
160 | (when (fboundp enable-mode) | ||
161 | (funcall enable-mode +1))) | ||
162 | |||
163 | (dolist (disable-mode '(tooltip-mode | ||
164 | tool-bar-mode | ||
165 | menu-bar-mode | ||
166 | scroll-bar-mode | ||
167 | horizontal-scroll-bar-mode)) | ||
168 | (when (fboundp disable-mode) | ||
169 | (funcall disable-mode -1))) | ||
170 | |||
171 | ;;; Hooks | ||
172 | |||
173 | (add-hook 'after-save-hook 'executable-make-buffer-file-executable-if-script-p) | ||
174 | (add-hook 'minibuffer-setup-hook 'cursor-intangible-mode) | ||
175 | |||
176 | ;;; Bindings | ||
177 | |||
178 | (global-set-key (kbd "M-/") 'hippie-expand) | ||
179 | (global-set-key (kbd "M-=") 'count-words) | ||
180 | (global-set-key (kbd "C-x C-b") 'ibuffer) | ||
181 | (global-set-key (kbd "C-s") 'isearch-forward-regexp) | ||
182 | (global-set-key (kbd "C-r") 'isearch-backward-regexp) | ||
183 | (global-set-key (kbd "C-M-s") 'isearch-forward) | ||
184 | (global-set-key (kbd "C-M-r") 'isearch-backward) | ||
185 | |||
186 | ;;; Required libraries | ||
187 | |||
188 | (when (require 'uniquify nil :noerror) | ||
189 | (setq-default uniquify-buffer-name-style 'forward | ||
190 | uniquify-separator path-separator | ||
191 | uniquify-after-kill-buffer-p t | ||
192 | uniquify-ignore-buffers-re "^\\*")) | ||
193 | |||
194 | (when (require 'goto-addr) | ||
195 | (if (fboundp 'global-goto-address-mode) | ||
196 | (global-goto-address-mode +1) | ||
197 | (add-hook 'after-change-major-mode-hook 'goto-address-mode))) | ||
198 | |||
199 | (when (require 'recentf nil :noerror) | ||
200 | (setq-default recentf-save-file (.etc "recentf.el") | ||
201 | recentf-max-menu-items 100 | ||
202 | recentf-max-saved-items nil | ||
203 | recentf-auto-cleanup 'mode) | ||
204 | (add-to-list 'recentf-exclude .etc) | ||
205 | (recentf-mode +1)) | ||
206 | |||
207 | (when (require 'repeat nil :noerror) | ||
208 | (setq-default repeat-exit-key "g" | ||
209 | repeat-exit-timeout 5) | ||
210 | (repeat-mode +1)) | ||
211 | |||
212 | (when (require 'savehist nil :noerror) | ||
213 | (setq-default history-length t | ||
214 | history-delete-duplicates t | ||
215 | history-autosave-interval 60 | ||
216 | savehist-file (.etc "savehist.el")) | ||
217 | (dolist (var '(extended-command-history | ||
218 | global-mark-ring | ||
219 | kill-ring | ||
220 | regexp-search-ring | ||
221 | search-ring | ||
222 | mark-ring)) | ||
223 | (add-to-list 'savehist-additional-variables var)) | ||
224 | (savehist-mode +1)) | ||
225 | |||
226 | (when (require 'saveplace nil :noerror) | ||
227 | (setq-default save-place-file (.etc "places.el") | ||
228 | save-place-forget-unreadable-files (eq system-type 'gnu/linux)) | ||
229 | (save-place-mode +1)) | ||
230 | |||
231 | (when (require 'tramp) | ||
232 | ;; thanks Irreal! https://irreal.org/blog/?p=895 | ||
233 | (add-to-list 'tramp-default-proxies-alist | ||
234 | '(nil "\\`root\\'" "/ssh:%h:")) | ||
235 | (add-to-list 'tramp-default-proxies-alist | ||
236 | '((regexp-quote (system-name)) nil nil))) | ||
237 | |||
238 | (provide '+defaults) | ||
239 | ;;; +defaults.el ends here | ||