;;; my-prog.el --- Configures emacs for various programming languages ;;; Commentary: ;;; Code: (require 'use-package) (use-package man :custom (Man-notify-method 'aggressive) (Man-fontify-manpage-flag t)) (use-package compile :ensure nil :custom (compilation-scroll-output t) ;; Skip over warnings and info messages in compilation (compilation-skip-threshold 2) ;; Don't freeze when process reads from stdin (compilation-disable-input t) ;; Show three lines of context around the current message (compilation-context-lines 3)) (use-package flymake :ensure nil :hook ((prog-mode . flymake-mode) (conf-mode . flymake-mode)) :bind (:map flymake-mode-map (("C-c ! s" . flymake-start) ("C-c ! d" . flymake-show-buffer-diagnostics) ("C-c ! n" . flymake-goto-next-error) ("C-c ! p" . flymake-goto-prev-error))) :custom (elisp-flymake-byte-compile-load-path load-path)) ;; yasnippet is required to support place holders with eglot (use-package yasnippet :ensure t :hook ((prog-mode org-mode dap-ui-repl-mode conf-mode) . yas-minor-mode) :init (setq yas-snippet-dirs (list (expand-file-name "etc/snippets" user-emacs-directory))) :config (yas-reload-all)) (use-package auto-fill :hook (prog-mode . auto-fill-mode) :custom ;; this does not seem to work .. (comment-fill-column 80) (comment-auto-fill-only-comments t)) (use-package lispy :ensure t :config (dolist (hook '(emacs-lisp-mode-hook)) (add-hook hook #'lispy-mode))) (use-package eldoc :ensure nil :hook ((prog-mode conf-mode) . eldoc-mode) :bind ("C-c C-h" . eldoc)) (use-package eglot :after (yasnippet) :commands (eglot eglot-ensure) :ensure t :bind (:map eglot-mode-map ("C-c C-r" . eglot-rename) ("C-c C-a" . eglot-code-actions)) :hook ((go-mode . eglot-ensure) (nix-mode . eglot-ensure) (eglot-managed-mode-hook . turn-on-eldoc-mode)) :init (setq-default eglot-workspace-configuration ;; List of settings for gopls: ;; https://github.com/golang/tools/blob/master/gopls/doc/settings.md '((:gopls . ((staticcheck . t) (matcher . "CaseSensitive") (usePlaceholders . t)))))) (use-package sh-script :mode ("bashrc" . sh-mode) :hook (after-save . executable-make-buffer-file-executable-if-script-p) :config (setq-default sh-indentation 2 sh-basic-offset 2)) (use-package python :mode (("\\.py$" . python-mode)) :commands python-mode :hook ((python-mode . eldoc-mode)) :custom (python-indent-offset 2)) (use-package make-mode :config (add-hook 'makefile-mode-hook (lambda () (setq-local tab-width 2)))) (use-package go-mode :after (eglot) :ensure t :hook ((before-save . gofmt-before-save)) :bind (:map go-mode-map ("C-c C-n" . go-run) ("C-c C-c" . go-coverage) ("C-c ." . go-test-current-test) ("C-c C-f" . go-test-current-file) ("C-c C-p" . go-test-current-project)) :commands (go-run go-coverage go-test-current-test go-test-current-file go-test-current-project) :custom (tab-width 4)) (use-package gotest :ensure t :after (go-mode) :custom (go-test-verbose t)) (use-package lisp-mode :bind (("C-c C-e" . eval-buffer) ("C-c C-r" . eval-region))) (use-package nix-mode :ensure t :mode "\\.nix\\'" :hook ((before-save . nix-format-before-save))) (provide 'my-prog) ;;; my-prog.el ends here