summaryrefslogtreecommitdiff
path: root/emacs/.emacs
blob: 016a4b7cbb77c1ddce6fab7ed73665c67f596290 (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
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
;; Package init and install
(require 'package)
(add-to-list 'package-archives
	     '("melpa" . "https://melpa.org/packages/"))
(package-initialize)

(defvar packages (list
		  'use-package
		  'geiser-chez
		  'geiser-racket
		  'company
		  'nix-mode
		  'lsp-mode
		  'magit
		  'auctex
		  'better-jumper
		  'lsp-haskell
		  ))
(defun install-stuff () (interactive)
       (mapc (lambda (pack)
	       (unless (package-installed-p pack)
		 (package-install pack))
	       ) packages)
       )

(require 'use-package)
(require 'nix-mode)
(require 'magit)

(use-package evil
  :ensure t
  :init
  (setq evil-want-integration t) ;; This is optional since it's already set to t by default.
  (setq evil-want-keybinding nil)
  (setq evil-want-C-u-scroll t)
  :config

  (evil-mode 1))

(use-package evil-collection
  :after evil
  :ensure t

  :config
  (evil-collection-init))

;; General settings
;; (global-hl-line-mode)
(global-display-line-numbers-mode)
(setq display-line-numbers-type 'relative)
(tool-bar-mode -1)
(toggle-scroll-bar -1)

(setq indent-tabs-mode nil)

(show-paren-mode 1)
(setq show-paren-when-point-inside-paren 1)

(setq backup-directory-alist '(("." . "~/.emacs_savefiles")))

(defvar color-theme-state 'dark)
(defun toggle-dark-mode ()
  (interactive)
  (let ((switch (lambda (theme state)
		  (progn
		    (setq color-theme-state state)
		    (load-theme theme))
		  )))
    (if (eq color-theme-state 'dark)
	(funcall switch 'deeper-blue 'light)
      (funcall switch 'adwaita 'dark))))
(toggle-dark-mode)

(setq-default TeX-master 'shared)

(better-jumper-mode +1)
(with-eval-after-load 'evil-maps
                      (define-key evil-motion-state-map (kbd "C-o") 'better-jumper-jump-backward)
                      (define-key evil-motion-state-map (kbd "<tab>") 'better-jumper-jump-forward))

;; The following add mappings to 40j and 20k to add it to the jump list.
;; It was stolen from [1]
(defun my-jump-advice (oldfun &rest args)
  (let ((old-pos (point)))
    (apply oldfun args)
    (when (> (abs (- (line-number-at-pos old-pos) (line-number-at-pos (point))))
	     1)
      (save-excursion
	(goto-char old-pos)
	(evil-set-jump)))))

(advice-add 'evil-next-line :around #'my-jump-advice)
(advice-add 'evil-previous-line :around #'my-jump-advice)

;; Keyboard bindings
(defun split-and-follow-horizontal ()
  (interactive)
  (split-window-below)
  (balance-windows)
  (other-window 1))
(global-set-key(kbd "C-x 2") 'split-and-follow-horizontal)
(defun split-and-follow-vertical ()
  (interactive)
  (split-window-right)
  (balance-windows)
  (other-window 1))
(global-set-key(kbd "C-x 3") 'split-and-follow-vertical)

(keyboard-translate ?\C-h ?\C-x)
(keyboard-translate ?\C-x ?\C-h)

(define-key evil-normal-state-map (kbd "SPC") 'execute-extended-command)

(global-set-key (kbd "C-x C-d") 'toggle-dark-mode)

(add-hook 'direc-mode-hook 'auto-revert-mode)

;; Completion

(require 'lsp-mode)
(require 'lsp-haskell)
(mapc (lambda (mode) (add-hook mode #'lsp)) (list
					     'c-mode-hook
					     'python-mode-hook
					     'haskell-mode-hook
					     'haskell-literate-mode-hook
					     ))

(mapc (lambda (mode) (add-hook mode 'company-mode)) (list
						     'emacs-lisp-mode-hook
						     ))

;; Custom keybinding
(define-key (current-global-map) [remap list-buffers] 'ibuffer)

(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.
 '(ansi-color-faces-vector
   [default default default italic underline success warning error])
 '(ansi-color-names-vector
   ["black" "red3" "ForestGreen" "yellow3" "blue" "magenta3" "DeepSkyBlue" "gray50"])
 '(package-selected-packages
   '(better-jumper auctex lsp-haskell haskell-mode geiser-racket magit use-package evil-surround evil-collection)))
(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.
 )

;; [1] https://www.reddit.com/r/emacs/comments/8flkrg/evil_add_numbered_movement_to_the_jump_list/dy6b8qq/