-
Notifications
You must be signed in to change notification settings - Fork 0
/
init.el
172 lines (136 loc) · 5.35 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
;;; init.el --- Karl's .emacs Init File -*- lexical-binding: t -*-
;-*-Emacs-Lisp-*-
;;; Commentary:
;;
;; Karl's Emacs init file, in all of it's weird glory
;;
;;; Code:
;; Tell Emacs where to look for my other config files
(defvar user-emacs-config-directory (concat user-emacs-directory "config/")
"Variable for this user's configuration directory.")
;; user-emacs-directory + "config/" to put the config directory in the load-path
(add-to-list 'load-path (expand-file-name "config/" user-emacs-directory))
;; Start a server version of Emacs
;; First we ensure that the server.el(c) file is loaded with require
(require 'server)
;; Then we check if the function server-running-p is bound to a function
;; which means that it is available for us to use.
(add-hook 'after-init-hook
(lambda ()
(unless (and (fboundp 'server-running-p))
(server-start))))
;;;; Load in my package list
(require 'package-config)
;; Change the user-emacs-directory to keep unwanted things out of ~/.emacs.d
(setq user-emacs-directory (expand-file-name "~/.cache/emacs/")
url-history-file (expand-file-name "url/history" user-emacs-directory))
;; Use no-littering to automatically set common paths to the new
;; user-emacs-directory
(use-package no-littering
:ensure t
:defer nil)
;; Keep customization settings in a temporary file (thanks Ambrevar & Daviwil!)
(setq custom-file
(if (boundp 'server-socket-dir)
(expand-file-name "custom.el" server-socket-dir)
(expand-file-name (format "emacs-custom-%s.el" (user-uid))
temporary-file-directory)))
(load custom-file t)
;; Set up: my personal info, my personal settings, and personal functions
(require 'personal-info)
(require 'personal-settings)
(require 'personal-functions)
;; Configure dired
(require 'dired-config)
;;;; Load in my current theme
(require 'theme-config)
;; Load certain packages VERY early, so that ANY packages that depend on it are
;; loaded correctly. Load project.el, using straight RIGHT NOW (ASAP), because
;; if any packages depend on it, they use `(require 'project)', then the one
;; shipped with Emacs is used, which is very old and causes problems everywhere.
;; For interaction with projects, we use project.el
;; Project commands and mannagement
(require 'project-config)
;; Load in Magit options
(require 'magit-config)
(elpaca-wait)
;;;; Load config to make navigating through Emacs and files easier.
(require 'navigation-config)
;; Configure Emacs' completion options, ordering, and display
(require 'completion-config)
;;;; Load in configuration to buffer management
(require 'buffer-manage-config)
;;;; Load in an Undo-Tree for reverting buffers
(require 'undo-tree-config)
;;;; Set up a proper terminal emulator in Emacs.
;;; term-mode and ansi-term are alright, but vterm is better.
(when (karljoad/is-guix-system)
(require 'vterm-config))
(require 'org-mode-config) ;; org-mode configuration
;; Org-mode MUST be loaded before my email config, because mu4e has a dependency
;; on org-mode.
;;;; Load in my email settings
(require 'email-config)
;;;; Load Elfeed config, to read RSS feeds
(require 'elfeed-config)
;;;; Load in configuration for Emacs' IRC client, ERC
(require 'erc-config)
;;;; Color color codes in-buffer
(require 'rainbow-mode-config)
;;;; Multiple Cursors
(require 'multiple-cursors-config)
(require 'ediff-config)
;;;; flycheck for spell/syntax checking
(require 'flycheck-config)
;;;; Snippets are provided by Yasnippet
(require 'yasnippet-config)
;;;; Configuration for TeX and all of TeX's variations/extensions
(require 'tex-config)
;; gnuplot, for command-driven and interactive command-line plotting
(require 'gnuplot-config)
;;;; LSP, for interacting with programming language servers
(require 'lsp-config)
;;;; Treesit for semantic highlighting & editing of source code
;;;; I choose to only use the version of tree-sitter support built INTO Emacs,
;;;; which requires Emacs to be >29 AND be configured with:
;;;; ./configure --with-tree-sitter.
;;;; We first check the version of Emacs before going on and potentially loading
;;;; treesit & its changing the major-mode-remap-alist.
(when (>= emacs-major-version 29)
(require 'treesit-config))
;;;; Major mode configuration and loading
(require 'prog-mode-config)
(require 'cc-mode-config) ;; C/C++
(require 'kconfig-config)
(require 'scheme-config)
(require 'guile-config)
(require 'common-lisp-config)
(require 'racket-config)
(require 'markdown-config)
(require 'rust-config)
(require 'web-mode-config)
(require 'scala-config)
(require 'haskell-config)
(require 'assembly-config)
(require 'erlang-config)
(require 'typescript-config)
(require 'vhdl-config)
(require 'verilog-config)
(require 'rust-config)
(require 'python-config)
(when (equal system-type 'gnu/linux)
(require 'nix-config)
(require 'guix-config))
;; Only pull in direnv configuration if our current system is NixOS or Guix System
(when (or (karljoad/is-nixos) (karljoad/is-guix-system))
(require 'functional-packaging-config)
(require 'envrc-config))
;; Configure various shells and their behavior
(require 'shell-config)
(require 'eshell-config)
;; (require 'test-config)
;; If Emacs has been idle for 15+ seconds, perform a GC run.
;; From https://akrl.sdf.org/#orgc15a10d
(run-with-idle-timer 15 t #'garbage-collect)
;;; init.el ends here
(put 'narrow-to-region 'disabled nil)