-
Notifications
You must be signed in to change notification settings - Fork 6
/
init.el
178 lines (148 loc) · 7.6 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
; ;; Added by Package.el. This must come before configurations of
; ;; installed packages. Don't delete this line. If you don't want it,
; ;; just comment it out by adding a semicolon to the start of the line.
; ;; You may delete these explanatory comments.
; (package-initialize)
;
; (add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/"))
;
; ;; This is only needed once, near the top of the file
; (eval-when-compile
; (require 'use-package))
;
;
; (let ((default-directory "~/.emacs.d/lisp/"))
; (normal-top-level-add-subdirs-to-load-path))
;
; (add-to-list 'load-path "~/.emacs.d/lisp/elpa/auto-package-update-20180712.2045/")
;
;
; ;;(load-theme 'solarized-dark t)
;
;
;
; ;
;; This sets up the load path so that we can override it
(package-initialize)
;;Automated package update
;;(require 'auto-package-update)
;;(auto-package-update-maybe)
;;(auto-package-update-at-time "03:00")
(setq use-package-always-ensure t)
;;(add-to-list 'load-path "/usr/local/share/emacs/site-lisp")
;;(setq custom-file "~/.emacs.d/custom-settings.el")
;;(load custom-file t)
;; add MELPA package server
(unless (assoc-default "melpa" package-archives)
(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t))
(unless (assoc-default "org" package-archives)
(add-to-list 'package-archives '("org" . "https://orgmode.org/elpa/") t))
(unless package-archive-contents
(package-refresh-contents))
;; if not yet installed, install package use-package
(unless (package-installed-p 'use-package)
(package-install 'use-package))
(defvar my-init-el-start-time (current-time) "Time when init.el was started")
(require 'org)
(setq my-user-emacs-directory "~/.emacs.d/")
;; =======================================================================================
;; The init.el file looks for "config.org" and tangles its elisp blocks (matching
;; the criteria described below) to "config.el" which is loaded as Emacs configuration.
;; Inspired and copied from: http://www.holgerschurig.de/en/emacs-init-tangle/
;; This conde is from Karl Voit: https://raw.githubusercontent.com/novoid/dot-emacs/master/init.el
;; =======================================================================================
;; from: http://stackoverflow.com/questions/251908/how-can-i-insert-current-date-and-time-into-a-file-using-emacs
(defvar current-date-time-format "%a %b %d %Y-%m-%dT%H:%M:%S "
"Format of date to insert with `insert-current-date-time' func
See help of `format-time-string' for possible replacements")
;; from: http://stackoverflow.com/questions/251908/how-can-i-insert-current-date-and-time-into-a-file-using-emacs
(defvar current-time-format "%a %H:%M:%S"
"Format of date to insert with `insert-current-time' func.
Note the weekly scope of the command's precision.")
(defun my-tangle-config-org ()
"This function will write all source blocks from =config.org= into =config.el= that are ...
- not marked as =tangle: no=
- doesn't have the TODO state =DISABLED=
- have a source-code of =emacs-lisp="
(require 'org)
(let* ((body-list ())
(output-file (concat my-user-emacs-directory "config.el"))
(org-babel-default-header-args (org-babel-merge-params org-babel-default-header-args
(list (cons :tangle output-file)))))
(message "—————• Re-generating %s …" output-file)
(save-restriction
(save-excursion
(org-babel-map-src-blocks (concat my-user-emacs-directory "config.org")
(let* (
(org_block_info (org-babel-get-src-block-info 'light))
;;(block_name (nth 4 org_block_info))
(tfile (cdr (assq :tangle (nth 2 org_block_info))))
(match_for_TODO_keyword)
)
(save-excursion
(catch 'exit
;;(when (string= "" block_name)
;; (message "Going to write block name: " block_name)
;; (add-to-list 'body-list (concat "message(\"" block_name "\")"));; adding a debug statement for named blocks
;; )
(org-back-to-heading t)
(when (looking-at org-outline-regexp)
(goto-char (1- (match-end 0))))
(when (looking-at (concat " +" org-todo-regexp "\\( +\\|[ \t]*$\\)"))
(setq match_for_TODO_keyword (match-string 1)))))
(unless (or (string= "no" tfile)
(string= "DISABLED" match_for_TODO_keyword)
(not (string= "emacs-lisp" lang)))
(add-to-list 'body-list (concat "\n\n;; #####################################################################################\n"
"(message \"config • " (org-get-heading) " …\")\n\n")
)
(add-to-list 'body-list body)
))))
(with-temp-file output-file
(insert ";; ============================================================\n")
(insert ";; Don't edit this file, edit config.org' instead ...\n")
(insert ";; Auto-generated at " (format-time-string current-date-time-format (current-time)) " on host " system-name "\n")
(insert ";; ============================================================\n\n")
(insert (apply 'concat (reverse body-list))))
(message "—————• Wrote %s" output-file))))
;; following lines are executed only when my-tangle-config-org-hook-func()
;; was not invoked when saving config.org which is the normal case:
(let ((orgfile (concat my-user-emacs-directory "config.org"))
(elfile (concat my-user-emacs-directory "config.el"))
(gc-cons-threshold most-positive-fixnum))
(when (or (not (file-exists-p elfile))
(file-newer-than-file-p orgfile elfile))
(my-tangle-config-org)
;;(save-buffers-kill-emacs);; TEST: kill Emacs when config has been re-generated due to many issues when loading newly generated config.el
)
(load-file elfile))
;; when config.org is saved, re-generate config.el:
(defun my-tangle-config-org-hook-func ()
(when (string= "config.org" (buffer-name))
(let ((orgfile (concat my-user-emacs-directory "config.org"))
(elfile (concat my-user-emacs-directory "config.el")))
(my-tangle-config-org))))
(add-hook 'after-save-hook 'my-tangle-config-org-hook-func)
(message "→★ loading init.el in %.2fs" (float-time (time-subtract (current-time) my-init-el-start-time)))
(custom-set-variables
;; custom-set-variables was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
'(ac-ispell-fuzzy-limit 4)
'(ac-ispell-requires 4)
'(org-agenda-files (quote ("~/org/worktasks.org")))
'(package-selected-packages
(quote
(expand-region evil-visual-mark-mode treemacs-persp treemacs-magit treemacs-icons-dired treemacs-projectile treemacs-evil treemacs org-preview-html org-pdftools poly-R poly-markdown poly-org highlight-parentheses markdown-preview-mode markdown-preview-eww powershell powerline-evil powerline python-pytest exwm xelb ac-ispell weather-metno web ac-helm ssh mu4e-alert magit ox-latex-subfigure pydoc use-package elpy jedi flycheck-pycheckers jedi-core org-ref helm-bibtex org-pomodoro org-wc pomodoro org-evil evil helm org-babel-eval-in-repl ob-ipython ein auto-complete flycheck-stan eldoc-stan company-stan standoff-mode yasnippet-classic-snippets jupyter auto-package-update package-utils ## elisp-lint pdb-mode stan-mode stan-snippets yasnippet yasnippet-snippets))))
(custom-set-faces
;; custom-set-faces was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
)
;; ;; load org package and our emacs-config.org file
;; (use-package org
;; :ensure t
;; :config
;; (org-babel-load-file "~/.emacs.d/configuration.org"))