summaryrefslogtreecommitdiff
path: root/config/init-programming.el
diff options
context:
space:
mode:
authorFranck Cuny <franck@fcuny.net>2024-05-26 14:00:34 -0700
committerFranck Cuny <franck@fcuny.net>2024-05-26 14:00:34 -0700
commit38593df6bb457fc3940fcef1d93976cd56b0a2d0 (patch)
tree58fbc11815b2fe7619d1234388877ebc0763afa6 /config/init-programming.el
parenti want the eglot buffer to debug stuff (diff)
downloademacs.d-38593df6bb457fc3940fcef1d93976cd56b0a2d0.tar.gz
massive cleanup
Diffstat (limited to '')
-rw-r--r--config/init-programming.el224
1 files changed, 173 insertions, 51 deletions
diff --git a/config/init-programming.el b/config/init-programming.el
index ca1ec41..f90aaf1 100644
--- a/config/init-programming.el
+++ b/config/init-programming.el
@@ -7,6 +7,14 @@
;;; Code:
+;; `elec-pair' is a built-in minor-mode that enables auto-pairing of parens (or
+;; similar delimiters).
+(use-package elec-pair
+ :hook (prog-mode . electric-pair-mode))
+
+;; `delete-trailing-whitespace' removes the tailing whitespace.
+(add-hook 'before-save-hook 'delete-trailing-whitespace)
+
(use-package compile
:ensure nil
:hook (compilation-filter . ansi-color-compilation-filter)
@@ -22,18 +30,13 @@
(use-package eldoc
:diminish
- :hook ((c-mode-common emacs-lisp-mode) . eldoc-mode)
+ :hook ((emacs-lisp-mode) . eldoc-mode)
:custom
(eldoc-idle-delay 1)
(eldoc-documentation-strategy #'eldoc-documentation-default)
- (eldoc-echo-area-use-multiline-p 3)
- (eldoc-echo-area-prefer-doc-buffer 'maybe)
- (eldoc-echo-area-display-truncation-message nil))
-
-(use-package indent
- :commands indent-according-to-mode
- :custom
- (tab-always-indent 'complete))
+ ;; Don't resize the echo area if the documentation is longer. This is very
+ ;; distracting when combined with Eglot's highlight functionality.
+ (eldoc-echo-area-use-multiline-p nil))
(use-package tree-sitter
:ensure t
@@ -51,48 +54,167 @@
:config
(direnv-mode))
-(setq prettify-symbols-unprettify-at-point 'right-edge)
-
-(defun my/github-code-search ()
- "Search code on github for a given language."
- (interactive)
- (let ((language (completing-read
- "Language: "
- '("Emacs Lisp" "Python" "Go" "Nix")))
- (code (read-string "Code: ")))
- (browse-url
- (concat "https://github.com/search?lang=" language
- "&type=code&q=" code))))
-
-(defun my/work-code-search ()
- "Search code on sourcegraph for a given language."
- (interactive)
- (let ((language (completing-read
- "Language: "
- '("Ruby" "Python" "Go")))
- (code (read-string "Code: ")))
- (browse-url
- (concat "https://sourcegraph.rbx.com/search?q=context:global+lang:" language
- "+" code))))
-
-
-(require 'init-elisp)
-(require 'init-go)
-(require 'init-lsp)
-(require 'init-nix)
-(require 'init-python)
-(require 'init-ruby)
-(require 'init-rust)
-
-(require 'init-flymake)
-
-(require 'init-shell)
-(require 'init-json)
-(require 'init-terraform)
-(require 'init-toml)
-(require 'init-yaml)
-
-(require 'init-docker)
+(use-package emacs-lisp-mode
+ :bind (:map emacs-lisp-mode-map
+ ("C-c C-r" . eval-region)
+ ("C-c C-d" . eval-defun)
+ ("C-c C-b" . eval-buffer))
+ :hook ((emacs-lisp-mode . flymake-mode)))
+
+(use-package eglot
+ :after yasnippet
+ :bind (:map eglot-mode-map
+ ("C-c l a" . eglot-code-actions)
+ ("C-c l r" . eglot-rename)
+ ("C-c l f" . eglot-format-buffer))
+ :hook ((go-mode . eglot-ensure)
+ (python-mode . eglot-ensure)
+ (nix-mode . eglot-ensure))
+ :custom
+ (eglot-send-changes-idle-time 0.1)
+ :config
+ (setq eglot-autoshutdown t
+ ;; Disable logging of events.
+ eglot-events-buffer-size 0)
+ (setq-default eglot-workspace-configuration
+ '(:pylsp (:plugins (:ruff (:enabled t)))
+ :gopls (:usePlaceholders t
+ :staticcheck t
+ :completeUnimported t
+ :matcher "CaseSensitive")))
+
+ ;; uses https://github.com/nix-community/nixd for the LSP server instead of rnix
+ (add-to-list 'eglot-server-programs '(nix-mode . ("nixd"))))
+
+;;; go related configuration
+(use-package go-mode
+ :ensure t
+ :defer t
+ :hook ((go-mode . tree-sitter-hl-mode)
+ (go-mode . (lambda () (setq tab-width 4)))
+ (go-mode . (lambda () (add-hook 'before-save-hook 'eglot-format-buffer nil t))))
+ :bind (:map go-mode-map
+ ("C-c C-c" . compile)))
+
+(use-package gotest
+ :ensure t
+ :after go-mode
+ :custom
+ (go-test-verbose t))
+
+;;; nix related configuration
+(use-package nix-mode
+ :ensure t
+ :hook ((nix-mode . (lambda () (add-hook 'before-save-hook 'eglot-format-buffer nil t))))
+ :custom
+ (nix-indent-function 'nix-indent-line))
+
+;;; python related configuration
+(use-package python-mode
+ :hook ((python-mode . tree-sitter-hl-mode))
+ :custom
+ ;; if set to an absolute path, pyvenv won't work
+ (python-shell-interpreter "python3"))
+
+(use-package blacken
+ :ensure t
+ :hook (python-mode . blacken-mode))
+
+(use-package pyvenv
+ :ensure t
+ :config
+ (pyvenv-mode 1))
+
+(use-package ruby-mode)
+
+;;; flymake related configuration
+(use-package flymake
+ :ensure nil
+ :defer t
+ :bind (:prefix "C-c !"
+ :prefix-map flymake-prefix-map
+ ("l" . consult-flymake)
+ ("b" . flymake-show-project-diagnostics)
+ ("n" . flymake-goto-next-error)
+ ("p" . flymake-goto-prev-error))
+ :hook
+ (prog-mode . flymake-mode)
+ :custom
+ (flymake-start-on-save-buffer t)
+ (flymake-fringe-indicator-position 'left-fringe)
+ (flymake-suppress-zero-counters t)
+ (flymake-proc-compilation-prevents-syntax-check t)
+ (flymake-no-changes-timeout 9999)
+ (elisp-flymake-byte-compile-load-path load-path))
+
+;;; JSON related modules
+(use-package json-mode
+ :defer t
+ :mode "\\.json\\'")
+
+(use-package json-reformat
+ :defer t
+ :ensure t
+ :after json-mode)
+
+(use-package jq-mode
+ :defer t
+ :ensure t
+ :mode "\\.jq\\'")
+
+;;; hashicorp related modules
+(use-package terraform-mode
+ :defer t
+ :ensure t
+ :mode "\.tf\\'")
+
+(use-package hcl-mode
+ :defer t
+ :ensure t
+ :mode "\.nomad\\'")
+
+;;; TOML related modules
+(use-package toml-mode
+ :defer t
+ :ensure t)
+
+;;; YAML related modules
+(use-package yaml-mode
+ :defer t
+ :ensure t)
+
+;;; docker related modules
+(use-package docker
+ :defer t
+ :bind ("C-c d" . docker)
+ :ensure t
+ :diminish
+ :init
+ (use-package docker-image :commands docker-images)
+ (use-package docker-volume :commands docker-volumes)
+ (use-package docker-network :commands docker-containers)
+ (use-package docker-compose :commands docker-compose)
+
+ (use-package docker-container
+ :commands docker-containers
+ :custom
+ (docker-containers-shell-file-name "/bin/bash")
+ (docker-containers-show-all nil)))
+
+(use-package docker-compose-mode
+ :defer t
+ :ensure t
+ :mode "docker-compose.*\.yml\\'")
+
+(use-package dockerfile-mode
+ :defer t
+ :ensure t
+ :mode "Dockerfile[a-zA-Z.-]*\\'")
+
+(use-package protobuf-mode
+ :defer t
+ :ensure t
+ :mode "\\.proto\\'")
(provide 'init-programming)