forked from emacs-exordium/exordium
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathinit.el
346 lines (265 loc) · 11.7 KB
/
init.el
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
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
;;;; ___ __ __ __
;;;; |__ \_/ / \ |__) | \ | | | |\/|
;;;; |___ / \ \__/ | \ |__/ | \__/ | |
;;;;
;;;; Emacs Makes All Computing Simple.
;; Reduce the frequency of garbage collection by making it happen on
;; each 100MB of allocated data (the default is on every 0.76MB). This reduces
;; the startup time.
(setq gc-cons-threshold 100000000)
(let ((min-version "24.4"))
(when (version< emacs-version min-version)
(error "This config requires at least Emacs %s, but you're running %s"
min-version emacs-version)))
(setq initial-scratch-message
"EXORDIUM DID NOT LOAD CORRECTLY.
Check the warnings and messages buffers, or restart with --debug-init")
(defconst exordium-before-init "before-init.el"
"name of the before init file")
(defconst exordium-prefs "prefs.el"
"name of the prefs file")
(defconst exordium-after-init "after-init.el"
"name of the after init file")
(defconst exordium-custom "emacs-custom.el"
"name of the customization file")
;; Use this file for HTTP proxy settings if needed for packages. Also add
;; additional packages to exordium-extra-packages for packages to be
;; automatically pulled from the elpa archives
(defconst exordium-before-init-file (locate-user-emacs-file exordium-before-init)
"location of the master before init file")
(defconst exordium-modules-dir (locate-user-emacs-file "modules")
"location of the modules directory")
(defconst exordium-themes-dir (locate-user-emacs-file "themes")
"location of the themes directory")
(defconst exordium-extensions-dir (locate-user-emacs-file "extensions")
"location of the extensions directory")
(defconst exordium-local-dir (locate-user-emacs-file "local")
"location of the local directory")
(defconst exordium-prefs-file (locate-user-emacs-file exordium-prefs)
"location of the master prefs file")
(defconst exordium-after-init-file (locate-user-emacs-file exordium-after-init)
"location of the master after init file")
(defconst exordium-custom-file (locate-user-emacs-file exordium-custom)
"location of the customization file")
;; Save any custom set variable in exordium-custom-file rather than at the end of init.el:
(setq custom-file exordium-custom-file)
(defcustom exordium-extra-packages ()
"Additional packages to auto load from elpa repositories"
:group 'exordium
:type 'list)
(defcustom exordium-extra-pinned ()
"Additional packages locations to pin to"
:group 'exordium
:type 'list)
;; Taps definition of before and after files. These are loaded
;; after master 'before', 'after', and 'prefs' files
(defconst exordium-taps-root (locate-user-emacs-file "taps")
"location of the tapped directories")
(defconst exordium-tapped-before-init-files ()
"all tapped before init files, including master")
(defconst exordium-tapped-prefs-files ()
"all tapped prefs files, including master")
(defconst exordium-tapped-after-init-files ()
"all tapped after init files, including master")
(defconst exordium-melpa-package-repo "http://melpa.org/packages/"
"URL for packages repository")
(defconst exordium-pinned-melpa-package-repo "http://melpa.org/packages/"
"URL for pinned default packages. Set to stable melpa.org if you want stable")
(defconst exordium-gnu-package-repo "http://elpa.gnu.org/packages/"
"URL for the GNU package repository")
(when (file-accessible-directory-p exordium-taps-root)
(dolist (tap (nreverse (directory-files exordium-taps-root t "^[^\.][^\.]?*+")))
(when (file-accessible-directory-p tap)
(let ((tapped (concat (file-name-as-directory tap) exordium-before-init)))
(when (file-readable-p tapped)
(add-to-list 'exordium-tapped-before-init-files tapped))
(setq tapped (concat (file-name-as-directory tap) exordium-prefs))
(when (file-readable-p tapped)
(add-to-list 'exordium-tapped-prefs-files tapped))
(setq tapped (concat (file-name-as-directory tap) exordium-after-init))
(when (file-readable-p tapped)
(add-to-list 'exordium-tapped-after-init-files tapped))))))
(when (file-readable-p exordium-before-init-file)
(add-to-list 'exordium-tapped-before-init-files exordium-before-init-file))
(when (file-readable-p exordium-prefs-file)
(add-to-list 'exordium-tapped-prefs-files exordium-prefs-file))
(when (file-readable-p exordium-after-init-file)
(add-to-list 'exordium-tapped-after-init-files exordium-after-init-file))
(when (file-readable-p exordium-custom-file)
(add-to-list 'exordium-tapped-after-init-files exordium-custom-file))
;; Load before init files
(dolist (tapped-file exordium-tapped-before-init-files)
(load tapped-file))
;;; Packages from Melpa
;; Use M-x `package-refresh-contents' to update the cache.
;; Use M-x `package-list-package' to load and display the list of packages,
;; then press I to mark for installation and X to execute (it's like dired).
;; Initialize the package system
(require 'package)
(add-to-list 'package-archives
(cons "melpa" exordium-melpa-package-repo) t)
(add-to-list 'package-archives
(cons "melpa-pinned" exordium-pinned-melpa-package-repo) t)
(add-to-list 'package-archives
(cons "gnu" exordium-gnu-package-repo) t)
(package-initialize)
;; Load the packages we need if they are not installed already
(let ((package-pinned-packages (append
'((use-package . "melpa-pinned")
(diminish . "melpa-pinned")
(bind-key . "melpa-pinned"))
exordium-extra-pinned))
(has-refreshed nil))
(defun update-package (p has-refreshed)
(unless (package-installed-p p)
(unless has-refreshed
(message "Refreshing package database...")
(package-refresh-contents)
(setq has-refreshed t)
(message "Done."))
(package-install p)))
(dolist (pkg package-pinned-packages)
(let ((p (car pkg)))
(update-package p has-refreshed)))
(dolist (pkg exordium-extra-packages)
(update-package pkg has-refreshed)))
;;; Path for "require"
(add-to-list 'load-path exordium-modules-dir)
(defun add-directory-tree-to-load-path (dir &optional ignore-if-absent)
"Add DIR and all its subdirs to the load path."
(cond ((file-directory-p dir)
(add-to-list 'load-path dir)
(let ((default-directory dir))
(normal-top-level-add-subdirs-to-load-path)))
((not ignore-if-absent)
(warn "Missing directory: %s" dir))))
(add-directory-tree-to-load-path exordium-extensions-dir)
(add-directory-tree-to-load-path exordium-themes-dir)
(add-directory-tree-to-load-path exordium-local-dir t)
(setq custom-theme-directory exordium-themes-dir)
;; This is only needed once, near the top of the file
(eval-when-compile
;; Following line is not needed if use-package.el is in ~/.emacs.d
(require 'use-package))
(require 'diminish) ;; if you use :diminish
(require 'bind-key) ;; if you use any :bind variant
(require 'use-package-ensure)
(setq use-package-always-ensure t)
(setq use-package-compute-statistics t)
;;; Load Modules
(use-package bytecomp :ensure nil)
(defun recompile-modules ()
"Recompile modules for which the .elc is older than the .el, if
the .elc exists. Also discard .elc without corresponding .el"
(interactive)
(dolist (dir (list exordium-modules-dir
exordium-themes-dir
exordium-extensions-dir
exordium-local-dir))
(when (file-directory-p dir)
;; Recompile
(dolist (el (directory-files dir t "\\.el$"))
(let ((elc (byte-compile-dest-file el)))
(when (and (file-exists-p elc)
(file-newer-than-file-p el elc))
(byte-compile-file el))))
;; Discard .elc singletons
(dolist (elc (directory-files dir t "\\.elc$"))
(let ((el (concat (concat (file-name-sans-extension elc) ".el"))))
(unless (file-exists-p el)
(warn "Removing singleton .elc file: %s" elc)
(delete-file elc)))))))
(recompile-modules)
(use-package init-lib :ensure nil) ; utility functions - load this first
(use-package init-environment :ensure nil) ; environment variables
;;; Local preferences (fonts, frame size etc.)
(use-package init-prefs :ensure nil) ; defines variables that prefs.el can override
(dolist (tapped-file exordium-tapped-prefs-files)
(load tapped-file))
;;; Themes
;;; Note: use "export TERM=xterm-256color" for emacs -nw
(use-package init-progress-bar :ensure nil)
(when exordium-nw
(set-face-background 'highlight nil))
(use-package init-themes :ensure nil :if exordium-theme)
;;; Desktop
(when exordium-desktop
(use-package init-desktop :ensure nil))
;;; Look and feel
(use-package init-look-and-feel :ensure nil) ; fonts, UI, keybindings, saving files etc.
(use-package init-font-lock :ensure nil) ; enables/disables font-lock globally.
(use-package init-linum :ensure nil) ; line numbers
(use-package init-smooth-scroll
:ensure nil
:if exordium-smooth-scroll
:config (smooth-scroll-mode 1)) ; smooth
; scroll
(update-progress-bar)
;;; Usability
(use-package init-window-manager :ensure nil) ; navigate between windows
(use-package init-util :ensure nil) ; utilities like match paren, bookmarks...
(use-package init-ido :ensure nil) ; supercharged completion engine
(use-package init-highlight :ensure nil) ; highlighting current line, symbol under point
(use-package init-autocomplete :ensure nil
:if (eq exordium-complete-mode :auto-complete))
(use-package init-company :ensure nil
:if (eq exordium-complete-mode :company))
(use-package init-helm-projectile :ensure nil
:if exordium-helm-projectile)
(use-package init-helm :ensure nil) ; setup helm
(update-progress-bar)
(use-package init-dired :ensure nil) ; enable dired+ and wdired permission editing
(use-package init-git :ensure nil) ; Magit and git gutter
(use-package init-git-visit-diffs :ensure nil) ; visit diffs in successive narrowed buffers
(use-package init-flb-mode :ensure nil) ; frame-local buffers
(update-progress-bar)
;;; Prog mode
(use-package init-prog-mode :ensure nil)
;;; Shell mode
(use-package init-shell :ensure nil)
;;; Major modes
(use-package init-markdown :ensure nil)
(use-package init-org :ensure nil)
(use-package init-xml :ensure nil)
;;; OS-specific things
(use-package init-osx :ensure nil :if exordium-osx)
;;; C++
(use-package init-cpp :ensure nil)
(use-package init-bde-style :ensure nil)
(use-package init-yasnippet :ensure nil :if exordium-yasnippet)
(use-package init-gdb :ensure nil)
;;; RTags
(use-package init-rtags :ensure nil)
(when exordium-rtags-auto-complete
(rtags-auto-complete))
(use-package init-rtags-helm :ensure nil)
(use-package init-rtags-cmake :ensure nil)
(use-package init-rtags-cdb :ensure nil)
(update-progress-bar)
;;; JS
(use-package init-javascript :ensure nil)
;;; Python
(use-package init-python :ensure nil)
;;; Ruby
(use-package init-ruby :ensure nil)
;;; Lisp
(use-package init-elisp :ensure nil)
;;; Clojure
(use-package init-clojure :ensure nil :if exordium-clojure)
;;; Groovy
(use-package init-groovy :ensure nil)
;;; include-what-you-use
(use-package init-iwyu :ensure nil)
(update-progress-bar)
;;; Local extensions
(dolist (tapped-file exordium-tapped-after-init-files)
(load tapped-file))
(use-package init-powerline :ensure nil
:if (and exordium-theme exordium-enable-powerline))
(update-progress-bar)
;;; Greetings
(setq initial-scratch-message
(let ((current-user (split-string (user-full-name) " ")))
(format ";; Happy hacking %s!
" (if current-user (car current-user) exordium-current-user))))
;;; End of file