mirror of
https://github.com/SqrtMinusOne/dotfiles.git
synced 2025-12-11 19:45:25 +03:00
1983 lines
59 KiB
Org Mode
1983 lines
59 KiB
Org Mode
#+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)
|
|
"<home>" 'beginning-of-line
|
|
"<end>" '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
|
|
"<f1>" '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-<right>" 'evil-window-right
|
|
"C-<left>" 'evil-window-left
|
|
"C-<up>" 'evil-window-up
|
|
"C-<down>" '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
|
|
"<C-return>" '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 "<left>") 'dired-single-up-directory
|
|
(kbd "<right>") '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-<return>" '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-<right>" 'evil-window-right
|
|
"C-<left>" 'evil-window-left
|
|
"C-<up>" 'evil-window-up
|
|
"C-<down>" 'evil-window-down
|
|
|
|
"M-<left>" 'vterm-send-left
|
|
"M-<right>" 'vterm-send-right
|
|
"M-<up>" 'vterm-send-up
|
|
"M-<down>" '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 "<home>") '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-<left>" 'markdown-promote
|
|
"M-<right>" '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
|