whompmacs/whomp/whomp-development.el

156 lines
5.0 KiB
EmacsLisp

;;
;; development assistance packages
;;
;; dev layer toggles
(defcustom whomp-development nil
"Whether or not to enable development assistance packages."
:type '(set (const :tag "None" nil)
(const :tag "lsp" lspmode) ;; generally required for other modes
(const :tag "magit" magitmode) ;; git integration
(const :tag "projectile" projectilemode) ;; project management
(const :tag "go" gomode) ;; go language support
(const :tag "python" pythonmode) ;; python language support
(const :tag "elpy" elpymode) ;; python language support (elpy)
(const :tag "yaml" yamlmode) ;; yaml language support
(const :tag "rainbow-delimiters" rainbowmode) ;; rainbow-delimiters support
(const :tag "terraform" terraformmode) ;; terraform language support
(const :tag "z80" z80mode) ;; z80 assembly language support
(const :tag "typescript" typescriptmode) ;; typescript language support
(const :tag "web" webmodes) ;; web-related modes install
)
:group 'whomp-config)
;; terraform-mode
(when (memq 'terraformmode whomp-development)
(use-package terraform-mode
:straight t
:defer t)
(when (eq 'company whomp-completion)
(use-package company-terraform
:straight t
:defer t
:config
(add-hook 'terraform-mode-hook #'company-terraform-init))
(add-hook 'terraform-mode-hook #'terraform-format-on-save-mode)
(add-hook 'terraform-mode-hook #'terraform-format-on-save-mode))
(message "terraform-mode loaded"))
;; lsp-mode
(when (memq 'lspmode whomp-development)
(straight-use-package 'lsp-mode)
(straight-use-package 'lsp-ui)
(when (eq 'treemacs whomp-dirbrowser)
(straight-use-package 'lsp-treemacs))
(setq gc-cons-threshold 100000000)
(setq read-process-output-max (* 1024 1024))
(whomp/add-key-binding "l" 'lsp-keymap-prefix "lsp-keymap-prefix")
(straight-use-package 'eglot)
(require 'eglot)
(message "lsp-mode loaded"))
;; magit
(when (memq 'magitmode whomp-development)
(use-package magit
:straight t
:defer t)
(whomp/add-key-binding "g s" 'magit-status "Git status (magit entrypoint)")
(whomp/add-key-binding "g l" 'magit-log "Git log (magit entrypoint)")
(whomp/add-key-binding "g b" 'magit-blame "Git blame (magit entrypoint)")
(whomp/add-key-binding "g f" 'magit-find-file "Git find file (magit entrypoint)")
(message "magit loaded"))
;; projectile
(when (memq 'projectilemode whomp-development)
(straight-use-package 'projectile)
(whomp/add-key-binding "p" 'projectile-command-map "Projectile commands")
(message "projectile loaded"))
;; go-mode
(when (memq 'gomode whomp-development)
(straight-use-package 'go-mode)
(straight-use-package 'go-eldoc)
(straight-use-package 'go-projectile)
(straight-use-package 'go-snippets)
(setq lsp-go-analyses '((shadow . t)
(simplifycompositelit . :json-false)))
(when (executable-find "gopls")
(add-hook 'go-mode-hook #'lsp-deferred)
(add-hook 'go-mode-hook 'eglot-ensure))
(when (executable-find "goimports")
(setq gofmt-command "goimports"))
(add-hook 'before-save-hook 'gofmt-before-save)
(message "go-mode loaded"))
;; typescript-mode
(when (memq 'typescriptmode whomp-development)
(use-package typescript-mode
:straight t
:defer t
:hook (typescript-mode-hook . turn-on-font-lock))
(message "typescript-mode loaded"))
;; typescript-mode
(when (memq 'webmodes whomp-development)
(use-package css-mode
:straight t
:defer t
)
(use-package typescript-mode
:straight t
:defer t
:hook (typescript-mode-hook . turn-on-font-lock))
(message "web-modes loaded"))
;; python-mode
(when (memq 'pythonmode whomp-development)
(when (memq 'elpymode whomp-development)
(straight-use-package 'elpy)
(elpy-enable))
(when (not (memq 'elpymode whomp-development))
(add-hook 'python-mode-hook (lambda ()
(setq-local tab-width 2)))
(add-hook 'python-mode-hook #'lsp-deferred))
(when (executable-find "pylsp")
(add-hook 'python-mode-hook 'eglot-ensure))
(use-package python-black
:demand t
:straight t
:after python
:hook (python-mode . python-black-on-save-mode))
(message "python-mode loaded"))
;; yaml-mode
(when (memq 'yamlmode whomp-development)
(use-package yaml-mode
:straight t
:defer t)
(add-to-list 'auto-mode-alist '("\\.yml\\'" . yaml-mode))
(add-to-list 'auto-mode-alist '("\\.yaml\\'" . yaml-mode))
;; yaml-mode is a bit too aggressive with its indentation
;; so we'll disable it and use the default
(add-hook 'yaml-mode-hook
(lambda ()
(setq-local electric-indent-inhibit t)
(setq-local electric-layout-rules nil)))
(message "yaml-mode loaded"))
;; rainbow-delimiters-mode
(when (memq 'rainbowmode whomp-development)
(use-package rainbow-delimiters
:straight t
:defer t
:config
(add-hook 'prog-mode-hook #'rainbow-delimiters-mode)
(message "rainbow-delimiters-mode loaded")))
;; z80-mode
(when (memq 'z80mode whomp-development)
(load "~/.emacs.d/whomp/z80-mode.el")
(message "z80-mode loaded"))
(message "W.H.O.M.P. development assistance packages loaded")
(provide 'whomp-development)
;; whomp-development.el ends here