summaryrefslogblamecommitdiff
path: root/emacs/custom/my-prog.el
blob: 9146d2d5c9998a1dfc919a9fb7911eaaaed14cb4 (plain) (tree)
1
2
3
4
5
6
7
8
                                                                     



               
                      
 
                
































                                                                             
 






                                      


                        
                                  





                                       





                                        





                                      
                  

                                
           













                                                                                    
 







                                                                         
                                      







                                                                      
                    
                
           
                                           










                                                        

                

                   
           
                  

                      





                              


                     
                                                 
 

                        
;;; 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)
  :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))
  :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