aboutsummaryrefslogtreecommitdiff
path: root/home-manager/.config/home-manager/common/emacs/init.el
blob: 5272cf48904d1dea3c245b321f94a3334f167422 (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
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
;;; package --- My config for emacs  -*- lexical-binding:t -*-
;;; Commentary:

;; ── PERFORMANCE ──────────────────────────────────────
;; Increase GC threshold to speed up startup
(setq gc-cons-threshold 100000000)
(setq read-process-output-max (* 1024 1024)) ; 1MB

;; ── PACKAGE SETUP ────────────────────────────────────
(require 'package)
(add-to-list 'package-archives
             '("melpa" . "https://melpa.org/packages/") t)
(package-initialize)

;;; Packages
(use-package exec-path-from-shell
  :ensure t
  :if (memq window-system '(mac ns x))
  :config
  (exec-path-from-shell-initialize))

;; ── APPEARANCE ───────────────────────────────────────
(add-to-list 'default-frame-alist '(undecorated-round . t))

(menu-bar-mode 0)
(scroll-bar-mode -1)
(tool-bar-mode -1)
(blink-cursor-mode -1)

(setq ring-bell-function 'ignore)
(setq inhibit-startup-screen t)

(use-package sweet-theme
  :ensure t
  :config
  (load-theme 'sweet t))

;; Smooth scrolling
(pixel-scroll-precision-mode 1)

;; Show line-numbers
(add-hook 'prog-mode-hook 'display-line-numbers-mode)
(add-hook 'text-mode-hook 'display-line-numbers-mode)

;; Show column numbers
(setopt column-number-mode t)

;; Follow system font
(setopt font-use-system-font t)

;; Better resizing of frames
(setopt frame-resize-pixelwise t)
(setopt window-resize-pixelwise t)

;; Keep frame size constant while resizing fonts
(setopt frame-inhibit-implied-resize t)

(setopt mode-line-compact 'long)

;; ── BASIC EDITING ────────────────────────────────────
;;; New commer Settings
(delete-selection-mode 1)
(setopt save-interprogram-paste-before-kill t)

;; Don't repeat yourself
;; Use the last part of the shortcut to replay the cmd
(repeat-mode 1)

;; SPC to scroll on RO buffers
(setopt view-read-only t)

;; imenu entries are auto updated
(setopt imenu-auto-rescan t)

(setopt tab-always-indent 'complete)
(setopt indent-tabs-mode nil)
(electric-pair-mode 1)

;; Nix store files are read-only, so auto-save files beside them fail.
(defun kd/disable-auto-save-in-nix-store ()
  (when (and buffer-file-name
             (string-prefix-p "/nix/store/" (file-truename buffer-file-name)))
    (auto-save-mode -1)))

(add-hook 'find-file-hook #'kd/disable-auto-save-in-nix-store)

;; enable y/n answers
(setq use-short-answers t)

;; ── MINIBUFFER & COMPLETIONS ─────────────────────────
(setopt minibuffer-visible-completions t)
(setopt completions-detailed t)
(setopt completions-group t)
(setopt completions-format 'one-column)
(setopt completions-max-height 20)
(setopt completions-sort 'historical)
(setopt completion-auto-select t)
(setopt completion-auto-help t)
(setopt completion-eager-update t)
(setopt completion-eager-display t)
(setopt completion-styles '(partial-completion flex initials))
(setopt completion-show-help nil)
(global-completion-preview-mode 1)

;; Use C-n/C-p to move through visible minibuffer completions
(keymap-set minibuffer-visible-completions-up-down-map
            "C-n" #'minibuffer-next-completion)
(keymap-set minibuffer-visible-completions-up-down-map
            "C-p" #'minibuffer-previous-completion)

;; Better help display
(which-key-mode 1)

;; automatically select help windows so you can dismiss them with 'q'
(setq help-window-select t)

;; ── PERSISTENCE ──────────────────────────────────────
;; Easier history navigation
(savehist-mode 1)

;; Save place in file
(save-place-mode 1)

;; ── SPELL CHECKING ───────────────────────────────────
(add-hook 'text-mode-hook 'flyspell-mode)
(add-hook 'prog-mode-hook 'flyspell-prog-mode)

;; ── CODE ─────────────────────────────────────────────
(add-hook 'prog-mode-hook 'flymake-mode)
(setopt compilation-scroll-output 'first-error)
(global-xref-mouse-mode 1)
(editorconfig-mode 1)
(etags-regen-mode 1)

;; ── VERSION CONTROL ──────────────────────────────────
(vc-auto-revert-mode 1)
(setopt vc-dir-save-some-buffers-on-revert t)
(setopt vc-find-revision-no-save t)
(setopt vc-follow-symlinks t)
(setopt vc-use-incoming-outgoing-prefixes t)

(use-package diff-hl
  :ensure t
  :demand t
  :hook (dired-mode . diff-hl-dired-mode)
  :config
  (global-diff-hl-mode 1)
  (diff-hl-flydiff-mode 1))

;; ── DIRED ────────────────────────────────────────────
(setopt dired-auto-revert-buffer t)
(setopt shell-command-prompt-show-cwd t)

;; ── PACKAGE MANAGER ──────────────────────────────────
(package-autosuggest-mode 1)

;; ── LANGUAGES ────────────────────────────────────────
(setopt treesit-auto-install-grammar 'always)
(setopt treesit-enabled-modes t)

;; Markdown using tree-sitter
(use-package markdown-ts-mode
  :ensure nil
  :mode ("\\.md\\'" "\\.mdx\\'" "\\.markdown\\'")
  :config
  (require 'markdown-ts-mode-x))

;; Nix
(use-package nix-mode
  :ensure t)

;; ── BACKUPS ─────────────────────────────────────────
;; Keep backup files in one place instead of scattered everywhere
(setq backup-directory-alist
      `(("." . ,(concat user-emacs-directory "backups/"))))
(setq auto-save-file-name-transforms
      `((".*" ,(concat user-emacs-directory "auto-saves/") t)))

(provide 'init)
;;; init.el ends here