595 lines
16 KiB
Plaintext
595 lines
16 KiB
Plaintext
(setq gnutls-algorithm-priority "NORMAL:-VERS-TLS1.3")
|
|
;;lsp performances
|
|
(setq gc-cons-threshold (* 100 1024 1024));; 100MB
|
|
(setq read-process-output-max (* 3 1024 1024));; 3MB
|
|
|
|
|
|
(custom-set-variables
|
|
;; custom-set-variables was added by Custom.
|
|
;; If you edit it by hand, you could mess it up, so be careful.
|
|
;; Your init file should contain only one such instance.
|
|
;; If there is more than one, they won't work right.
|
|
'(c-basic-offset 4)
|
|
'(c-default-style
|
|
'((c++-mode . "tuleu-c++")
|
|
(java-mode . "java")
|
|
(awk-mode . "awk")
|
|
(other . "gnu")))
|
|
'(company-idle-delay 20.0)
|
|
'(compilation-scroll-output 'first-error)
|
|
'(custom-safe-themes
|
|
'("162201cf5b5899938cfaec99c8cb35a2f1bf0775fc9ccbf5e63130a1ea217213" "e3daa8f18440301f3e54f2093fe15f4fe951986a8628e98dcd781efbec7a46f2" "6622bb651e72d8ebd66454bd86db6c3990324243ff4325c1b6df252aba63b13e" "2f8eadc12bf60b581674a41ddc319a40ed373dd4a7c577933acaff15d2bf7cc6" "f458b92de1f6cf0bdda6bce23433877e94816c3364b821eb4ea9852112f5d7dc" "016f665c0dd5f76f8404124482a0b13a573d17e92ff4eb36a66b409f4d1da410" "13096a9a6e75c7330c1bc500f30a8f4407bd618431c94aeab55c9855731a95e1" "8b148cf8154d34917dfc794b5d0fe65f21e9155977a36a5985f89c09a9669aa0" "bf948e3f55a8cd1f420373410911d0a50be5a04a8886cabe8d8e471ad8fdba8e" "680f62b751481cc5b5b44aeab824e5683cf13792c006aeba1c25ce2d89826426" "631c52620e2953e744f2b56d102eae503017047fb43d65ce028e88ef5846ea3b" default))
|
|
'(display-time-24hr-format t)
|
|
'(display-time-default-load-average nil)
|
|
'(doom-modeline-github t)
|
|
'(doom-modeline-indent-info t)
|
|
'(doom-modeline-minor-modes t)
|
|
'(doom-modeline-total-line-number t)
|
|
'(fill-column 80)
|
|
'(global-auto-revert-mode t)
|
|
'(global-display-line-numbers-mode t)
|
|
'(global-subword-mode t)
|
|
'(gofmt-command "goimports")
|
|
'(inhibit-startup-screen t)
|
|
'(lisp-body-indent 4)
|
|
'(lisp-indent-offset 4)
|
|
'(lisp-lambda-list-keyword-alignment t)
|
|
'(lisp-lambda-list-keyword-parameter-alignment t)
|
|
'(lisp-lambda-list-keyword-parameter-indentation 4)
|
|
'(lisp-loop-forms-indentation 4)
|
|
'(lisp-loop-keyword-indentation 4)
|
|
'(lisp-simple-loop-indentation 4)
|
|
'(lisp-tag-body-indentation 4)
|
|
'(lisp-tag-indentation 4)
|
|
'(org-agenda-files '("~/org/1.TODO.org"))
|
|
'(package-enable-at-startup nil)
|
|
'(package-selected-packages
|
|
'(dockerfile-mode web-mode prettier json-mode py-isort blacken pyvenv yaml-mode lsp-pyright ng2-mode lsp-ltex lsp-treemacs treemacs-nerd-icons treemacs-projectile treemacs lsp-ui lsp-mode which-key flycheck vterm projectile yasnippet-snippets yasnippet aggressive-indent doom-themes company-go zenburn-theme langtool smart-tabs-mode typescript-mode protobuf-mode opencl-mode glsl-mode go-mode markdown-mode srefactor irony cmake-mode company magit use-package))
|
|
'(safe-local-variable-values
|
|
'((vc-follow-symlinks . t)
|
|
(TeX-master . t)
|
|
(TeX-parse-self . t)))
|
|
'(system-packages-noconfirm t)
|
|
'(tab-width 4)
|
|
'(warning-suppress-log-types '((comp)))
|
|
'(whitespace-style
|
|
'(face trailing tabs lines-tail newline space-before-tab::tab space-before-tab::space space-before-tab tab-mark)))
|
|
|
|
(if (display-graphic-p)
|
|
(if (fboundp 'tool-bar-mode)
|
|
(tool-bar-mode -1))
|
|
(if (fboundp 'toggle-scroll-bar)
|
|
(toggle-scroll-bar -1))
|
|
(menu-bar-mode -1)
|
|
(if (fboundp 'tool-bar-mode)
|
|
(tool-bar-mode -1))
|
|
)
|
|
|
|
(add-to-list 'default-frame-alist '(fullscreen . maximized))
|
|
(add-hook 'before-save-hook 'delete-trailing-whitespace)
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
;; package.el and use-package bootstrap
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
|
|
(setq package-archives '(("melpa" . "https://melpa.org/packages/")
|
|
("gnu" . "https://elpa.gnu.org/packages/")))
|
|
(package-initialize)
|
|
(eval-when-compile
|
|
(unless (package-installed-p 'use-package)
|
|
(unless package-archive-contents
|
|
(package-refresh-contents))
|
|
(package-install 'use-package)
|
|
)
|
|
(require 'use-package)
|
|
)
|
|
|
|
(require 'use-package)
|
|
(require 'use-package-ensure)
|
|
(setq use-package-always-ensure t)
|
|
|
|
;; required because vterm wants this before loading.
|
|
(use-package emacs
|
|
:if (eq system-type 'gnu/linux)
|
|
:ensure-system-package
|
|
(
|
|
(cmake . cmake)
|
|
("/usr/include/vterm.h" . libvterm-dev)
|
|
)
|
|
)
|
|
|
|
|
|
(use-package doom-modeline
|
|
:init
|
|
(doom-modeline-mode 1)
|
|
(display-time-mode 1))
|
|
|
|
(use-package delight
|
|
:config
|
|
(delight '((eldoc-mode nil "eldoc")
|
|
(subword-mode nil "subword")))
|
|
)
|
|
|
|
(use-package multiple-cursors
|
|
:bind (("C-c m >" . 'mc/mark-next-like-this)
|
|
("C-c m <" . 'mc/mark-previous-like-this)
|
|
("C-c m a" . 'mc/mark-all-like-this)
|
|
("C-c m e" . 'mc/edit-lines)
|
|
)
|
|
)
|
|
|
|
(use-package doom-themes
|
|
:config
|
|
(setq doom-themes-enable-bold t ; if nil, bold is universally disabled
|
|
doom-themes-enable-italic t) ; if nil, italics is universally disabled
|
|
(load-theme 'doom-spacegrey t)
|
|
;; Enable flashing mode-line on errors
|
|
(doom-themes-visual-bell-config )
|
|
;; or for treemacs users
|
|
;;(setq doom-themes-treemacs-theme "doom-atom") ; use "doom-colors" for less minimal icon theme
|
|
;;(doom-themes-treemacs-config)
|
|
;; Corrects (and improves) org-mode's native fontification.
|
|
(doom-themes-org-config)
|
|
(defun atu/toggle-display-line-mode ()
|
|
"toggle between relative and absolute display-line-mode"
|
|
(interactive)
|
|
(if (eq display-line-numbers 'relative)
|
|
(setq display-line-numbers 'absolute)
|
|
(setq display-line-numbers 'relative)
|
|
)
|
|
)
|
|
:init
|
|
(global-whitespace-mode 1)
|
|
:bind (
|
|
("C-c d l" . 'atu/toggle-display-line-mode)
|
|
)
|
|
)
|
|
|
|
(custom-set-faces
|
|
;; custom-set-faces was added by Custom.
|
|
;; If you edit it by hand, you could mess it up, so be careful.
|
|
;; Your init file should contain only one such instance.
|
|
;; If there is more than one, they won't work right.
|
|
)
|
|
|
|
;; (use-package ansi-color
|
|
;; :config
|
|
;; (defun atu/colorize-compilation-buffer ()
|
|
;; (when (eq major-mode 'compilation-mode)
|
|
;; (ansi-color-apply-on-region compilation-filter-start (point-max))))
|
|
;; :hook
|
|
;; (compilation-filter . atu/colorize-compilation-buffer))
|
|
|
|
(use-package smart-tabs-mode
|
|
:config
|
|
(setq-default tab-width 4) ; or any other preferred value
|
|
(setq cua-auto-tabify-rectangles nil)
|
|
(smart-tabs-advice c-indent-line c-basic-offset)
|
|
(smart-tabs-advice c-indent-region c-basic-offset)
|
|
|
|
(smart-tabs-add-language-support cmake cmake-mode-hook
|
|
(
|
|
(cmake-indent . cmake-tab-width)
|
|
)
|
|
)
|
|
|
|
(smart-tabs-add-language-support protobuf protobuf-mode-hook
|
|
(
|
|
(c-indent-line . c-basic-offset)
|
|
(c-indent-region . c-basic-offset)
|
|
)
|
|
)
|
|
|
|
(smart-tabs-add-language-support glsl glsl-mode-hook
|
|
(
|
|
(c-indent-line . c-basic-offset)
|
|
(c-indent-region . c-basic-offset)
|
|
)
|
|
)
|
|
|
|
(smart-tabs-add-language-support opencl opencl-mode-hook
|
|
(
|
|
(c-indent-line . c-basic-offset)
|
|
(c-indent-region . c-basic-offset)
|
|
)
|
|
)
|
|
|
|
(smart-tabs-add-language-support elisp emacs-lisp-mode-hook
|
|
(
|
|
(lisp-indent-line . lisp-indent-offset)
|
|
(lisp-indent-region . lisp-indent-offset)
|
|
)
|
|
)
|
|
|
|
(smart-tabs-insinuate 'c 'c++ 'cmake 'nxml 'protobuf 'glsl 'elisp)
|
|
)
|
|
|
|
(use-package aggressive-indent
|
|
:hook
|
|
(emacs-lisp-mode . aggressive-indent-mode)
|
|
)
|
|
|
|
(use-package magit
|
|
:commands (magit-status)
|
|
:bind ("C-x g" . magit-status)
|
|
:hook
|
|
(magit-mode .
|
|
(lambda () (setq-local whitespace-style nil)))
|
|
:custom
|
|
(magit-credential-cache-daemon-socket nil)
|
|
)
|
|
|
|
(use-package company
|
|
:delight
|
|
:bind ( ("M-TAB" . company-complete) )
|
|
:config
|
|
(global-company-mode t)
|
|
)
|
|
|
|
(use-package cmake-mode
|
|
:hook
|
|
(cmake-mode . lsp-deferred)
|
|
:config
|
|
(setq cmake-tab-width 4)
|
|
)
|
|
|
|
|
|
(use-package yasnippet
|
|
:delight yas-minor-mode
|
|
:config
|
|
(yas-global-mode)
|
|
:after (company)
|
|
:bind ( :map yas-minor-mode-map
|
|
("TAB" . nil)
|
|
)
|
|
)
|
|
|
|
(use-package yasnippet-snippets
|
|
:after (yasnippet)
|
|
)
|
|
|
|
(use-package projectile
|
|
:bind ( :map projectile-mode-map
|
|
( "C-c p" . 'projectile-command-map)
|
|
)
|
|
:delight
|
|
:config
|
|
(projectile-mode +1)
|
|
(setq projectile-per-project-compilation-buffer t)
|
|
(projectile-register-project-type 'ng2 '("angular.json" "package.json" "tsconfig.json")
|
|
:project-file "angular.json"
|
|
:compile "npm install"
|
|
:test "ng test --progress=false"
|
|
:run "ng serve"
|
|
:test-suffix ".spec")
|
|
)
|
|
|
|
(use-package vterm)
|
|
|
|
(use-package flycheck
|
|
:delight
|
|
:bind (("C-c C-n" . 'flycheck-next-error))
|
|
:config
|
|
(defvar-local atu/flycheck-local-cache nil)
|
|
|
|
(defun atu/flycheck-checker-get (fn checker property)
|
|
(or (alist-get property (alist-get checker atu/flycheck-local-cache))
|
|
(funcall fn checker property)))
|
|
|
|
(advice-add 'flycheck-checker-get :around 'atu/flycheck-checker-get)
|
|
|
|
(setq flycheck-indication-mode 'left-margin)
|
|
|
|
;; Adjust margins and fringe widths…
|
|
(defun atu/set-flycheck-margins ()
|
|
(setq left-fringe-width 8 right-fringe-width 8
|
|
left-margin-width 1 right-margin-width 0)
|
|
(flycheck-refresh-fringes-and-margins))
|
|
:hook
|
|
(flycheck-mode . atu/set-flycheck-margins)
|
|
)
|
|
|
|
(use-package which-key
|
|
:delight
|
|
:config
|
|
(which-key-mode))
|
|
|
|
(use-package lsp-mode
|
|
:delight
|
|
:after (flycheck)
|
|
:config
|
|
(yas-minor-mode)
|
|
(if (display-graphic-p)
|
|
(setq lsp-ui-doc-use-webkit t)
|
|
)
|
|
(add-to-list 'lsp-language-id-configuration '("\\.postcss\\'" . "css"))
|
|
(advice-add 'lsp :before
|
|
(lambda (&rest _args)
|
|
(eval '(setf (lsp-session-server-id->folders (lsp-session)) (ht)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
:bind (
|
|
("C-c C-d" . lsp-ui-doc-toggle)
|
|
)
|
|
|
|
:init
|
|
;; set prefix for lsp-command-keymap (few alternatives - "C-l", "C-c l")
|
|
(setq lsp-keymap-prefix "C-c l")
|
|
:hook (
|
|
;; replace XXX-mode with concrete major-mode(e. g. python-mode)
|
|
;; if you want which-key integration
|
|
(c++-mode . lsp-deferred)
|
|
(lsp-mode . lsp-enable-which-key-integration))
|
|
:commands (lsp lsp-deferred))
|
|
|
|
(use-package lsp-ui
|
|
:commands lsp-ui-mode
|
|
:config
|
|
(setq lsp-ui-sideline-show-diagnostics nil)
|
|
:custom-face
|
|
(lsp-ui-doc-background ((t (:background "#373B41"))))
|
|
|
|
)
|
|
|
|
(use-package treemacs
|
|
:bind (("C-x t t" . treemacs)
|
|
("M-0" . treemacs-select-window))
|
|
:config
|
|
(add-hook 'treemacs-mode-hook (lambda () (display-line-numbers-mode -1)))
|
|
(treemacs-project-follow-mode t)
|
|
)
|
|
|
|
(use-package treemacs-projectile)
|
|
|
|
(use-package nerd-icons )
|
|
|
|
(use-package treemacs-nerd-icons
|
|
:config
|
|
(treemacs-load-theme "nerd-icons"))
|
|
|
|
(use-package lsp-treemacs
|
|
:after lsp-mode
|
|
)
|
|
|
|
(use-package lsp-ltex
|
|
:init
|
|
(setq lsp-ltex-version "15.2.0")) ; make sure you have set this, see below
|
|
|
|
(use-package ng2-mode
|
|
:hook
|
|
(typescript-mode . lsp-deferred)
|
|
)
|
|
|
|
(use-package lsp-pyright
|
|
:hook
|
|
(python-mode . (lambda ()
|
|
(require 'lsp-pyright)
|
|
(lsp-deferred))) ; or lsp-deferred
|
|
)
|
|
|
|
|
|
(use-package yaml-mode)
|
|
|
|
(use-package python
|
|
:custom
|
|
(python-shell-interpreter "ipython")
|
|
(python-shell-interpreter-args "-i --simple-prompt")
|
|
(python-indent-guess-indent-offset-verbose nil)
|
|
:hook
|
|
(python-mode . (lambda () (setq-local company-prescient-sort-length-enable nil)))
|
|
(python-mode . (lambda () (setq-local fill-column 88)))
|
|
(python-mode . lsp-deferred)
|
|
(python-mode . atu/activate-venv)
|
|
(lsp-managed-mode . (lambda ()
|
|
(when (derived-mode-p 'python-mode)
|
|
(setq atu/flycheck-local-cache '((lsp . ((next-checkers . (python-flake8)))))))))
|
|
|
|
)
|
|
|
|
(use-package pyvenv
|
|
:after (projectile)
|
|
:config
|
|
(defun atu/get-direnv-venv ()
|
|
"Gets .direnv from project root python venv if any"
|
|
(when-let* ((root-dir (projectile-project-root))
|
|
(direnv (concat (file-name-as-directory root-dir) ".direnv"))
|
|
(direnv-exists (file-directory-p direnv))
|
|
(venvs (directory-files direnv t "python-.*")))
|
|
(car (last venvs)))
|
|
)
|
|
(defun atu/get-dotvenv ()
|
|
"Gets .venv from project root if any"
|
|
(when-let* ((root-dir (projectile-project-root))
|
|
(venv-file (concat (file-name-as-directory root-dir) ".venv"))
|
|
(venv-exists (file-exists-p venv-file))
|
|
(venv-name (with-temp-buffer
|
|
(insert-file-contents venv-file)
|
|
(nth 0 (split-string (buffer-string))))))
|
|
venv-name)
|
|
)
|
|
|
|
(defun atu/get-venv-name ()
|
|
"Gets venv name from project root. Support .venv and .direnv structure"
|
|
(or (atu/get-dotvenv) (atu/get-direnv-venv))
|
|
)
|
|
|
|
(defun atu/activate-venv ()
|
|
"Activate python environment according to the project root"
|
|
(when-let ((venv-name (atu/get-venv-name)))
|
|
(setenv "WORKON_HOME" venv-name)
|
|
(pyvenv-mode)
|
|
(pyvenv-workon venv-name)
|
|
(pyvenv-activate venv-name)
|
|
(message (format "Using python: %s" venv-name))
|
|
)
|
|
)
|
|
|
|
(defun atu/get-venv-python ()
|
|
"returns python executable from current venv"
|
|
(when-let* ((venv-name (atu/get-venv-name))
|
|
(python-exec (concat (file-name-as-directory venv-name) "bin/python3"))
|
|
(python-exists (file-executable-p python-exec))
|
|
)
|
|
python-exec)
|
|
)
|
|
|
|
(defun atu/activate-flycheck ()
|
|
"Activate flycheck unless its in the venv"
|
|
(if-let ((venv-name (atu/get-venv-name)))
|
|
(unless (and buffer-file-name (file-in-directory-p buffer-file-name venv-name))
|
|
(flycheck-mode))
|
|
(flycheck-mode))
|
|
)
|
|
|
|
(defun atu/pyls-set-jedi-environment ()
|
|
"Sets the jedi environment according to the discovered venv"
|
|
(when-let ((venv-name (atu/get-venv-name)))
|
|
(setq lsp-pylsp-plugins-jedi-environment venv-name))
|
|
)
|
|
|
|
(defun atu/append-workspace-extra-paths ()
|
|
"Appends needed extra-paths to lsp-jedi workspace if found"
|
|
(when-let* ((venv-name (atu/get-venv-name))
|
|
(site-packages (file-expand-wildcards (concat (file-name-as-directory venv-name) "lib/python*/site-packages")))
|
|
(site-package (car site-packages)))
|
|
(setq lsp-jedi-workspace-extra-paths
|
|
(vconcat lsp-jedi-workspace-extra-paths (vector site-package))
|
|
)
|
|
)
|
|
)
|
|
|
|
(defun atu/flycheck-set-python-paths ()
|
|
"Sets the rights executable for flycheck"
|
|
(when-let ((python-exec (atu/get-venv-python)))
|
|
(flycheck-set-checker-executable 'python-flake8 python-exec)
|
|
(flycheck-set-checker-executable 'python-pylint python-exec)
|
|
(flycheck-set-checker-executable 'python-mypy python-exec)
|
|
(flycheck-reset-enabled-checker 'python-flake8)
|
|
(flycheck-reset-enabled-checker 'python-pylint)
|
|
(flycheck-add-next-checker 'lsp 'python-pylint)
|
|
)
|
|
)
|
|
:hook
|
|
(python-mode . atu/pyls-set-jedi-environment)
|
|
;(python-mode . atu/activate-flycheck)
|
|
;(python-mode . atu/append-workspace-extra-paths)
|
|
(lsp-managed-mode . atu/flycheck-set-python-paths)
|
|
)
|
|
|
|
|
|
|
|
(use-package blacken
|
|
:commands blacken-mode blacken-buffer
|
|
:hook
|
|
(python-mode . blacken-mode)
|
|
)
|
|
|
|
(use-package py-isort
|
|
:commands py-isort-buffer
|
|
:hook
|
|
(python-mode . (lambda ()
|
|
(add-hook 'before-save-hook 'py-isort-before-save)))
|
|
)
|
|
|
|
|
|
(add-to-list 'auto-mode-alist '("\\.h\\'" . c-c++-header))
|
|
|
|
(defconst tuleu-cc-style
|
|
'("gnu"
|
|
(c-offsets-alist . ((innamespace . [0])))
|
|
)
|
|
)
|
|
(c-add-style "tuleu-c++" tuleu-cc-style)
|
|
|
|
(defun my-c-common-hook ()
|
|
(smart-tabs-mode)
|
|
(if (derived-mode-p 'c-mode 'c++-mode)
|
|
(cppcm-reload-all)
|
|
)
|
|
)
|
|
(add-hook 'c-mode-common-hook 'my-c-common-hook)
|
|
|
|
(use-package markdown-mode)
|
|
|
|
(use-package go-mode
|
|
:after (projectile)
|
|
:config
|
|
(unbind-key "C-c C-d" go-mode-map)
|
|
(defun go-compile-command ()
|
|
"returns a string to compile a go project"
|
|
(setq project-makefile (concat (file-name-as-directory (projectile-project-root)) "Makefile"))
|
|
(if (file-exists-p project-makefile)
|
|
"make"
|
|
"go build && go test && go vet"
|
|
)
|
|
)
|
|
(projectile-update-project-type
|
|
'go
|
|
:compile 'go-compile-command)
|
|
:hook
|
|
(go-mode . lsp-deferred)
|
|
(go-mode . (lambda ()
|
|
(add-hook 'before-save-hook #'lsp-format-buffer t t)
|
|
(add-hook 'before-save-hook #'lsp-organize-imports t t)
|
|
))
|
|
)
|
|
|
|
(use-package glsl-mode)
|
|
(use-package opencl-mode)
|
|
|
|
(use-package protobuf-mode
|
|
:mode "\\.proto\\'"
|
|
:config
|
|
(defconst my-protobuf-style
|
|
'((c-basic-offset . 4)
|
|
(indent-tabs-mode . t))
|
|
)
|
|
;; (c-add-style "my-style" my-protobuf-style t)
|
|
)
|
|
|
|
|
|
|
|
(use-package typescript-mode
|
|
:config
|
|
(progn
|
|
(setq create-lockfiles nil)
|
|
(add-to-list 'compilation-error-regexp-alist '("^Error: \\(.*?\\):\\([0-9]+\\):\\([0-9]+\\)" 1 2 3))
|
|
)
|
|
)
|
|
|
|
(use-package json-mode)
|
|
|
|
(use-package prettier
|
|
:delight "PR"
|
|
:config
|
|
(setq prettier-mode-sync-config-flag nil)
|
|
:hook
|
|
(web-mode . prettier-mode)
|
|
(typescript-mode . prettier-mode)
|
|
)
|
|
|
|
|
|
(use-package web-mode
|
|
:mode "\\.html?\\'" "\\.svelte\\'" "\\.\\(post\\)?css\\'"
|
|
:interpreter "html" "css" "svelte"
|
|
:config
|
|
(setq web-mode-content-types-alist
|
|
'(("css" . "\\.\\(post\\)?css\\'")))
|
|
:hook
|
|
(web-mode . lsp-deferred)
|
|
)
|
|
|
|
|
|
(use-package dockerfile-mode
|
|
:hook
|
|
(dockerfile-mode . lsp-deferred)
|
|
)
|
|
|
|
|
|
|
|
;; Local Variables:
|
|
;; vc-follow-symlinks: t
|
|
;; End:
|