;;; fcuny-prog.el --- Configures emacs for various programming languages ;;; Commentary: ;;; Code: (require 'fcuny-vars) (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) :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 company :ensure t :diminish company-mode :hook (prog-mode . company-mode) :custom (company-minimum-prefix-length 2) (company-tooltip-align-annotations t) (company-tooltip-limit 12) (company-idle-delay 1)) (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 company) :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)) :custom (tab-width 4)) (use-package gotest :after (go-mode) :ensure 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 'fcuny-prog) ;;; fcuny-prog.el ends here