summary refs log tree commit diff stats
path: root/init.el
blob: 92d15b65f36c5c5fe4466ab2708a514fe31f5909 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
:;;; init.el -*- lexical-binding: t; coding: utf-8-unix -*-
;;
;; Author: Case Duckworth <acdw@acdw.net>
;; Created: Sometime during Covid-19, 2020
;; Keywords: configuration
;; URL: https://tildegit.org/acdw/emacs
;; Bankruptcy: 5c
;;
;; This file is NOT part of GNU Emacs.
;;
;;; License:
;;
;; Everyone is permitted to do whatever with this software, without
;; limitation.  This software comes without any warranty whatsoever,
;; but with two pieces of advice:
;; - Don't hurt yourself.
;; - Make good choices.
;;
;;; Code:

;;; Add `acdw.el'
(push (expand-file-name "lisp/"
			user-emacs-directory)
      load-path)
(require 'acdw)

;;; About me
(acdw/set
 '((user-full-name "Case Duckworth")
   (user-mail-address "acdw@acdw.net")
   (calendar-location-name "Baton Rouge, LA")
   (calendar-latitude 30.4)
   (calendar-longitude -91.1)
   (calendar-date-style iso)))

;;; Good defaults

;; Lines
(acdw/set '((fill-column 80)))
(global-display-fill-column-indicator-mode +1)
(add-hook 'text-mode-hook #'turn-on-auto-fill)
(add-hook 'prog-mode-hook #'turn-on-auto-fill)
(global-so-long-mode +1)
;; Whitespace
(acdw/set `((whitespace-style
	     (empty indentation space-before-tab space-after-tab))
	    (indent-tabs-mode t)
	    (tab-width 8)))
(add-hook 'before-save-hook #'whitespace-cleanup)

;; Pairs
(add-hook 'prog-mode-hook #'electric-pair-local-mode)
(acdw/set '((show-paren-delay 0)
	    (show-paren-style mixed)
	    (show-paren-when-point-inside-paren t)
	    (show-paren-when-point-in-periphery t)))
(show-paren-mode +1)

;; Killing & Yanking
(delete-selection-mode +1)
(acdw/set `((save-interprogram-paste-before-kill t)
	    (yank-pop-change-selection t)
	    (x-select-enable-clipboard t)
	    (x-select-enable-primary t)
	    (mouse-drag-copy-region t)
	    (kill-do-not-save-duplicates t)))

;; Encoding
(set-charset-priority 'unicode)
(set-language-environment "UTF-8")
(prefer-coding-system 'utf-8-unix)
(set-default-coding-systems 'utf-8-unix)
(set-terminal-coding-system 'utf-8-unix)
(set-keyboard-coding-system 'utf-8-unix)
(set-selection-coding-system 'utf-8-unix)
(acdw/set '((locale-coding-system utf-8-unix)
	    (coding-system-for-read utf-8-unix)
	    (coding-system-for-write utf-8-unix)
	    (buffer-file-coding-system utf-8-unix)
	    (org-export-coding-system utf-8-unix)
	    (org-html-coding-system utf-8-unix)
	    (default-process-coding-system (utf-8-unix . utf-8-unix))
	    (x-select-request-type (UTF8_STRING COMPOUND_TEXT TEXT STRING))))

;; Backups
(acdw/set `((backup-by-copying t)
	    (delete-old-versions -1)
	    (version-control t)
	    (vc-make-backup-files t)
	    (backup-directory-alist ((".*" . ,(acdw/in-dir "backup/" t))))))
;; Autosaves
(acdw/set `((auto-save-file-name-transforms
	     ((".*" ,(acdw/in-dir "auto-save/" t) t)))
	    (auto-save-list-file-prefix
	     ,(acdw/in-dir "auto-save-list/.saves-" t))))
(auto-save-visited-mode +1)
;; Auto-revert
(when (require 'autorevert)
  (global-auto-revert-mode +1))
;; Save place
(when (require 'saveplace)
  (acdw/set
   `((save-place-file ,(acdw/in-dir "places"))
     (save-place-forget-unreadable-files ,(eq acdw/system :home))))
  (save-place-mode +1))
;; Recent files
(when (require 'recentf)
  (acdw/set
   `((recentf-save-file ,(acdw/in-dir "recentf"))
     (recentf-max-menu-items 100)
     (recentf-max-saved-items nil)
     (recentf-auto-cleanup 10 "Cleanup the recentf list when idle for 10s."))
   (add-to-list 'recentf-exclude acdw/dir)
   (recentf-mode +1)))

;; Move the custom file
(acdw/set `((custom-file ,(acdw/in-dir "custom.el"))))

;; Cursor
(acdw/set '((cursor-type bar)
	    (cursor-in-non-selected-windows 'box)))

(defun hook--overwrite-mode-change-cursor ()
  (setq cursor-type (if overwrite-mode t 'bar)))
(add-hook 'overwrite-mode-hook #'hook--overwrite-mode-change-cursor)

;; Bindings
(acdw/bind "C-h" 'ehelp-command :after ("ehelp" nil nil 'keymap))