Skip to content

Latest commit

 

History

History
331 lines (284 loc) · 11.1 KB

programming-config.org

File metadata and controls

331 lines (284 loc) · 11.1 KB

Programming-related packages

Install lsp

(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)

Install dap-mode

(use-package dap-mode
  :defer t
  :after lsp-mode
  :config (dap-auto-configure-mode))

Install flycheck

(use-package flycheck
  :defer t
  :defer t
  :init (global-flycheck-mode))

Install smartparens

(use-package smartparens
  :defer t
  :diminish smartparens-mode
  :config
  (add-hook 'prog-mode-hook 'smartparens-mode))

Install yaml-mode

(use-package yaml-mode
  :defer t)

Install rainbow-delimiters for improved readability

(use-package rainbow-delimiters
  :defer t
  :config
  (add-hook 'prog-mode-hook 'rainbow-delimiters-mode))

Install treemacs

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)

Programming mode(s) tweaks

Enable line numbers

(add-hook 'prog-mode-hook 'display-line-numbers-mode)

Highlight current line

(add-hook 'prog-mode-hook 'hl-line-mode)

Enable subword-mode

(add-hook 'prog-mode-hook 'subword-mode)

Expand parentheses

(add-hook 'prog-mode-hook 'electric-pair-mode)

PHP Development

According to the documentation php-mode behaves weird when working with scripts that contain HTML code and suggests using =web-mode= for such cases.

Install php-mode

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)

Install web-mode

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

Working with Docker

Install dockerfile-mode

(use-package dockerfile-mode
  :defer t)

Install docker-compose-mode

(use-package docker-compose-mode
  :defer t)

Python development

lsp setup is from LSP-mode page. Some tricks are adapted from Emacs - the best Python editor.

Install pyvenv

  (use-package pyvenv
    :defer t
    :defer t
    :config (progn
		 (add-hook 'pyvenv-post-activate-hooks 'pyvenv-restart-python)))

Install py-yapf

(use-package py-yapf
  :defer t
  :after (python-mode lsp-mode)
  :commands (py-yapf-buffer py-yapf-enable-on-save))

Install lsp-python-ms

(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

Format python buffers on save

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)

JavaScript development

Install rjsx-mode

(use-package rjsx-mode
  :defer t
  :mode "\\.js\\'")

Intall prettier-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))

XML

Configure nxml-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\\)\\'"))

YAML

Github uses yaml files for configuring Github Actions so from time to time I have to work with yaml.

Install yaml-mode

Once again this snippet was copied from the configuration of ~rememberYou~.

(use-package yaml-mode
  :hook (yaml-mode . lsp-deferred)
  :mode ("\\.\\(yaml\\|yml\\)\\'"))

SQL

For working with SQL scripts use the packages from configuration of ~rememberYou~.

Install sql-mode

(use-package sql-mode
  :defer t
  :mode "\\.sql\\'")

Install sql-indent

(use-package sql-indent
  :hook (sql-mode . sqlind-minor-mode))

PowerShell

(use-package powershell
  :defer t)