From 38593df6bb457fc3940fcef1d93976cd56b0a2d0 Mon Sep 17 00:00:00 2001 From: Franck Cuny Date: Sun, 26 May 2024 14:00:34 -0700 Subject: massive cleanup --- config/init-programming.el | 224 ++++++++++++++++++++++++++++++++++----------- 1 file changed, 173 insertions(+), 51 deletions(-) (limited to 'config/init-programming.el') 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) -- cgit 1.4.1