blob: ce4acfd9a8377f1ec68fa5262b609cf440e69649 (
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
|
;;; td-programming.el --- for writing code -*- lexical-binding: t; -*-
;;; Code:
;;; Completion
(use-package cape
:defer 10
:init
;; Add `completion-at-point-functions', used by `completion-at-point'.
(add-to-list 'completion-at-point-functions #'cape-file)
;; Nice completion to have available everywhere.
(add-to-list 'completion-at-point-functions #'cape-dabbrev)
:config
;; Silence then pcomplete capf, no errors or messages.
(advice-add 'pcomplete-completions-at-point :around #'cape-wrap-silent)
;; Ensure that pcomplete does not write to the buffer and behaves as a pure
;; `completion-at-point-function'.
(advice-add 'pcomplete-completions-at-point :around #'cape-wrap-purify))
(use-package corfu
:ensure t
:custom
(corfu-cycle t) ; Cycle through candidates
(corfu-auto t) ; Enable auto completion.
(corfu-auto-prefix 2) ; Display completion options after two characters.
(corfu-auto-delay 0.0) ; Don't delay.
(corfu-quit-at-boundary 'separator) ; Quit if no separator has been inserted at the boundary.
(corfu-echo-documentation 0.25) ; Echo docs shortly after options.
(corfu-preview-current 'insert) ; Auto-insert the current completion.
(corfu-preselect-first nil) ; Don't select a completion right away.
:bind (:map corfu-map
("M-SPC" . corfu-insert-separator)
("C-n" . corfu-next)
([tab] . corfu-next)
("C-p" . corfu-previous)
([backtab] . corfu-previous)
("S-<return>" . corfu-insert)
("RET" . nil))
:init
;; Use corfu everywhere.
(global-corfu-mode)
;; Save completion history for better sorting.
(corfu-history-mode))
(use-package eglot
:ensure t
:defer t
:custom
(eglot-autoshutdown t)
:config
(add-to-list 'eglot-server-programs '(c-mode . ("clangd")))
(add-to-list 'eglot-server-programs '(c++-mode . ("clangd")))
(add-to-list 'eglot-server-programs '(nix-mode . ("nixd")))
(add-to-list 'eglot-server-programs '(python-mode . ("pylsp")))
(add-to-list 'eglot-server-programs '(rust-mode . ("rust-analyzer")))
:hook
((c-mode . eglot-ensure)
(c++-mode . eglot-ensure)
(nix-mode . eglot-ensure)
(python-mode . eglot-ensure)
(rust-mode . eglot-ensure)))
(use-package orderless
:ensure t
:commands (orderless)
:custom
(completion-styles '(orderless flex)))
;;; Modes
(use-package dockerfile-mode
:ensure t
:defer t)
(use-package haskell-mode
:ensure t
:defer t)
(use-package markdown-mode
:ensure t
:defer t)
(use-package nix-mode
:ensure t
:defer t)
(use-package python-mode
:ensure t
:defer t)
(use-package rust-mode
:ensure t
:defer t
:config
(setq rust-format-on-save nil))
(use-package toml-mode
:ensure t
:defer t)
(use-package yaml-mode
:ensure t
:defer t)
;;; Tooling & Enhancements
(use-package compile
:bind (("C-x C-m" . compile))
:custom
(compilation-scroll-output t)
;; By default, use `compile' to search for text in files and display results
;; in a separate buffer. I find this workflow to be a bit nicer than
;; `consult-ripgrep' when searching outside of the current directory tree.
(compile-command "rg -nS --no-heading "))
(use-package devdocs
:ensure t
:defer t
:bind (("C-h D d" . devdocs-lookup)
("C-h D i" . devdocs-install)
("C-h D x" . devdocs-delete)
("C-h D u" . devdocs-update-all)))
(use-package direnv
:ensure t
:custom
(direnv-always-show-summary t)
(direnv-show-paths-in-summary t)
:config
(direnv-mode))
(use-package magit
:ensure t
:commands magit-status)
(use-package paren-face
:ensure t
:hook ((prog-mode
eshell-mode
inferior-lisp-mode
inferior-emacs-lisp-mode
lisp-interaction-mode
sly-mrepl-mode
scheme-mode)
. paren-face-mode))
(provide 'td-programming)
;;; td-programming.el ends here
|