summaryrefslogtreecommitdiff
path: root/lisp/td-programming.el
blob: 7b378e97f8a05e3376d6f624209e227dc6f9f540 (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
;;; 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
  :config
  (setq eglot-autoshutdown t
        elgot-ignored-server-capabilities '(:inlayHintProvider))
  (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 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
  ;; Using `C-u' before recompile acts like `M-x compile'.
  :bind (("C-x C-m" . recompile))
  :custom
  (compilation-scroll-output t))

(use-package direnv
  :ensure 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