-
Notifications
You must be signed in to change notification settings - Fork 1
/
overconfig.el
402 lines (333 loc) · 12.6 KB
/
overconfig.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
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
(defun djcb-opacity-modify (&optional dec)
"modify the transparency of the emacs frame; if DEC is t,
decrease the transparency, otherwise increase it in 10%-steps"
(let* ((alpha-or-nil (frame-parameter nil 'alpha)) ; nil before setting
(oldalpha (if alpha-or-nil alpha-or-nil 100))
(newalpha (if dec (- oldalpha 10) (+ oldalpha 10))))
(when (and (>= newalpha frame-alpha-lower-limit) (<= newalpha 100))
(modify-frame-parameters nil (list (cons 'alpha newalpha))))))
;; C-8 will increase opacity (== decrease transparency)
;; C-9 will decrease opacity (== increase transparency
;; C-0 will returns the state to normal
(global-set-key (kbd "C-8") '(lambda()(interactive)(djcb-opacity-modify)))
(global-set-key (kbd "C-9") '(lambda()(interactive)(djcb-opacity-modify t)))
(global-set-key (kbd "C-0") '(lambda()(interactive)
(modify-frame-parameters nil `((alpha . 100)))))
(global-set-key "\C-c\C-n" 'comment-dwim)
;; Desktop saving
(desktop-save-mode 1)
(report-errors "File mode specification error: %s"
(set-auto-mode))
;; disable autofill mode.
(auto-fill-mode 0)
;; set up unicode
(prefer-coding-system 'utf-8)
(set-default-coding-systems 'utf-8)
(set-terminal-coding-system 'utf-8)
(set-keyboard-coding-system 'utf-8)
(setq default-buffer-file-coding-system 'utf-8)
;; From Emacs wiki
(setq x-select-request-type '(UTF8_STRING COMPOUND_TEXT TEXT STRING))
;; Set font
(set-face-attribute 'default nil :height 100)
;; Set default browser to chromium
(setq browse-url-browser-function 'browse-url-generic
browse-url-generic-program "chromium")
;; Chromium edit extension
(require 'edit-server)
(edit-server-start)
(require 'jabber)
(require 'jabber-autoloads)
;; Notifying of new jabber.el messages.
(defvar jabber-activity-jids-count 0)
(defun jabber-message-blink ()
(let ((count (length jabber-activity-jids)))
(unless (= jabber-activity-jids-count count)
(start-process-shell-command "blink" nil
"blink" (format "--numlockled --rate %s" count))
(setq jabber-activity-jids-count count))))
(add-hook 'jabber-activity-update-hook 'jabber-message-blink)
;; don't forget to disable blinking after disconnection
(add-hook 'jabber-post-disconnect-hook
(lambda ()
(jabber-autoaway-stop)
(jabber-keepalive-stop)
(start-process-shell-command "blink" nil "blink")))
;; Notifying through libnotify
(defvar libnotify-program "/usr/bin/notify-send")
(defun notify-send (title message)
(start-process "notify" " notify"
libnotify-program "--expire-time=3000" title message))
(defun libnotify-jabber-notify (from buf text proposed-alert)
"(jabber.el hook) Notify of new Jabber chat messages via libnotify"
(when (or jabber-message-alert-same-buffer
(not (memq (selected-window) (get-buffer-window-list buf))))
(if (jabber-muc-sender-p from)
(notify-send (format "(PM) %s"
(jabber-jid-displayname (jabber-jid-user from)))
(format "%s: %s" (jabber-jid-resource from) text)))
(notify-send (format "%s" (jabber-jid-displayname from))
text)))
(add-hook 'jabber-alert-message-hooks 'libnotify-jabber-notify)
;; Send message on C-RET
(define-key jabber-chat-mode-map (kbd "RET") 'newline)
(define-key jabber-chat-mode-map [C-return] 'jabber-chat-buffer-send)
;; Open chats in their own frames (does not work)
(setq
special-display-regexps
'(("jabber-chat"
(width . 80)
(scroll-bar-width . 16)
(height . 15)
(tool-bar-lines . 0)
(menu-bar-lines 0)
;;(font . "-GURSoutline-Courier New-normal-r-normal-normal-11-82-96-96-c-70-iso8859-1")
(left . 80))))
;; Setting initial frame size
(defun set-frame-size-according-to-resolution ()
(interactive)
(if window-system
(progn
;; use 120 char wide window for largeish displays
;; and smaller 80 column windows for smaller displays
;; pick whatever numbers make sense for you
(if (> (x-display-pixel-width) 1280)
(add-to-list 'default-frame-alist (cons 'width 120))
(add-to-list 'default-frame-alist (cons 'width 80)))
;; for the height, subtract a couple hundred pixels
;; from the screen height (for panels, menubars and
;; whatnot), then divide by the height of a char to
;; get the height we want
(add-to-list 'default-frame-alist
(cons 'height 100)))))
(set-frame-size-according-to-resolution)
;; Load up Org Mode and Babel
(require 'org-install)
(require 'typopunct)
(setq-default typopunct-buffer-language 'russian)
(add-hook 'markdown-mode-hook 'turn-on-typopunct-mode)
(add-hook 'org-mode-hook 'turn-on-typopunct-mode)
(add-hook 'jabber-chat-mode-hook 'turn-on-typopunct-mode)
;; Markdown to PDF and other conversions support
(load "pandoc-mode")
(add-hook 'markdown-mode-hook 'turn-on-pandoc)
;; Load scala mode
(require 'scala-mode2)
(defconst scala-indent:eager-strategy 1
"See 'scala-indent:run-on-strategy'")
;; Load ensime mode
(require 'ensime)
;; This causes the ensime-mode to be started whenever scala-mode is started
(add-hook 'scala-mode-hook 'ensime-scala-mode-hook)
;; Ecb with type inspector and stuff
(require 'ensime-ecb)
(require 'ensime-layout-defs)
(require 'sbt)
;; Scalaz unicode hook
;;(add-to-list 'load-path (concat dotfiles-dir "/elpa-to-submit/scalaz-unicode-input-method"))
;;(require 'scalaz-unicode-input-method)
;; Only enable unicode mode for insert and emacs states in evil-mode
;;(add-hook 'evil-insert-state-entry-hook
;; (lambda () (set-input-method "scalaz-unicode")))
;;(add-hook 'evil-insert-state-exit-hook
;; (lambda () (set-input-method nil)))
;;(add-hook 'evil-emacs-state-entry-hook
;; (lambda () (set-input-method "scalaz-unicode")))
;;(add-hook 'evil-emacs-state-exit-hook
;; (lambda () (set-input-method nil)))
;; Haskell mode
;;(load "haskell-site-file")
(add-hook 'haskell-mode-hook 'turn-on-haskell-doc-mode)
(add-hook 'haskell-mode-hook 'turn-on-haskell-indentation)
(add-to-list 'auto-mode-alist '("\\.idr\\'" . haskell-mode))
;;(add-hook 'haskell-mode-hook 'turn-on-haskell-indent)
;;(add-hook 'haskell-mode-hook 'turn-on-haskell-simple-indent)
(setq haskell-program-name "ghci")
;; Proof General
(add-to-list 'load-path (concat dotfiles-dir "/elpa-to-submit/ProofGeneral-4.1/generic"))
(require 'proof-site)
;; Spaces for tabs
(setq-default indent-tabs-mode nil)
;;js2-mode
(add-to-list 'auto-mode-alist '("\\.js$" . js2-mode))
;; Show line-number in the mode line
(line-number-mode 1)
;; Show column-number in the mode line
(column-number-mode 1)
;; In every buffer, the line which contains the cursor will be fully
;; highlighted
(require 'hl-line+)
;;(toggle-hl-line-when-idle 1)
(global-hl-line-mode 1)
;; Nyan mode
(require 'nyan-mode)
(nyan-mode 1)
;;(setq nyan-wavy-trail t)
(setq nyan-bar-length 20)
;;(nyan-start-animation)
;;(nyan-start-music)
;; Colourfull brackets
(add-hook 'scala-mode-hook 'rainbow-delimiters-mode)
;; Line numbers
(require 'linum)
(global-linum-mode 1)
;; Cyrillic hotkeys
(defun reverse-input-method (input-method)
"Build the reverse mapping of single letters from INPUT-METHOD."
(interactive
(list (read-input-method-name "Use input method (default current): ")))
(if (and input-method (symbolp input-method))
(setq input-method (symbol-name input-method)))
(let ((current current-input-method)
(modifiers '(nil (control) (meta) (control meta))))
(when input-method
(activate-input-method input-method))
(when (and current-input-method quail-keyboard-layout)
(dolist (map (cdr (quail-map)))
(let* ((to (car map))
(from (quail-get-translation
(cadr map) (char-to-string to) 1)))
(when (and (characterp from) (characterp to))
(dolist (mod modifiers)
(define-key function-key-map
(vector (append mod (list from)))
(vector (append mod (list to)))))))))
(when input-method
(activate-input-method current))))
(reverse-input-method 'cyrillic-jcuken)
;; IRC chats
;; TODO move to separate file
(require 'erc)
;; joining && autojoing
;; make sure to use wildcards for e.g. freenode as the actual server
;; name can be be a bit different, which would screw up autoconnect
(erc-autojoin-mode t)
(setq erc-autojoin-channels-alist
'((".*\\.freenode.net" "#haskell" "#scala" "#scalaz")))
;; check channels
(erc-track-mode t)
(setq erc-track-exclude-types '("JOIN" "NICK" "PART" "QUIT" "MODE"
"324" "329" "332" "333" "353" "477"))
;; don't show any of this
(setq erc-hide-list '("JOIN" "PART" "QUIT" "NICK"))
(defun djcb-erc-start-or-switch ()
"Connect to ERC, or switch to last active buffer"
(interactive)
(if (get-buffer "irc.freenode.net:6667") ;; ERC already active?
(erc-track-switch-buffer 1) ;; yes: switch to last active
(when (y-or-n-p "Start ERC? ") ;; no: maybe start ERC
(erc :server "irc.freenode.net" :port 6667 :nick "folone"
:full-name "George Leontiev"))))
;; Python stuff
(when (load "flymake" t)
(defun flymake-pyflakes-init ()
(let* ((temp-file (flymake-init-create-temp-buffer-copy
'flymake-create-temp-inplace))
(local-file (file-relative-name
temp-file
(file-name-directory buffer-file-name))))
(list "/home/folone/bin/pycheckers" (list local-file))))
(add-to-list 'flymake-allowed-file-name-masks
'("\\.py\\'" flymake-pyflakes-init)))
(custom-set-variables
'(py-pychecker-command "/home/folone/bin/pycheckers")
'(py-pychecker-command-args (quote ("")))
'(python-check-command "/home/folone/bin/pycheckers"))
(add-hook 'find-file-hook 'flymake-find-file-hook)
;;(add-hook 'python-mode-hook 'flymake-mode)
;;(add-hook 'python-mode-hook 'flymake-python-pyflakes-load)
(require 'roy-mode)
;;(eval-after-load "color-theme" '(color-theme-blackboard))
;; minimap
(require 'minimap)
(require 'evil)
(evil-mode 1)
(setq evil-default-cursor t)
(set-cursor-color "#cdcdc1")
;; This function does some scala code prettifying.
(defun prettify-scala-code ()
"Replace ascii with it's unicode counterparts."
(interactive)
(save-excursion
(beginning-of-buffer)
(let ((replace-table (make-hash-table :test 'equal))
replaces)
(puthash "=>" "⇒" replace-table)
(puthash "<-" "←" replace-table)
(puthash "->" "→" replace-table)
(maphash (lambda (toreplace withreplace)
(replace-string toreplace withreplace))
replace-table)
replaces)))
(defun uglify-scala-code ()
"Replace unicode with it's ascii counterparts."
(interactive)
(save-excursion
(beginning-of-buffer)
(let ((replace-table (make-hash-table :test 'equal))
replaces)
(puthash "⇒" "=>" replace-table)
(puthash "←" "<-" replace-table)
(puthash "→" "->" replace-table)
(maphash (lambda (toreplace withreplace)
(replace-string toreplace withreplace))
replace-table)
replaces)))
;; Toggling minimap
(defun minimap-toggle ()
"Toggle minimap for current buffer."
(interactive)
(if (null minimap-bufname)
(minimap-create)
(minimap-kill)
(balance-windows))
)
;; Configuration for ibuffer
(setq ibuffer-saved-filter-groups
(quote (("default"
("Org" ;; all org-related buffers
(mode . org-mode))
("Scala"
(mode . scala-mode))
("web"
(or
(mode . js2-mode)
;; (mode . nxml-mode)
))
("Chat"
(or
(mode . erc-mode)
(mode . jabber-chat)))
("Haskell"
(mode . haskell-mode))
("SQL"
(mode .sql-mode))
("Elisp"
(filename . "el"))
))))
(add-hook 'ibuffer-mode-hook
(lambda ()
(ibuffer-switch-to-saved-filter-groups "default")))
;; Keys mapping:
;; switch to ERC with Ctrl+c e
(global-set-key (kbd "C-c e") 'djcb-erc-start-or-switch) ;; ERC
;; Scala prettification
(global-set-key (kbd "C-c p") 'prettify-scala-code)
;; F12 to toggle ecb
(global-set-key [f12] 'ecb-toggle-ecb-windows)
;; File navigation
(global-set-key [f11] 'nav)
;; Minimap
(global-set-key [f10] 'minimap-toggle)
;; Toolbar
(global-set-key [f9] 'tool-bar-mode)
;; popup-switch
;;(require 'popup-switcher)
;;(setq psw-in-window-center t)
;;(global-set-key [f2] 'psw-switch)
;; key bindings
(when (eq system-type 'darwin) ;; mac specific settings
(setq mac-option-modifier 'meta)
(setq mac-command-modifier 'meta)
(global-set-key [kp-delete] 'delete-char) ;; sets fn-delete to be right-delete
)