#+PROPERTY: header-args:emacs-lisp :tangle ./init.el :mkdirp yes #+TODO: CHECK(s) | OFF(o) * Primary setup ** Measure startup speed #+begin_src emacs-lisp (add-hook 'emacs-startup-hook (lambda () (message "*** Emacs loaded in %s with %d garbage collections." (format "%.2f seconds" (float-time (time-subtract after-init-time before-init-time))) gcs-done))) #+end_src ** straight.el #+begin_src emacs-lisp (defvar bootstrap-version) (let ((bootstrap-file (expand-file-name "straight/repos/straight.el/bootstrap.el" user-emacs-directory)) (bootstrap-version 5)) (unless (file-exists-p bootstrap-file) (with-current-buffer (url-retrieve-synchronously "https://raw.githubusercontent.com/raxod502/straight.el/develop/install.el" 'silent 'inhibit-cookies) (goto-char (point-max)) (eval-print-last-sexp))) (load bootstrap-file nil 'nomessage)) #+end_src ** use-package #+begin_src emacs-lisp (straight-use-package 'use-package) (eval-when-compile (require 'use-package)) (setq use-package-verbose t) #+end_src ** System #+begin_src emacs-lisp (setq my/lowpower (string= (system-name) "pntk")) #+end_src ** Load user files #+begin_src emacs-lisp (defconst user-init-dir (cond ((boundp 'user-emacs-directory) user-emacs-directory) ((boundp 'user-init-directory) user-init-directory) (t "~/.emacs.d/"))) (defun load-user-file (file) "Load a file in current user's configuration directory." (interactive "f") (load-file (expand-file-name file user-init-dir))) #+end_src ** Misc *** Environment variable #+begin_src emacs-lisp (setenv "IS_EMACS" "true") #+end_src *** OFF Add stuff to PATH and =exec-path= #+begin_src emacs-lisp :tangle no (setq my/extra-paths '("~/.cargo/bin" "~/.cabal/bin" "~/.ghcup/bin")) (dolist (path my/extra-paths) (add-to-list 'exec-path (expand-file-name path))) (setenv "PATH" (concat (string-join my/extra-paths ":") ":" (getenv "PATH"))) #+end_src *** Custom file location #+begin_src emacs-lisp (setq custom-file (concat user-emacs-directory "custom.el")) (load custom-file 'noerror) #+end_src *** Anaconda #+begin_src emacs-lisp (use-package conda :straight t :config (setq conda-anaconda-home (expand-file-name "~/Programs/miniconda3/")) (setq conda-env-home-directory (expand-file-name "~/Programs/miniconda3/")) (setq conda-env-subdirectory "envs") ) (conda-env-activate "base") #+end_src *** Performance #+begin_src emacs-lisp (setq gc-cons-threshold 80000000) (setq read-process-output-max (* 1024 1024)) #+end_src * Keybindings ** general.el #+begin_src emacs-lisp (use-package general :straight t :config (general-evil-setup)) #+end_src ** which-key #+begin_src emacs-lisp (use-package which-key :config (setq which-key-idle-delay (if my/lowpower 1 0.3)) (setq which-key-popup-type 'frame) (which-key-mode) (which-key-setup-side-window-bottom) (set-face-attribute 'which-key-local-map-description-face nil :weight 'bold) :straight t) #+end_src ** My keybindings *** Open config #+begin_src emacs-lisp (defun my-edit-configuration () "Open the init file." (interactive) (find-file "~/.emacs.d/emacs.org")) (general-define-key "C-c c" 'my-edit-configuration) #+end_src *** Editing #+begin_src emacs-lisp (general-def :states '(normal insert visual) "" 'beginning-of-line "" 'end-of-line) #+end_src *** Escape #+begin_src emacs-lisp (defun minibuffer-keyboard-quit () "Abort recursive edit. In Delete Selection mode, if the mark is active, just deactivate it; then it takes a second \\[keyboard-quit] to abort the minibuffer." (interactive) (if (and delete-selection-mode transient-mark-mode mark-active) (setq deactivate-mark t) (when (get-buffer "*Completions*") (delete-windows-on "*Completions*")) (abort-recursive-edit))) (general-define-key :keymaps '(normal visual global) [escape] 'keyboard-quit) (general-define-key :keymaps '(minibuffer-local-map minibuffer-local-ns-map minibuffer-local-completion-map minibuffer-local-must-match-map minibuffer-local-isearch-map) [escape] 'minibuffer-keyboard-quit) #+end_src * General editing & setup ** Evil-mode #+begin_src emacs-lisp (use-package evil :straight t :init (setq evil-want-integration t) (setq evil-want-C-u-scroll t) (setq evil-want-keybinding nil) :config (evil-mode 1) (setq evil-search-module 'evil-search) (setq evil-split-window-below t) (setq evil-vsplit-window-right t) ;; (setq evil-respect-visual-line-mode t) (evil-set-undo-system 'undo-tree) ;; (add-to-list 'evil-emacs-state-modes 'dired-mode) ) (use-package evil-numbers :straight t :commands (evil-numbers/inc-at-pt evil-numbers/dec-at-pt)) (use-package evil-surround :straight t :after evil :config (global-evil-surround-mode 1)) (use-package evil-commentary :straight t :after evil :config (evil-commentary-mode)) (use-package evil-collection :straight t :after evil :config (evil-collection-init '(eww dired company vterm flycheck profiler cider explain-pause-mode notmuch custom xref eshell helpful compile comint))) (use-package evil-quickscope :straight t :after evil :config :hook ((prog-mode . turn-on-evil-quickscope-mode) (LaTeX-mode . turn-on-evil-quickscope-mode))) #+end_src ** Keybindigs to override evil *** My leader #+begin_src emacs-lisp (general-create-definer my-leader-def :prefix "SPC" :keymaps 'override :states '(normal motion emacs)) (general-def :keymaps 'override :states '(normal motion emacs insert visual) "M-u" 'universal-argument ) (general-def :states '(normal motion emacs) "SPC" nil) (my-leader-def "?" 'which-key-show-top-level) (my-leader-def "E" 'eval-expression) (my-leader-def "Ps" 'profiler-start) (my-leader-def "Pe" 'profiler-stop) (my-leader-def "Pp" 'profiler-report) #+end_src *** Help #+begin_src emacs-lisp (use-package helpful :straight t :commands (helpful-callable helpful-variable helpful-key helpful-macro helpful-function helpful-command)) (my-leader-def :infix "h" "RET" 'view-order-manuals "." 'display-local-help "?" 'help-for-help "C" 'describe-coding-system "F" 'Info-goto-emacs-command-node "I" 'describe-input-method "K" 'Info-goto-emacs-key-command-node "L" 'describe-language-environment "P" 'describe-package "S" 'info-lookup-symbol "a" 'helm-apropos "b" 'describe-bindings "c" 'describe-key-briefly "d" 'apropos-documentation "e" 'view-echo-area-messages "f" 'helpful-function "g" 'describe-gnu-project "h" 'view-hello-file "i" 'info "k" 'helpful-key "l" 'view-lossage "m" 'describe-mode "n" 'view-emacs-news "o" 'describe-symbol "p" 'finder-by-keyword "q" 'help-quit "r" 'info-emacs-manual "s" 'describe-syntax "t" 'help-with-tutorial "v" 'helpful-variable "w" 'where-is "" 'help-for-help "C-\\" 'describe-input-method "C-a" 'about-emacs "C-c" 'describe-copying "C-d" 'view-emacs-debugging "C-e" 'view-external-packages "C-f" 'view-emacs-FAQ "C-h" 'help-for-help "C-n" 'view-emacs-news "C-o" 'describe-distribution "C-p" 'view-emacs-problems "C-s" 'search-forward-help-for-help "C-t" 'view-emacs-todo "C-w" 'describe-no-warranty) #+end_src *** Buffer switch #+begin_src emacs-lisp (general-define-key :keymaps 'override "C-" 'evil-window-right "C-" 'evil-window-left "C-" 'evil-window-up "C-" 'evil-window-down "C-h" 'evil-window-left "C-l" 'evil-window-right "C-k" 'evil-window-up "C-j" 'evil-window-down "C-x h" 'previous-buffer "C-x l" 'next-buffer ) #+end_src ** OFF Multiple cursors #+begin_src emacs-lisp ;; (use-package evil-mc ;; :straight t ;; :config ;; (define-key evil-mc-key-map (kbd "C-n") nil) ;; (define-key evil-mc-key-map (kbd "C-p") nil) ;; (define-key evil-mc-key-map (kbd "g") nil) ;; (evil-define-key 'normal evil-mc-key-map ;; (kbd "C-n") nil ;; (kbd "g") nil ;; (kbd "C-p") nil ;; ) ;; (evil-define-key 'visual evil-mc-key-map ;; "A" #'evil-mc-make-cursor-in-visual-selection-end ;; "I" #'evil-mc-make-cursor-in-visual-selection-beg ;; (kbd "C-n") nil ;; (kbd "g") nil ;; (kbd "C-p") nil ;; ) ;; (global-evil-mc-mode 1)) ;; ;; (general-nmap "gr" evil-mc-cursors-map) #+end_src #+begin_src emacs-lisp ;; (use-package multiple-cursors ;; :straight t) ;; ;; (general-vmap ;; "I" #'mc/edit-lines ;; ) #+end_src ** Undo-redo & undo-tree #+begin_src emacs-lisp (use-package undo-tree :straight t :config (global-undo-tree-mode) (setq undo-tree-visualizer-diff t) (setq undo-tree-visualizer-timestamps t) (my-leader-def "u" 'undo-tree-visualize) (fset 'undo-auto-amalgamate 'ignore) (setq undo-limit 6710886400) (setq undo-strong-limit 100663296) (setq undo-outer-limit 1006632960)) #+end_src ** xref #+begin_src emacs-lisp (general-nmap "gD" 'xref-find-definitions-other-window "gr" 'xref-find-references) (my-leader-def "fx" 'xref-find-apropos) #+end_src ** OFF Helm #+begin_src emacs-lisp :tangle no (use-package helm :init (require 'helm-config) (setq helm-split-window-in-side-p t) (setq helm-move-to-line-cycle-in-source t) :straight t :config (helm-mode 1) (helm-autoresize-mode 1)) (use-package helm-ag :straight t) (use-package helm-rg :straight t) (general-nmap :keymaps 'helm-ag-mode-map "RET" 'helm-ag-mode-jump "M-RET" 'helm-ag-mode-jump-other-window) (general-nmap :keymaps 'helm-occur-mode-map "RET" 'helm-occur-mode-goto-line "M-RET" 'helm-occur-mode-goto-line-ow) (general-define-key "M-x" 'helm-M-x) (my-leader-def "fb" 'helm-buffers-list "fs" 'helm-lsp-workspace-symbol "fw" 'helm-lsp-global-workspace-symbol "fc" 'helm-show-kill-ring ;; "fa" 'helm-do-ag-project-root "fm" 'helm-bookmarks "ff" 'project-find-file "fe" 'conda-env-activate) (my-leader-def "s" 'helm-occur) (my-leader-def "SPC" 'helm-resume) (general-define-key :keymaps 'helm-map "C-j" 'helm-next-line "C-k" 'helm-previous-line) (general-define-key :keymaps '(helm-find-files-map helm-locate-map) "C-h" 'helm-find-files-up-one-level "C-l" 'helm-execute-persistent-action) (general-imap "C-y" 'helm-show-kill-ring) ;; (general-nmap "C-p" 'project-find-file) #+end_src ** Ivy #+begin_src emacs-lisp (use-package ivy :straight t :config (setq ivy-use-virtual-buffers t) (ivy-mode)) (use-package counsel :straight t :after ivy :config (counsel-mode)) (use-package swiper :defer t :straight t) (use-package ivy-rich :straight t :after ivy :config (ivy-rich-mode 1) (setcdr (assq t ivy-format-functions-alist) #'ivy-format-function-line)) (my-leader-def :infix "f" "b" 'ivy-switch-buffer "e" 'conda-env-activate "f" 'project-find-file "c" 'counsel-yank-pop "a" 'counsel-rg "A" 'counsel-ag ) (general-imap "C-y" 'counsel-yank-pop) (my-leader-def "SPC" 'ivy-resume) (my-leader-def "s" 'swiper-isearch "S" 'swiper-all) (general-define-key :keymaps '(ivy-minibuffer-map swiper-map) "M-j" 'ivy-next-line "M-k" 'ivy-previous-line "" 'ivy-call "M-RET" 'ivy-immediate-done [escape] 'minibuffer-keyboard-quit) #+end_src ** Treemacs #+begin_src emacs-lisp (use-package treemacs :straight t :commands (treemacs treemacs-switch-workspace treemacs-edit-workspace) :config (setq treemacs-follow-mode nil) (setq treemacs-follow-after-init nil) (setq treemacs-space-between-root-nodes nil) (treemacs-git-mode 'extended) (with-eval-after-load 'treemacs (add-to-list 'treemacs-pre-file-insert-predicates #'treemacs-is-file-git-ignored?))) (use-package treemacs-evil :after (treemacs evil) :straight t) (use-package treemacs-magit :after treemacs magit :straight t) (general-define-key :keymaps '(normal override global) "C-n" 'treemacs) (general-define-key :keymaps '(treemacs-mode-map) [mouse-1] #'treemacs-single-click-expand-action) (my-leader-def "tw" 'treemacs-switch-workspace "te" 'treemacs-edit-workspaces) #+end_src ** Projectile #+begin_src emacs-lisp (use-package projectile :straight t :config (projectile-mode +1) (setq projectile-project-search-path '("~/Code" "~/Documents"))) ;; (use-package helm-projectile ;; :straight t ;; :config ;; (setq projectile-completion-system 'helm)) (use-package counsel-projectile :after (counsel projectile) :straight t) (use-package treemacs-projectile :after (treemacs projectile) :straight t) (my-leader-def "p" 'projectile-command-map ;; "fa" 'helm-projectile-rg ;; "fA" 'helm-projectile-ag ) ;; (general-nmap "C-p" 'helm-projectile-find-file) (general-nmap "C-p" 'counsel-projectile-find-file) #+end_src ** Company #+begin_src emacs-lisp (use-package company :straight t :config (global-company-mode) (setq company-idle-delay (if my/lowpower 0.5 0.125)) (setq company-dabbrev-downcase nil) (setq company-show-numbers t)) (use-package company-box :straight t :if (not my/lowpower) :hook (company-mode . company-box-mode)) (general-imap "C-SPC" 'company-complete) #+end_src ** Git & Magit #+begin_src emacs-lisp (use-package magit :straight t :commands (magit-status magit-file-dispatch) :config (setq magit-blame-styles '((margin (margin-format . ("%a %A %s")) (margin-width . 42) (margin-face . magit-blame-margin) (margin-body-face . (magit-blame-dimmed))) (headings (heading-format . "%-20a %C %s\n")) (highlight (highlight-face . magit-blame-highlight)) (lines (show-lines . t) (show-message . t))) )) (use-package git-gutter :straight t :config (global-git-gutter-mode +1)) (use-package evil-magit :after (magit) :straight t) (my-leader-def "m" 'magit "M" 'magit-file-dispatch) #+end_src ** Misc editing helpers *** OFF Better jumplist #+begin_src emacs-lisp ;; (use-package better-jumper ;; :straight t ;; :config ;; (better-jumper-mode +1) ;; (setq better-jumper-add-jump-behavior 'replace)) ;; ;; (general-nmap ;; "go" 'better-jumper-jump-forward ;; "gp" 'better-jumper-jump-backward) #+end_src *** OFF Smart backspace #+begin_src emacs-lisp ;; (use-package smart-backspace ;; :straight t) ;; (general-imap [?\C-?] 'smart-backspace) ;; (general-imap [(shift backspace)] 'backward-delete-char) #+end_src *** Visual fill column #+begin_src emacs-lisp (use-package visual-fill-column :straight t :config (add-hook 'visual-fill-column-mode-hook (lambda () (setq visual-fill-column-center-text t)))) #+end_src *** OFF Electric pair #+begin_src emacs-lisp :tangle no (electric-pair-mode) #+end_src *** Smart Parens #+begin_src emacs-lisp (use-package smartparens :straight t) #+end_src *** Aggressive Indent #+begin_src emacs-lisp (use-package aggressive-indent :straight t) #+end_src *** Tabs #+begin_src emacs-lisp (setq tab-always-indent nil) (setq default-tab-width 4) (setq tab-width 4) (setq-default evil-indent-convert-tabs nil) (setq-default indent-tabs-mode nil) (setq-default tab-width 4) (setq-default evil-shift-round nil) #+end_src *** OFF Expand region #+begin_src emacs-lisp :tangle no (use-package expand-region :straight t) (general-nmap "+" 'er/expand-region) #+end_src *** Winner mode #+begin_src emacs-lisp (use-package winner-mode :ensure nil :config (winner-mode) :bind (:map evil-window-map ("u" . winner-undo) ("U" . winner-redo) )) #+end_src ** Editorconfig #+begin_src emacs-lisp (use-package editorconfig :straight t :config (editorconfig-mode 1)) #+end_src ** Avy #+begin_src emacs-lisp (use-package avy :straight t :defer t) (general-nmap "\\\\w" 'avy-goto-word-0-below) (general-nmap "\\\\b" 'avy-goto-word-0-above) #+end_src ** Snippets #+begin_src emacs-lisp (use-package yasnippet :straight t :config (yas-global-mode 1)) (use-package yasnippet-snippets :straight t) (general-imap "M-TAB" 'company-yasnippet) #+end_src ** Folding #+begin_src emacs-lisp (add-hook 'prog-mode-hook #'hs-minor-mode) (general-nmap "TAB" 'evil-toggle-fold) (general-nmap :keymaps 'hs-minor-mode-map "ze" 'hs-hide-level) #+end_src ** Time trackers *** WakaTime #+begin_src emacs-lisp (use-package wakatime-mode :straight t :config (global-wakatime-mode)) #+end_src *** ActivityWatch #+begin_src emacs-lisp (use-package request :straight t) (use-package activity-watch-mode :straight t :config (global-activity-watch-mode)) #+end_src ** No Littering #+begin_src emacs-lisp (use-package no-littering :straight t) #+end_src * Dired #+begin_src emacs-lisp (use-package dired :ensure nil :custom ((dired-listing-switches "-alh --group-directories-first")) :commands (dired) :config (setq dired-dwim-target t) (setq wdired-allow-to-change-permissions t) (setq wdired-create-parent-directories t) (setq dired-recursive-copies 'always) (setq dired-recursive-deletes 'always) (add-hook 'dired-mode-hook (lambda () (setq truncate-lines t) (visual-line-mode nil))) (evil-collection-define-key 'normal 'dired-mode-map "h" 'dired-single-up-directory "l" 'dired-single-buffer "h" 'dired-single-up-directory "l" 'dired-single-buffer "=" 'dired-narrow "-" 'dired-create-empty-file (kbd "") 'dired-single-up-directory (kbd "") 'dired-single-buffer) (general-define-key :keymaps 'dired-mode-map [remap dired-find-file] 'dired-single-buffer [remap dired-mouse-find-file-other-window] 'dired-single-buffer-mouse [remap dired-up-directory] 'dired-single-up-directory "M-" 'dired-open-xdg)) (use-package dired+ :straight t :after dired :init (setq diredp-hide-details-initially-flag nil)) (use-package dired-single :after dired :straight t) (use-package all-the-icons-dired :straight t :if (not my/lowpower) :after dired :config (add-hook 'dired-mode-hook 'all-the-icons-dired-mode) (advice-add 'dired-add-entry :around #'all-the-icons-dired--refresh-advice) (advice-add 'dired-remove-entry :around #'all-the-icons-dired--refresh-advice)) (use-package dired-open :after dired :straight t) (use-package dired-narrow :after dired :straight t :config (general-define-key :keymaps 'dired-narrow-map [escape] 'keyboard-quit)) (my-leader-def "ad" 'dired) #+end_src * Shells ** Vterm #+begin_src emacs-lisp (use-package vterm :straight t :commands (vterm vterm-other-window) :config (setq vterm-kill-buffer-on-exit t) (add-hook 'vterm-mode-hook (lambda () (setq-local global-display-line-numbers-mode nil) (display-line-numbers-mode 0) )) (general-define-key :keymaps 'vterm-mode-map "M-q" 'vterm-send-escape "C-h" 'evil-window-left "C-l" 'evil-window-right "C-k" 'evil-window-up "C-j" 'evil-window-down "C-" 'evil-window-right "C-" 'evil-window-left "C-" 'evil-window-up "C-" 'evil-window-down "M-" 'vterm-send-left "M-" 'vterm-send-right "M-" 'vterm-send-up "M-" 'vterm-send-down) (general-imap :keymaps 'vterm-mode-map "C-r" 'vterm-send-C-r "C-k" 'vterm-send-C-k "C-j" 'vterm-send-C-j "M-l" 'vterm-send-right "M-h" 'vterm-send-left) ) (add-to-list 'display-buffer-alist `(,"vterm-subterminal.*" (display-buffer-reuse-window display-buffer-in-side-window) (side . bottom) (reusable-frames . visible) (window-height . 0.33))) (defun my/toggle-vterm-subteminal () "Toogle subteminal." (interactive) (let ((vterm-window (seq-find (lambda (window) (string-match "vterm-subterminal.*" (buffer-name (window-buffer window))) ) (window-list)))) (if vterm-window (if (eq (get-buffer-window (current-buffer)) vterm-window) (kill-buffer (current-buffer)) (select-window vterm-window) ) (vterm-other-window "vterm-subterminal")))) (general-nmap "`" 'my/toggle-vterm-subteminal) (general-nmap "~" 'vterm) #+end_src ** Eshell #+begin_src emacs-lisp (defun my/configure-eshell () (add-hook 'eshell-pre-command-hook 'eshell-save-some-history) (add-to-list 'eshell-output-filter-functions 'eshell-truncate-buffer) (setq eshell-history-size 10000) (setq eshell-hist-ingnoredups t) (setq eshell-buffer-maximum-lines 10000) (evil-define-key '(normal insert visual) eshell-mode-map (kbd "") 'eshell-bol) (evil-define-key '(normal insert visual) eshell-mode-map (kbd "C-r") 'counsel-esh-history) (evil-collection-define-key 'normal 'eshell-mode-map (kbd "C-h") 'evil-window-left (kbd "C-l") 'evil-window-right (kbd "C-k") 'evil-window-up (kbd "C-j") 'evil-window-down)) (use-package eshell :ensure nil :after evil-collection :commands (eshell) :config (add-hook 'eshell-first-time-mode-hook 'my/configure-eshell 90) (setq eshell-banner-message "")) (use-package aweshell :straight (:repo "manateelazycat/aweshell" :host github) :after eshell :config (setq eshell-highlight-prompt nil) (setq eshell-prompt-function 'epe-theme-pipeline)) ;; (general-nmap "`" 'aweshell-dedicated-toggle) ;; (general-nmap "~" 'eshell) #+end_src * Org-mode ** Installation #+begin_src emacs-lisp (straight-override-recipe '(org :repo "emacsmirror/org" :no-build t)) (use-package org :straight t) #+end_src ** Integration with evil #+begin_src emacs-lisp (use-package evil-org :straight t :after (org evil-collection) :config (add-hook 'org-mode-hook 'evil-org-mode) (add-hook 'org-mode-hook #'smartparens-mode) (add-hook 'evil-org-mode-hook (lambda () (evil-org-set-key-theme '(navigation insert textobjects additional calendar todo)))) (add-to-list 'evil-emacs-state-modes 'org-agenda-mode) (require 'evil-org-agenda) (add-hook 'org-agenda-mode-hook (lambda () (visual-line-mode -1) (toggle-truncate-lines 1) (display-line-numbers-mode 0))) (evil-org-agenda-set-keys)) #+end_src ** Programming languages *** Python #+begin_src emacs-lisp (use-package jupyter :straight t :config ;; (add-to-list 'evil-emacs-state-modes 'jupyter-repl-mode) ) (my-leader-def "ar" 'jupyter-run-repl) #+end_src *** TypeScript #+begin_src emacs-lisp ;; (use-package ob-typescript ;; :straight t) #+end_src *** Setup #+begin_src emacs-lisp (org-babel-do-load-languages 'org-babel-load-languages '((emacs-lisp . t) (python . t) ;; (typescript .t) (shell . t) (jupyter . t))) (org-babel-jupyter-override-src-block "python") (use-package ob-async :straight t :after (org) :config (setq ob-async-no-async-languages-alist '("python" "jupyter-python"))) #+end_src ** Equations preview #+begin_src emacs-lisp (use-package org-latex-impatient :straight ( :repo "yangsheng6810/org-latex-impatient" :branch "master" :host github) :hook (org-mode . org-latex-impatient-mode) :init (setq org-latex-impatient-tex2svg-bin "/home/pavel/Programs/miniconda3/lib/node_modules/mathjax-node-cli/bin/tex2svg") (setq org-latex-impatient-scale 2) (setq org-latex-impatient-delay 1) (setq org-latex-impatient-border-color "#ffffff") ) #+end_src ** LaTeX stuff #+begin_src emacs-lisp (setq org-format-latex-options (plist-put org-format-latex-options :scale 1.75)) (setq org-highlight-latex-and-related '(native script entities)) #+end_src ** Export to LaTeX #+begin_src emacs-lisp ;; (use-package htmlize ;; :straight t) (defun my/setup-org-latex () (setq org-latex-compiler "xelatex") (add-to-list 'org-latex-classes '("extarticle" "\\documentclass[a4paper, 14pt]{extarticle}" ("\\section{%s}" . "\\section*{%s}") ("\\subsection{%s}" . "\\subsection*{%s}") ("\\subsubsection{%s}" . "\\subsubsection*{%s}") ("\\paragraph{%s}" . "\\paragraph*{%s}") ("\\subparagraph{%s}" . "\\subparagraph*{%s}")) ) ) (with-eval-after-load 'ox-latex (my/setup-org-latex)) #+end_src ** Export to Hugo #+begin_src emacs-lisp (use-package ox-hugo :straight t :after ox) #+end_src ** Keybindings #+begin_src emacs-lisp (general-define-key :keymaps 'org-mode-map "C-c d" 'org-decrypt-entry "C-c e" 'org-encrypt-entry "M-p" 'org-latex-preview ) (general-define-key :keymaps 'org-agenda-mode-map "M-]" 'org-agenda-later "M-[" 'org-agenda-earlier) (general-imap :keymaps 'org-mode-map "RET" 'evil-org-return) (general-nmap :keymaps 'org-mode-map "RET" 'org-ctrl-c-ctrl-c) (my-leader-def "aa" 'org-agenda "ao" 'org-switchb) #+end_src ** OFF Pairs #+begin_src emacs-lisp :tangle no (defvar org-electric-pairs '((?/ . ?/))) (defun my/org-add-electric-pairs () (setq-local electric-pair-pairs (append electric-pair-pairs org-electric-pairs)) (setq-local electric-pair-text-pairs electric-pair-pairs)) (add-hook 'org-mode-hook 'my/org-add-electric-pairs) #+end_src ** Copy link #+begin_src emacs-lisp (defun my/org-link-copy (&optional arg) "Extract URL from org-mode link and add it to kill ring." (interactive "P") (let* ((link (org-element-lineage (org-element-context) '(link) t)) (type (org-element-property :type link)) (url (org-element-property :path link)) (url (concat type ":" url))) (kill-new url) (message (concat "Copied URL: " url)))) (general-nmap :keymaps 'org-mode-map "C-x C-l" 'my/org-link-copy) #+end_src ** UI improvements #+begin_src emacs-lisp (use-package org-superstar :straight t :after (org) :config (add-hook 'org-mode-hook (lambda () (org-superstar-mode 1)))) #+end_src ** Org Agenda #+begin_src emacs-lisp (setq org-agenda-category-icon-alist `( ("work" ,(list (all-the-icons-faicon "cog")) nil nil :ascent center) ("lesson" ,(list (all-the-icons-faicon "book")) nil nil :ascent center) ("education" ,(list (all-the-icons-material "build")) nil nil :ascent center) ("meeting" ,(list (all-the-icons-material "chat")) nil nil :ascent center) ("music" ,(list (all-the-icons-faicon "music")) nil nil :ascent center) ("misc" ,(list (all-the-icons-material "archive")) nil nil :ascent center) ("event" ,(list (all-the-icons-octicon "clock")) nil nil :ascent center) )) #+end_src ** Other settings #+begin_src emacs-lisp (setq org-startup-indented t) (setq org-return-follows-link t) (require 'org-crypt) (org-crypt-use-before-save-magic) (setq org-tags-exclude-from-inheritance (quote ("crypt"))) (setq org-crypt-key nil) (add-hook 'org-babel-after-execute-hook 'org-redisplay-inline-images) (add-hook 'org-mode-hook (lambda () (rainbow-delimiters-mode 0))) #+end_src * UI & UX ** GUI Settings #+begin_src emacs-lisp ;; Disable GUI elements (tool-bar-mode -1) (menu-bar-mode -1) (scroll-bar-mode -1) ;; Transparency ;; (set-frame-parameter (selected-frame) 'alpha '(90 . 90)) ;; (add-to-list 'default-frame-alist '(alpha . (90 . 90))) ;; Prettify symbols ;; (global-prettify-symbols-mode) ;; No start screen (setq inhibit-startup-screen t) ;; Visual bell (setq visible-bell 0) ;; y or n instead of yes or no (defalias 'yes-or-no-p 'y-or-n-p) ;; Hide mouse cursor while typing (setq make-pointer-invisible t) ;; Font (set-frame-font "JetBrainsMono Nerd Font 10" nil t) ;; (load-user-file "jetbrains-ligatures.el") ;; Line numbers (global-display-line-numbers-mode 1) (line-number-mode nil) (setq display-line-numbers-type 'visual) (column-number-mode) ;; Parenteses (show-paren-mode 1) ;; Wrap (setq word-wrap 1) (global-visual-line-mode t) ;; Hightlight line (global-hl-line-mode 1) #+end_src ** Frame title #+begin_src emacs-lisp (setq frame-title-format '("" "emacs" (:eval (let ((project-name (projectile-project-name))) (if (not (string= "-" project-name)) (format ":%s@%s" project-name (system-name)) (format "@%s" (system-name))))) )) #+end_src ** Tab bar *** Setup #+begin_src emacs-lisp (general-define-key :keymaps 'override :states '(normal emacs) "gt" 'tab-bar-switch-to-next-tab "gT" 'tab-bar-switch-to-prev-tab "gn" 'tab-bar-new-tab ) (setq tab-bar-show 1) (setq tab-bar-tab-hints t) (setq tab-bar-tab-name-function 'tab-bar-tab-name-current-with-count) ;; Tabs (general-nmap "gn" 'tab-new) (general-nmap "gN" 'tab-close) #+end_src *** My title #+begin_src emacs-lisp (setq my/project-title-separators "[-_ ]") (defun my/shorten-project-name-elem (elem crop) (if (string-match "^\\[.*\\]$" elem) (concat "[" (my/shorten-project-name-elem (substring elem 1 (- (length elem) 1)) crop) "]") (let ((prefix (car (s-match my/project-title-separators elem)))) (let ((rest (substring (if prefix (substring elem (length prefix)) elem) 0 (if crop 1 nil)) )) (concat prefix rest)) ))) (defun my/shorten-project-name (project-name) (let ((elems (s-slice-at my/project-title-separators project-name))) (concat (apply #'concat (cl-mapcar (lambda (elem) (my/shorten-project-name-elem elem t)) (butlast elems))) (my/shorten-project-name-elem (car (last elems)) nil)))) (defun my/tab-bar-name-function () (let ((project-name (projectile-project-name))) (if (string= "-" project-name) (tab-bar-tab-name-current-with-count) (concat "[" (my/shorten-project-name project-name) "] " (tab-bar-tab-name-current-with-count))))) (setq tab-bar-tab-name-function #'my/tab-bar-name-function) #+end_src ** Modeline #+begin_src emacs-lisp (use-package doom-modeline :straight t :init (setq doom-modeline-env-enable-python nil) (setq doom-modeline-env-enable-go nil) :config (doom-modeline-mode 1) (setq doom-modeline-minor-modes nil) (setq doom-modeline-buffer-state-icon nil)) #+end_src ** CHECK Emoji #+begin_src emacs-lisp (use-package emojify :straight t :if (not my/lowpower) :hook (after-init . global-emojify-mode)) #+end_src ** Icons #+begin_src emacs-lisp (use-package all-the-icons :straight t) #+end_src ** OFF Dashboard #+begin_src emacs-lisp ;; (use-package dashboard ;; :straight t ;; :config ;; (dashboard-setup-startup-hook)) #+end_src ** Theme & global stuff #+begin_src emacs-lisp ;; (use-package solaire-mode ;; :straight t ;; :config ;; (solaire-global-mode +1)) (use-package auto-dim-other-buffers :straight t :if (display-graphic-p) :config (set-face-attribute 'auto-dim-other-buffers-face nil :background "#212533") (auto-dim-other-buffers-mode t)) (use-package doom-themes :straight t :config (setq doom-themes-enable-bold t doom-themes-enable-italic t) (load-theme 'doom-palenight t) (doom-themes-visual-bell-config) (setq doom-themes-treemacs-theme "doom-colors") (doom-themes-treemacs-config)) #+end_src ** Text highlight improvements #+begin_src emacs-lisp (use-package highlight-indent-guides :straight t :if (not my/lowpower) :hook ( (prog-mode . highlight-indent-guides-mode) (vue-mode . highlight-indent-guides-mode) (LaTeX-mode . highlight-indent-guides-mode)) :config (setq highlight-indent-guides-method 'bitmap) (setq highlight-indent-guides-bitmap-function 'highlight-indent-guides--bitmap-line)) (use-package rainbow-delimiters :straight t :if (not my/lowpower) :hook ( (prog-mode . rainbow-delimiters-mode))) #+end_src ** Ligatures #+begin_src emacs-lisp (use-package ligature :straight (:host github :repo "mickeynp/ligature.el") :config (ligature-set-ligatures '( typescript-mode js2-mode vue-mode svelte-mode scss-mode php-mode python-mode LaTeX-mode markdown-mode clojure-mode go-mode sh-mode haskell-mode) '("--" "---" "==" "===" "!=" "!==" "=!=" "=:=" "=/=" "<=" ">=" "&&" "&&&" "&=" "++" "+++" "***" ";;" "!!" "??" "?:" "?." "?=" "<:" ":<" ":>" ">:" "<>" "<<<" ">>>" "<<" ">>" "||" "-|" "_|_" "|-" "||-" "|=" "||=" "##" "###" "####" "#{" "#[" "]#" "#(" "#?" "#_" "#_(" "#:" "#!" "#=" "^=" "<$>" "<$" "$>" "<+>" "<+" "+>" "<*>" "<*" "*>" "" "/>" "" "->" "->>" "<<-" "<-" "<=<" "=<<" "<<=" "<==" "<=>" "<==>" "==>" "=>" "=>>" ">=>" ">>=" ">>-" ">-" ">--" "-<" "-<<" ">->" "<-<" "<-|" "<=|" "|=>" "|->" "<->" "<~~" "<~" "<~>" "~~" "~~>" "~>" "~-" "-~" "~@" "[||]" "|]" "[|" "|}" "{|" "[<" ">]" "|>" "<|" "||>" "<||" "|||>" "<|||" "<|>" "..." ".." ".=" ".-" "..<" ".?" "::" ":::" ":=" "::=" ":?" ":?>" "//" "///" "/*" "*/" "/=" "//=" "/==" "@_" "__")) (global-ligature-mode t)) #+end_src ** Zoom #+begin_src emacs-lisp (defun zoom-in () "Increase font size by 10 points" (interactive) (set-face-attribute 'default nil :height (+ (face-attribute 'default :height) 10))) (defun zoom-out () "Decrease font size by 10 points" (interactive) (set-face-attribute 'default nil :height (- (face-attribute 'default :height) 10))) ;; change font size, interactively (global-set-key (kbd "C-+") 'zoom-in) (global-set-key (kbd "C-=") 'zoom-out) #+end_src ** OFF Transparency #+begin_src emacs-lisp :tangle no (defun toggle-transparency () (interactive) (let ((alpha (frame-parameter nil 'alpha))) (set-frame-parameter nil 'alpha (if (eql (cond ((numberp alpha) alpha) ((numberp (cdr alpha)) (cdr alpha)) ((numberp (cadr alpha)) (cadr alpha))) 100) '(95 . 95) '(100 . 100))))) (my-leader-def "dt" 'toggle-transparency) #+end_src ** Scrolling #+begin_src emacs-lisp (setq scroll-conservatively scroll-margin) (setq scroll-step 1) (setq scroll-preserve-screen-position t) (setq scroll-error-top-bottom t) (setq mouse-wheel-progressive-speed nil) (setq mouse-wheel-inhibit-click-time nil) #+end_src ** Clipboard #+begin_src emacs-lisp (setq select-enable-clipboard t) (setq mouse-yank-at-point t) #+end_src ** Backups #+begin_src emacs-lisp (setq backup-inhibited t) (setq auto-save-default nil) #+end_src * OFF EAF ** Installation Requirements: Node >= 14 #+begin_src bash :tangle no pip install qtconsole markdown qrcode[pil] PyQt5 PyQtWebEngine #+end_src ** Config #+begin_src emacs-lisp :tangle no (use-package eaf :straight (:host github :repo "manateelazycat/emacs-application-framework" :files ("*")) :init (use-package epc :defer t :straight t) (use-package ctable :defer t :straight t) (use-package deferred :defer t :straight t) :config (require 'eaf-evil) (setq eaf-evil-leader-key "SPC")) #+end_src * Mail #+begin_src emacs-lisp (use-package notmuch :ensure nil :commands (notmuch) :config (add-hook 'notmuch-hello-mode-hook (lambda () (display-line-numbers-mode 0)))) (my-leader-def "am" 'notmuch) #+end_src * Programming ** LSP *** lsp-mode #+begin_src emacs-lisp (use-package lsp-mode :straight t :hook ( (typescript-mode . lsp) (vue-mode . lsp) (go-mode . lsp) (svelte-mode . lsp) (python-mode . lsp) (json-mode . lsp) (haskell-mode . lsp) (haskell-literate-mode . lsp) (java-mode . lsp)) :commands lsp :config (setq lsp-idle-delay 1) (setq lsp-eslint-server-command '("node" "/home/pavel/.emacs.d/.cache/lsp/eslint/unzipped/extension/server/out/eslintServer.js" "--stdio")) (setq lsp-eslint-run "onSave") (setq lsp-signature-render-documentation nil) ; (lsp-headerline-breadcrumb-mode nil) (setq lsp-headerline-breadcrumb-enable nil) (add-to-list 'lsp-language-id-configuration '(svelte-mode . "svelte"))) (use-package lsp-ui :straight t :commands lsp-ui-mode :config (setq lsp-ui-doc-delay 2) (setq lsp-ui-sideline-show-hover nil)) #+end_src *** Integrations #+begin_src emacs-lisp ;; (use-package helm-lsp ;; :straight t ;; :commands helm-lsp-workspace-symbol) ;; (use-package origami ;; :straight t ;; :hook (prog-mode . origami-mode)) ;; (use-package lsp-origami ;; :straight t ;; :config ;; (add-hook 'lsp-after-open-hook #'lsp-origami-try-enable)) (use-package lsp-treemacs :straight t :commands lsp-treemacs-errors-list) #+end_src *** Keybindings #+begin_src emacs-lisp (my-leader-def "ld" 'lsp-ui-peek-find-definitions "lr" 'lsp-rename "lu" 'lsp-ui-peek-find-references "ls" 'lsp-ui-find-workspace-symbol ;; "la" 'helm-lsp-code-actions "le" 'list-flycheck-errors) #+end_src ** Flycheck #+begin_src emacs-lisp (use-package flycheck :straight t :config (global-flycheck-mode) (setq flycheck-check-syntax-automatically '(save idle-buffer-switch mode-enabled)) (add-hook 'evil-insert-state-exit-hook '(lambda () (if flycheck-checker (flycheck-buffer)) )) (advice-add 'flycheck-eslint-config-exists-p :override (lambda() t)) (add-to-list 'display-buffer-alist `(,(rx bos "*Flycheck errors*" eos) (display-buffer-reuse-window display-buffer-in-side-window) (side . bottom) (reusable-frames . visible) (window-height . 0.33))) ) #+end_src ** OFF TabNine #+begin_src emacs-lisp :tangle no (use-package company-tabnine :straight t :if (not my/lowpower) :after company :config (add-to-list 'company-backends #'company-tabnine)) #+end_src ** OFF DAP #+begin_src emacs-lisp :tangle no (use-package dap-mode :straight t :defer t :init (setq lsp-enable-dap-auto-configure nil) :config (setq dap-ui-variable-length 100) (require 'dap-node) (dap-node-setup) (require 'dap-chrome) (dap-chrome-setup) (require 'dap-python) (dap-mode 1) (dap-ui-mode 1) (dap-tooltip-mode 1) (tooltip-mode 1) (dap-ui-controls-mode 1)) (my-leader-def :infix "d" "d" 'dap-debug "b" 'dap-breakpoint-toggle "c" 'dap-breakpoint-condition "wl" 'dap-ui-locals "wb" 'dap-ui-breakpoints "wr" 'dap-ui-repl "ws" 'dap-ui-sessions "we" 'dap-ui-expressions ) (my-leader-def :infix "d" :keymaps 'dap-mode-map "h" 'dap-hydra ) (defun my/dap-yank-value-at-point (node) (interactive (list (treemacs-node-at-point))) (kill-new (message (plist-get (button-get node :item) :value)))) #+end_src ** OFF Code Compass *** Dependencies #+begin_src emacs-lisp :tangle no (use-package async :straight t) (use-package dash :straight t) (use-package f :straight t) (use-package s :straight t) (use-package simple-httpd :straight t) #+end_src *** Plugin #+begin_src emacs-lisp :tangle no (use-package code-compass :straight ( :repo "ag91/code-compass" :files ("code-compass.el") :branch "main" )) #+end_src * Languages & Formats ** Web development *** OFF Emmet #+begin_src emacs-lisp :tangle no (use-package emmet-mode :straight t) (general-imap :keymaps 'emmet-mode-keymap "TAB" 'emmet-expand-line) (add-hook 'web-mode 'emmet-mode) #+end_src *** TypeScript #+begin_src emacs-lisp (defun my/set-smartparens-indent (mode) (sp-local-pair mode "{" nil :post-handlers '(("|| " "SPC") ("||\n[i]" "RET"))) (sp-local-pair mode "[" nil :post-handlers '(("|| " "SPC") ("||\n[i]" "RET"))) (sp-local-pair mode "(" nil :post-handlers '(("|| " "SPC") ("||\n[i]" "RET")))) (use-package typescript-mode :straight t :mode "\\.ts\\'" :config (add-hook 'typescript-mode-hook #'smartparens-mode) (add-hook 'typescript-mode-hook #'rainbow-delimiters-mode) (my/set-smartparens-indent 'typescript-mode)) #+end_src **** Override flycheck checker with eslint #+begin_src emacs-lisp (defun set-flycheck-eslint() "Override flycheck checker with eslint." (setq-local lsp-diagnostic-package :none) (setq-local flycheck-checker 'javascript-eslint)) ;; (add-hook 'typescript-mode-hook ;; #'set-flycheck-eslint) #+end_src *** JavaScript #+begin_src emacs-lisp (add-hook 'js-mode-hook #'smartparens-mode) (my/set-smartparens-indent 'js-mode) #+end_src *** Jest #+begin_src emacs-lisp (use-package jest-test-mode :straight t :hook ((typescript-mode . jest-test-mode) (js-mode . jest-test-mode)) :config (my-leader-def :keymaps 'jest-test-mode-map :infix "t" "t" 'jest-test-run-at-point "r" 'jest-test-run "a" 'jest-test-run-all-tests)) #+end_src *** Vue.js #+begin_src emacs-lisp (use-package vue-mode :straight t :mode "\\.vue\\'" :config (add-hook 'vue-mode-hook #'hs-minor-mode) (add-hook 'vue-mode-hook #'smartparens-mode) (my/set-smartparens-indent 'vue-mode) (add-hook 'vue-mode-hook (lambda () (set-face-background 'mmm-default-submode-face nil)))) (with-eval-after-load 'editorconfig (add-to-list 'editorconfig-indentation-alist '(vue-mode css-indent-offset js-indent-level sgml-basic-offset ssass-tab-width typescript-indent-level ))) #+end_src **** mmm-mode fix #+begin_src diff :tangle no --- a/mmm-region.el +++ b/mmm-region.el @@ -868,9 +868,10 @@ calls each respective submode's `syntax-propertize-function'." (mmm-set-current-pair mode ovl) (mmm-set-local-variables mode mmm-current-overlay) (save-restriction - (when mmm-current-overlay + (if mmm-current-overlay (narrow-to-region (overlay-start mmm-current-overlay) - (overlay-end mmm-current-overlay))) + (overlay-end mmm-current-overlay)) + (narrow-to-region beg end)) (cond (func (funcall func beg end)) #+end_src *** Svelte #+begin_src emacs-lisp (use-package svelte-mode :straight t :mode "\\.svelte\\'" :config (add-hook 'svelte-mode-hook 'set-flycheck-eslint) (add-hook 'svelte-mode-hook #'smartparens-mode) (my/set-smartparens-indent 'svelte-mode)) #+end_src *** SCSS #+begin_src emacs-lisp (add-hook 'scss-mode-hook #'smartparens-mode) (my/set-smartparens-indent 'scss-mode) #+end_src *** PHP #+begin_src emacs-lisp (use-package php-mode :straight t :mode "\\.php\\'") #+end_src ** Documents & markup languages *** LaTeX **** AucTeX #+begin_src emacs-lisp (use-package tex :straight auctex ;; :mode "\\.tex\\'" :config (setq-default TeX-auto-save t) (setq-default TeX-parse-self t) (TeX-PDF-mode) (setq-default TeX-engine 'xetex) (setq-default TeX-command-extra-options "-shell-escape") (setq-default TeX-source-correlate-method 'synctex) (TeX-source-correlate-mode) (setq-default TeX-source-correlate-start-server t) (setq-default LaTeX-math-menu-unicode t) (setq-default font-latex-fontify-sectioning 1.3) (setq-default preview-scale-function 1.4) ;; (assoc-delete-all "--" tex--prettify-symbols-alist) ;; (assoc-delete-all "---" tex--prettify-symbols-alist) (add-hook 'LaTeX-mode-hook (lambda () (TeX-fold-mode 1) (outline-minor-mode))) (add-to-list 'TeX-view-program-selection '(output-pdf "Zathura")) (add-hook 'LaTeX-mode-hook #'(lambda () (unless (string-match "\.hogan\.tex$" (buffer-name)) (lsp)) (setq-local lsp-diagnostic-package :none) (setq-local flycheck-checker 'tex-chktex))) (add-hook 'LaTeX-mode-hook #'rainbow-delimiters-mode) (add-hook 'LaTeX-mode-hook #'smartparens-mode) (add-hook 'LaTeX-mode-hook #'prettify-symbols-mode) (my/set-smartparens-indent 'LaTeX-mode) (require 'smartparens-latex) (general-nmap :keymaps '(LaTeX-mode-map latex-mode-map) "RET" 'TeX-command-run-all "C-c t" 'orgtbl-mode) ) #+end_src **** Import *.sty #+begin_src emacs-lisp (defun my/import-sty () (interactive) (insert (apply #'concat (cl-mapcar (lambda (file) (concat "\\usepackage{" (file-name-sans-extension (file-relative-name file default-directory)) "}\n")) (sort (seq-filter (lambda (file) (if (string-match ".*\.sty$" file) 1 nil)) (directory-files (seq-some (lambda (dir) (if (and (f-directory-p dir) (seq-some (lambda (file) (string-match ".*\.sty$" file)) (directory-files dir)) ) dir nil)) (list "./styles" "../styles/" "." "..")) :full) ) (lambda (f1 f2) (pcase f1 ("gostBibTex.sty" 2) ("russianlocale.sty" 1) (_ nil))) )))) ) #+end_src *** Markdown #+begin_src emacs-lisp (use-package markdown-mode :straight t :mode "\\.md\\'" :config (setq markdown-command (concat "pandoc" " --from=markdown --to=html" " --standalone --mathjax --highlight-style=pygments" " --css=pandoc.css" " --quiet" )) (setq markdown-live-preview-delete-export 'delete-on-export) (setq markdown-asymmetric-header t) (setq markdown-open-command "/home/pavel/bin/scripts/chromium-sep") (add-hook 'markdown-mode-hook #'smartparens-mode)) ;; (use-package livedown ;; :straight (:host github :repo "shime/emacs-livedown") ;; :commands livedown-preview ;; :config ;; (setq livedown-browser "qutebrowser")) (general-define-key :keymaps 'markdown-mode-map "M-" 'markdown-promote "M-" 'markdown-demote) #+end_src *** PlantUML #+begin_src emacs-lisp (use-package plantuml-mode :straight t :mode "(\\.\\(plantuml?\\|uml\\|puml\\)\\'" :config (setq plantuml-executable-path "/usr/bin/plantuml") (setq plantuml-default-exec-mode 'executable) (add-to-list 'auto-mode-alist '("\\.plantuml\\'" . plantuml-mode)) (add-to-list 'auto-mode-alist '("\\.uml\\'" . plantuml-mode)) (add-hook 'plantuml-mode-hook #'smartparens-mode)) (general-nmap :keymaps 'plantuml-mode-map "RET" 'plantuml-preview) #+end_src *** Natural languages #+begin_src emacs-lisp (use-package langtool :straight t :commands (langtool-check) :config (setq langtool-language-tool-server-jar "/home/pavel/Programs/LanguageTool-5.1/languagetool-server.jar") (setq langtool-mother-tongue "ru")) (my-leader-def :infix "L" "c" 'langtool-check "s" 'langtool-server-stop "d" 'langtool-check-done "n" 'langtool-goto-next-error "p" 'langtool-goto-previous-error) #+end_src ** Python #+begin_src emacs-lisp (add-hook 'python-mode-hook #'smartparens-mode) #+end_src ** OFF SQL #+begin_src emacs-lisp :tangle no (use-package ejc-sql :straight t :config (setq clomacs-httpd-default-port 8080) (require 'ejc-company) (push 'ejc-company-backend company-backends) (setq ejc-complete-on-dot t)) #+end_src ** Java #+begin_src emacs-lisp (use-package lsp-java :straight t :after (lsp) :config (setq lsp-java-jdt-download-url "https://download.eclipse.org/jdtls/milestones/0.57.0/jdt-language-server-0.57.0-202006172108.tar.gz") (add-hook 'java-mode-hook #'smartparens-mode) (my/set-smartparens-indent 'java-mode)) #+end_src ** Clojure #+begin_src emacs-lisp (use-package clojure-mode :straight t :mode "\\.clj[sc]?\\'" :config (add-hook 'clojure-mode-hook #'smartparens-strict-mode) (add-hook 'clojure-mode-hook #'aggressive-indent-mode)) (use-package cider :mode "\\.clj[sc]?\\'" :straight t) #+end_src ** Elisp #+begin_src emacs-lisp (add-hook 'lisp-interaction-mode-hook #'smartparens-mode) #+end_src ** Go #+begin_src emacs-lisp (use-package go-mode :straight t :mode "\\.go\\'" :config (my/set-smartparens-indent 'go-mode) (add-hook 'go-mode-hook 'smartparens-mode)) #+end_src ** fish #+begin_src emacs-lisp (use-package fish-mode :straight t :mode "\\.fish\\'" :config (add-hook 'fish-mode-hook #'smartparens-mode)) #+end_src ** sh #+begin_src emacs-lisp (add-hook 'sh-mode-hook #'smartparens-mode) #+end_src ** CLIPS #+begin_src emacs-lisp (use-package clips-mode :straight t :mode "\\.cl\\'") #+end_src ** Haskell #+begin_src emacs-lisp (use-package haskell-mode :straight t :mode "\\.hs\\'") (use-package lsp-haskell :straight t :after (lsp haskell-mode)) #+end_src ** JSON #+begin_src emacs-lisp (use-package json-mode :straight t :mode "\\.json\\'" :config (add-hook 'json-mode #'smartparens-mode) (my/set-smartparens-indent 'json-mode)) #+end_src ** YAML #+begin_src emacs-lisp (use-package yaml-mode :straight t :mode "\\.yml\\'" :config (add-to-list 'auto-mode-alist '("\\.yml\\'" . yaml-mode))) #+end_src ** CSL #+begin_src emacs-lisp (use-package csv-mode :straight t :mode "\\.csv\\'") #+end_src #+RESULTS: : ((\.csv\' . csv-mode) (\.tsv\' . tsv-mode) (\.[Cc][Ss][Vv]\' . csv-mode) (Dockerfile\' . dockerfile-mode) (Dockerfile\(?:\..*\)?\' . dockerfile-mode) (\.yml\' . yaml-mode) (\.\(e?ya?\|ra\)ml\' . yaml-mode) (\.json\' . json-mode) (\(?:\(?:\.\(?:b\(?:\(?:abel\|ower\)rc\)\|json\(?:ld\)?\)\|composer\.lock\)\'\) . json-mode) (\.hs\' . haskell-mode) (\.hsc\' . haskell-mode) (\.l[gh]s\' . haskell-literate-mode) (\.hsig\' . haskell-mode) (\.[gh]s\' . haskell-mode) (\.cabal\'\|/cabal\.project\|/\.cabal/config\' . haskell-cabal-mode) (\.chs\' . haskell-c2hs-mode) (\.ghci\' . ghci-script-mode) (\.dump-simpl\' . ghc-core-mode) (\.hcr\' . ghc-core-mode) (\.cl\' . clips-mode) (\.clp$ . clips-mode) (/fish_funced\..*\' . fish-mode) (\.fish\' . fish-mode) (go\.mod\' . go-dot-mod-mode) (\.go\' . go-mode) (\.clj[sc]?\' . cider) (\.clj[sc]?\' . clojure-mode) (\(?:build\|profile\)\.boot\' . clojure-mode) (\.cljs\' . clojurescript-mode) (\.cljc\' . clojurec-mode) (\.\(clj\|dtm\|edn\)\' . clojure-mode) ((\.\(plantuml?\|uml\|puml\)\' . plantuml-mode) (\.\(plantuml\|pum\|plu\)\' . plantuml-mode) (\.md\' . markdown-mode) (\.hva\' . latex-mode) (\.drv\' . latex-mode) (\.php\' . php-mode) (\.\(?:php[s345]?\|phtml\)\' . php-mode-maybe) (\.\(?:php\.inc\|stub\)\' . php-mode) (/\.php_cs\(?:\.dist\)?\' . php-mode) (\.svelte\' . svelte-mode) (\.vue\' . vue-mode) (\.ts\' . typescript-mode) (\.\(?:md\|markdown\|mkd\|mdown\|mkdn\|mdwn\)\' . markdown-mode) (\.editorconfig\' . editorconfig-conf-mode) (/git-rebase-todo\' . git-rebase-mode) (\.gpg\(~\|\.~[0-9]+~\)?\' nil epa-file) (\.elc\' . elisp-byte-code-mode) (\.zst\' nil jka-compr) (\.dz\' nil jka-compr) (\.xz\' nil jka-compr) (\.lzma\' nil jka-compr) (\.lz\' nil jka-compr) (\.g?z\' nil jka-compr) (\.bz2\' nil jka-compr) (\.Z\' nil jka-compr) (\.vr[hi]?\' . vera-mode) (\(?:\.\(?:rbw?\|ru\|rake\|thor\|jbuilder\|rabl\|gemspec\|podspec\)\|/\(?:Gem\|Rake\|Cap\|Thor\|Puppet\|Berks\|Vagrant\|Guard\|Pod\)file\)\' . ruby-mode) (\.re?st\' . rst-mode) (\.py[iw]?\' . python-mode) (\.m\' . octave-maybe-mode) (\.less\' . less-css-mode) (\.scss\' . scss-mode) (\.awk\' . awk-mode) (\.\(u?lpc\|pike\|pmod\(\.in\)?\)\' . pike-mode) (\.idl\' . idl-mode) (\.java\' . java-mode) (\.m\' . objc-mode) (\.ii\' . c++-mode) (\.i\' . c-mode) (\.lex\' . c-mode) (\.y\(acc\)?\' . c-mode) (\.h\' . c-or-c++-mode) (\.c\' . c-mode) (\.\(CC?\|HH?\)\' . c++-mode) (\.[ch]\(pp\|xx\|\+\+\)\' . c++-mode) (\.\(cc\|hh\)\' . c++-mode) (\.\(bat\|cmd\)\' . bat-mode) (\.[sx]?html?\(\.[a-zA-Z_]+\)?\' . mhtml-mode) (\.svgz?\' . image-mode) (\.svgz?\' . xml-mode) (\.x[bp]m\' . image-mode) (\.x[bp]m\' . c-mode) (\.p[bpgn]m\' . image-mode) (\.tiff?\' . image-mode) (\.gif\' . image-mode) (\.png\' . image-mode) (\.jpe?g\' . image-mode) (\.te?xt\' . text-mode) (\.[tT]e[xX]\' . tex-mode) (\.ins\' . tex-mode) (\.ltx\' . latex-mode) (\.dtx\' . doctex-mode) (\.org\' . org-mode) (\.el\' . emacs-lisp-mode) (Project\.ede\' . emacs-lisp-mode) (\.\(scm\|stk\|ss\|sch\)\' . scheme-mode) (\.l\' . lisp-mode) (\.li?sp\' . lisp-mode) (\.[fF]\' . fortran-mode) (\.for\' . fortran-mode) (\.p\' . pascal-mode) (\.pas\' . pascal-mode) (\.\(dpr\|DPR\)\' . delphi-mode) (\.ad[abs]\' . ada-mode) (\.ad[bs]\.dg\' . ada-mode) (\.\([pP]\([Llm]\|erl\|od\)\|al\)\' . perl-mode) (Imakefile\' . makefile-imake-mode) (Makeppfile\(?:\.mk\)?\' . makefile-makepp-mode) (\.makepp\' . makefile-makepp-mode) (\.mk\' . makefile-gmake-mode) (\.make\' . makefile-gmake-mode) ([Mm]akefile\' . makefile-gmake-mode) (\.am\' . makefile-automake-mode) (\.texinfo\' . texinfo-mode) (\.te?xi\' . texinfo-mode) (\.[sS]\' . asm-mode) (\.asm\' . asm-mode) (\.css\' . css-mode) (\.mixal\' . mixal-mode) (\.gcov\' . compilation-mode) (/\.[a-z0-9-]*gdbinit . gdb-script-mode) (-gdb\.gdb . gdb-script-mode) ([cC]hange\.?[lL]og?\' . change-log-mode) ([cC]hange[lL]og[-.][0-9]+\' . change-log-mode) (\$CHANGE_LOG\$\.TXT . change-log-mode) (\.scm\.[0-9]*\' . scheme-mode) (\.[ckz]?sh\'\|\.shar\'\|/\.z?profile\' . sh-mode) (\.bash\' . sh-mode) (\(/\|\`\)\.\(bash_\(profile\|history\|log\(in\|out\)\)\|z?log\(in\|out\)\)\' . sh-mode) (\(/\|\`\)\.\(shrc\|zshrc\|m?kshrc\|bashrc\|t?cshrc\|esrc\)\' . sh-mode) (\(/\|\`\)\.\([kz]shenv\|xinitrc\|startxrc\|xsession\)\' . sh-mode) (\.m?spec\' . sh-mode) (\.m[mes]\' . nroff-mode) (\.man\' . nroff-mode) (\.sty\' . latex-mode) (\.cl[so]\' . latex-mode) (\.bbl\' . latex-mode) (\.bib\' . bibtex-mode) (\.bst\' . bibtex-style-mode) (\.sql\' . sql-mode) (\(acinclude\|aclocal\|acsite\)\.m4\' . autoconf-mode) (\.m[4c]\' . m4-mode) (\.mf\' . metafont-mode) (\.mp\' . metapost-mode) (\.vhdl?\' . vhdl-mode) (\.article\' . text-mode) (\.letter\' . text-mode) (\.i?tcl\' . tcl-mode) (\.exp\' . tcl-mode) (\.itk\' . tcl-mode) (\.icn\' . icon-mode) (\.sim\' . simula-mode) (\.mss\' . scribe-mode) (\.f9[05]\' . f90-mode) (\.f0[38]\' . f90-mode) (\.indent\.pro\' . fundamental-mode) (\.\(pro\|PRO\)\' . idlwave-mode) (\.srt\' . srecode-template-mode) (\.prolog\' . prolog-mode) (\.tar\' . tar-mode) (\.\(arc\|zip\|lzh\|lha\|zoo\|[jew]ar\|xpi\|rar\|cbr\|7z\|ARC\|ZIP\|LZH\|LHA\|ZOO\|[JEW]AR\|XPI\|RAR\|CBR\|7Z\)\' . archive-mode) (\.oxt\' . archive-mode) (\.\(deb\|[oi]pk\)\' . archive-mode) (\`/tmp/Re . text-mode) (/Message[0-9]*\' . text-mode) (\`/tmp/fol/ . text-mode) (\.oak\' . scheme-mode) (\.sgml?\' . sgml-mode) (\.x[ms]l\' . xml-mode) (\.dbk\' . xml-mode) (\.dtd\' . sgml-mode) (\.ds\(ss\)?l\' . dsssl-mode) (\.js[mx]?\' . javascript-mode) (\.har\' . javascript-mode) (\.json\' . javascript-mode) (\.[ds]?va?h?\' . verilog-mode) (\.by\' . bovine-grammar-mode) (\.wy\' . wisent-grammar-mode) ([:/\]\..*\(emacs\|gnus\|viper\)\' . emacs-lisp-mode) (\`\..*emacs\' . emacs-lisp-mode) ([:/]_emacs\' . emacs-lisp-mode) (/crontab\.X*[0-9]+\' . shell-script-mode) (\.ml\' . lisp-mode) (\.ld[si]?\' . ld-script-mode) (ld\.?script\' . ld-script-mode) (\.xs\' . c-mode) (\.x[abdsru]?[cnw]?\' . ld-script-mode) (\.zone\' . dns-mode) (\.soa\' . dns-mode) (\.asd\' . lisp-mode) (\.\(asn\|mib\|smi\)\' . snmp-mode) (\.\(as\|mi\|sm\)2\' . snmpv2-mode) (\.\(diffs?\|patch\|rej\)\' . diff-mode) (\.\(dif\|pat\)\' . diff-mode) (\.[eE]?[pP][sS]\' . ps-mode) (\.\(?:PDF\|DVI\|OD[FGPST]\|DOCX\|XLSX?\|PPTX?\|pdf\|djvu\|dvi\|od[fgpst]\|docx\|xlsx?\|pptx?\)\' . doc-view-mode-maybe) (configure\.\(ac\|in\)\' . autoconf-mode) (\.s\(v\|iv\|ieve\)\' . sieve-mode) (BROWSE\' . ebrowse-tree-mode) (\.ebrowse\' . ebrowse-tree-mode) (#\*mail\* . mail-mode) (\.g\' . antlr-mode) (\.mod\' . m2-mode) (\.ses\' . ses-mode) (\.docbook\' . sgml-mode) (\.com\' . dcl-mode) (/config\.\(?:bat\|log\)\' . fundamental-mode) (/\.\(authinfo\|netrc\)\' . authinfo-mode) (\.\(?:[iI][nN][iI]\|[lL][sS][tT]\|[rR][eE][gG]\|[sS][yY][sS]\)\' . conf-mode) (\.la\' . conf-unix-mode) (\.ppd\' . conf-ppd-mode) (java.+\.conf\' . conf-javaprop-mode) (\.properties\(?:\.[a-zA-Z0-9._-]+\)?\' . conf-javaprop-mode) (\.toml\' . conf-toml-mode) (\.desktop\' . conf-desktop-mode) (/\.redshift\.conf\' . conf-windows-mode) (\`/etc/\(?:DIR_COLORS\|ethers\|.?fstab\|.*hosts\|lesskey\|login\.?de\(?:fs\|vperm\)\|magic\|mtab\|pam\.d/.*\|permissions\(?:\.d/.+\)?\|protocols\|rpc\|services\)\' . conf-space-mode) (\`/etc/\(?:acpid?/.+\|aliases\(?:\.d/.+\)?\|default/.+\|group-?\|hosts\..+\|inittab\|ksysguarddrc\|opera6rc\|passwd-?\|shadow-?\|sysconfig/.+\)\' . conf-mode) ([cC]hange[lL]og[-.][-0-9a-z]+\' . change-log-mode) (/\.?\(?:gitconfig\|gnokiirc\|hgrc\|kde.*rc\|mime\.types\|wgetrc\)\' . conf-mode) (/\.\(?:asound\|enigma\|fetchmail\|gltron\|gtk\|hxplayer\|mairix\|mbsync\|msmtp\|net\|neverball\|nvidia-settings-\|offlineimap\|qt/.+\|realplayer\|reportbug\|rtorrent\.\|screen\|scummvm\|sversion\|sylpheed/.+\|xmp\)rc\' . conf-mode) (/\.\(?:gdbtkinit\|grip\|mpdconf\|notmuch-config\|orbital/.+txt\|rhosts\|tuxracer/options\)\' . conf-mode) (/\.?X\(?:default\|resource\|re\)s\> . conf-xdefaults-mode) (/X11.+app-defaults/\|\.ad\' . conf-xdefaults-mode) (/X11.+locale/.+/Compose\' . conf-colon-mode) (/X11.+locale/compose\.dir\' . conf-javaprop-mode) (\.~?[0-9]+\.[0-9][-.0-9]*~?\' nil t) (\.\(?:orig\|in\|[bB][aA][kK]\)\' nil t) ([/.]c\(?:on\)?f\(?:i?g\)?\(?:\.[a-zA-Z0-9._-]+\)?\' . conf-mode-maybe) (\.[1-9]\' . nroff-mode) (\.art\' . image-mode) (\.avs\' . image-mode) (\.bmp\' . image-mode) (\.cmyk\' . image-mode) (\.cmyka\' . image-mode) (\.crw\' . image-mode) (\.dcr\' . image-mode) (\.dcx\' . image-mode) (\.dng\' . image-mode) (\.dpx\' . image-mode) (\.fax\' . image-mode) (\.hrz\' . image-mode) (\.icb\' . image-mode) (\.icc\' . image-mode) (\.icm\' . image-mode) (\.ico\' . image-mode) (\.icon\' . image-mode) (\.jbg\' . image-mode) (\.jbig\' . image-mode) (\.jng\' . image-mode) (\.jnx\' . image-mode) (\.miff\' . image-mode) (\.mng\' . image-mode) (\.mvg\' . image-mode) (\.otb\' . image-mode) (\.p7\' . image-mode) (\.pcx\' . image-mode) (\.pdb\' . image-mode) (\.pfa\' . image-mode) (\.pfb\' . image-mode) (\.picon\' . image-mode) (\.pict\' . image-mode) (\.rgb\' . image-mode) (\.rgba\' . image-mode) (\.tga\' . image-mode) (\.wbmp\' . image-mode) (\.webp\' . image-mode) (\.wmf\' . image-mode) (\.wpg\' . image-mode) (\.xcf\' . image-mode) (\.xmp\' . image-mode) (\.xwd\' . image-mode) (\.yuv\' . image-mode) (\.tgz\' . tar-mode) (\.tbz2?\' . tar-mode) (\.txz\' . tar-mode) (\.tzst\' . tar-mode)) ** Docker #+begin_src emacs-lisp (use-package dockerfile-mode :mode "Dockerfile\\'" :straight t) #+end_src * TRAMP ** Performance #+begin_src emacs-lisp (setq remote-file-name-inhibit-cache nil) (setq tramp-default-method "ssh") (setq vc-ignore-dir-regexp (format "%s\\|%s" vc-ignore-dir-regexp tramp-file-name-regexp)) (setq tramp-verbose 6) #+end_src * Different apps ** EWW #+begin_src emacs-lisp (my-leader-def "aw" 'eww) (general-define-key :keymaps 'eww-mode-map "+" 'text-scale-increase "-" 'text-scale-decrease) #+end_src ** Snow #+begin_src emacs-lisp (use-package snow :straight (:repo "alphapapa/snow.el" :host github) :commands (snow)) #+end_src ** OFF Telegram #+begin_src emacs-lisp :tangle no (use-package telega :commands (telega) :straight t :config (my-leader-def "aT" telega-prefix-map)) (my-leader-def "at" 'telega) #+end_src ** OFF Explain Pause #+begin_src emacs-lisp :tangle no (use-package explain-pause-mode :straight (explain-pause-mode :type git :host github :repo "lastquestion/explain-pause-mode")) #+end_src ** OFF Buku #+begin_src emacs-lisp :tangle no (use-package ebuku :straight t) (my-leader-def "ae" 'ebuku) #+end_src ** OFF mpd.el #+begin_src emacs-lisp :tangle no (use-package mpdel :straight t :init (setq mpdel-prefix-key (kbd "SPC am")) :config (mpdel-mode)) #+end_src