(defun rp/setup-lsp-mode()
(progn
(setq lsp-headerline-breadcrumb-segments '(path-up-to-project file symbols))
(lsp-headerline-breadcrumb-mode)))
(use-package lsp-mode
:defer t
:commands (lsp lsp-deferred)
:hook ((prog-mode . lsp)
(lsp-mode . rp/setup-lsp-mode))
:init (setq lsp-keymap-prefix "C-c l")
:config (lsp-enable-which-key-integration t))
(use-package lsp-ui
:defer t
:config
(setq lsp-ui-doc-max-height 20
lsp-ui-doc-max-width 50
lsp-ui-sideline-ignore-duplicate t
lsp-ui-peek-always-show t)
:commands lsp-ui-mode)
(use-package helm-lsp
:defer t
:commands helm-lsp-workspace-symbol)
(use-package lsp-treemacs
:commands lsp-treemacs-errors-list)
(use-package dap-mode
:defer t
:after lsp-mode
:config (dap-auto-configure-mode))
(use-package flycheck
:defer t
:defer t
:init (global-flycheck-mode))
(use-package smartparens
:defer t
:diminish smartparens-mode
:config
(add-hook 'prog-mode-hook 'smartparens-mode))
(use-package yaml-mode
:defer t)
(use-package rainbow-delimiters
:defer t
:config
(add-hook 'prog-mode-hook 'rainbow-delimiters-mode))
Treemacs
configuration copied from =Installation= section of the package GitHub page.
(use-package treemacs
:defer t
:defer t
:config
(progn
(setq treemacs-collapse-dirs (if treemacs-python-executable 3 0)
treemacs-deferred-git-apply-delay 0.5
treemacs-directory-name-transformer #'identity
treemacs-display-in-side-window t
treemacs-eldoc-display t
treemacs-file-event-delay 5000
treemacs-file-extension-regex treemacs-last-period-regex-value
treemacs-file-follow-delay 0.2
treemacs-file-name-transformer #'identity
treemacs-follow-after-init t
treemacs-expand-after-init t
treemacs-git-command-pipe ""
treemacs-goto-tag-strategy 'refetch-index
treemacs-indentation 2
treemacs-indentation-string " "
treemacs-is-never-other-window nil
treemacs-max-git-entries 5000
treemacs-missing-project-action 'ask
treemacs-move-forward-on-expand nil
treemacs-no-png-images nil
treemacs-no-delete-other-windows t
treemacs-project-follow-cleanup nil
treemacs-persist-file (expand-file-name ".cache/treemacs-persist"
user-emacs-directory)
treemacs-position 'left
treemacs-read-string-input 'from-child-frame
treemacs-recenter-distance 0.1
treemacs-recenter-after-file-follow nil
treemacs-recenter-after-tag-follow nil
treemacs-recenter-after-project-jump 'always
treemacs-recenter-after-project-expand 'on-distance
treemacs-litter-directories '("/node_modules" "/.venv" "/.cask")
treemacs-show-cursor nil
treemacs-show-hidden-files t
treemacs-silent-filewatch nil
treemacs-silent-refresh nil
treemacs-sorting 'alphabetic-asc
treemacs-select-when-already-in-treemacs 'move-back
treemacs-space-between-root-nodes t
treemacs-tag-follow-cleanup t
treemacs-tag-follow-delay 1.5
treemacs-user-mode-line-format nil
treemacs-user-header-line-format nil
treemacs-width 35
treemacs-width-is-initially-locked t
treemacs-workspace-switch-cleanup nil)
;; The default width and height of the icons is 22 pixels. If you are
;; using a Hi-DPI display, uncomment this to double the icon size.
;;(treemacs-resize-icons 44)
(treemacs-follow-mode t)
(treemacs-filewatch-mode t)
(treemacs-fringe-indicator-mode 'always)
(pcase (cons (not (null (executable-find "git")))
(not (null treemacs-python-executable)))
(`(t . t)
(treemacs-git-mode 'deferred))
(`(t . _)
(treemacs-git-mode 'simple))))
:bind
(:map global-map
("M-0" . treemacs-select-window)
("C-x t 1" . treemacs-delete-other-windows)
("C-x t t" . treemacs)
("C-x t B" . treemacs-bookmark)
("C-x t C-t" . treemacs-find-file)
("C-x t M-t" . treemacs-find-tag)))
(use-package treemacs-projectile
:after (treemacs projectile)
:defer t)
(use-package treemacs-icons-dired
:after (treemacs dired)
:defer t
:config (treemacs-icons-dired-mode))
(use-package treemacs-magit
:after (treemacs magit)
:defer t)
(add-hook 'prog-mode-hook 'display-line-numbers-mode)
(add-hook 'prog-mode-hook 'hl-line-mode)
(add-hook 'prog-mode-hook 'subword-mode)
(add-hook 'prog-mode-hook 'electric-pair-mode)
According to the documentation php-mode
behaves weird when working with scripts that contain HTML code and suggests using =web-mode= for such cases.
Although behaving weird, I’m not ready to uninstall php-mode
yet so just disable it.
(use-package php-mode
:defer t
:mode "\\.php\\'"
:defer t)
Stolen from Inspired by =web-mode= configuration of ~angrybacon~ with mode-specification changed.
(use-package web-mode
;; :mode "\\.php\\'"
:disabled t
:hook
(web-mode . sgml-electric-tag-pair-mode)
:custom
(web-mode-code-indent-offset 2)
(web-mode-enable-auto-opening nil)
(web-mode-enable-auto-pairing nil)
(web-mode-enable-auto-quoting nil)
(web-mode-markup-indent-offset 2)
(web-mode-enable-auto-indentation nil))
(use-package dockerfile-mode
:defer t)
(use-package docker-compose-mode
:defer t)
lsp
setup is from LSP-mode page. Some tricks are adapted from Emacs - the best Python editor.
(use-package pyvenv
:defer t
:defer t
:config (progn
(add-hook 'pyvenv-post-activate-hooks 'pyvenv-restart-python)))
(use-package py-yapf
:defer t
:after (python-mode lsp-mode)
:commands (py-yapf-buffer py-yapf-enable-on-save))
(use-package lsp-python-ms
:disabled t
:init (setq lsp-python-ms-auto-install-server t)
:hook (python-mode . (lambda ()
(require 'lsp-python-ms)
(lsp)))) ; or lsp-deferred
For some weird reason py-yapf-enable-on-save
doesn’t get attached to python-mode-hook
when adding a hook through use-package
so it has to be explicitly set.
(add-hook 'python-mode-hook 'py-yapf-enable-on-save)
(use-package rjsx-mode
:defer t
:mode "\\.js\\'")
Requires sudo apt install prettier
or npm install -g prettier
.
(use-package prettier-js
:defer t
:after (rjsx-mode)
:hook (rjsx-mode . prettier-js-mode))
The nxml-mode
is preinstalled with Emacs; to configure it I copied the configuration from ~rememberYou~.
(use-package nxml-mode
:defer t
:hook (nxml-mode . lsp-deferred)
:mode ("\\.\\(xml\\|xsd\\|wsdl\\)\\'"))
Github uses yaml
files for configuring Github Actions
so from time to time I have to work with yaml
.
Once again this snippet was copied from the configuration of ~rememberYou~.
(use-package yaml-mode
:hook (yaml-mode . lsp-deferred)
:mode ("\\.\\(yaml\\|yml\\)\\'"))
For working with SQL
scripts use the packages from configuration of ~rememberYou~.
(use-package sql-mode
:defer t
:mode "\\.sql\\'")
(use-package sql-indent
:hook (sql-mode . sqlind-minor-mode))
(use-package powershell
:defer t)