123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410 |
- (setq custom-file (concat user-emacs-directory "custom.el"))
- (when (file-exists-p custom-file)
- (load custom-file))
- (setq inhibit-startup-message t)
- (scroll-bar-mode -1) ; Disable visible scrollbar
- (tool-bar-mode -1) ; Disable the toolbar
- (tooltip-mode -1) ; Disable tooltips
- (set-fringe-mode 0) ; Disable fringes
- (menu-bar-mode -1) ; Disagel menubar
- (setq visual-bell t)
- (column-number-mode)
- (setq display-line-numbers-type 'relative) ;; Display relative line numbers
- (add-hook 'prog-mode-hook #'display-line-numbers-mode) ;; Enable line numbers only when programming
- (defvar my/default-font "JetBrains Mono")
- (defvar my/default-font-size 130)
- (defvar my/default-variable-font-size 130)
- (set-face-attribute 'default nil :font my/default-font :height my/default-font-size)
- (set-face-attribute 'fixed-pitch nil :font my/default-font :height my/default-font-size)
- (set-face-attribute 'variable-pitch nil :font "DejaVu Sans Mono" :height my/default-variable-font-size)
- (require 'package)
- (when (version< emacs-version "28")
- (add-to-list 'package-archives '("nongnu" . "https://elpa.nongnu.org/nongnu/")))
- (add-to-list 'package-archives '("stable" . "https://stable.melpa.org/packages/"))
- (add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/"))
- (customize-set-variable 'package-archive-priorities
- '(("gnu" . 99) ; prefer GNU packages
- ("nongnu" . 80) ; use non-gnu packages if
- ; not found in GNU elpa
- ("stable" . 70) ; prefer "released" versions
- ; from elpa
- ("melpa" . 0))) ; if all else fails, get it
- ; from melpa
- (package-initialize)
- (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))
- ;; Also handle undocumented (<active> <inactive>) form.
- ((numberp (cadr alpha)) (cadr alpha)))
- 100)
- '(85 . 50) '(100 . 100)))))
- (global-set-key (kbd "C-c t") 'toggle-transparency)
- (defadvice find-file (before make-directory-maybe (filename &optional wildcards) activate)
- "Create parent directory if not exists while visiting file."
- (unless (file-exists-p filename)
- (let ((dir (file-name-directory filename)))
- (unless (file-exists-p dir)
- (make-directory dir t)))))
- (defvar auto-save-directory (expand-file-name "autosaves/" user-emacs-directory))
- (when (not (file-exists-p auto-save-directory))
- (make-directory auto-save-directory))
- (setq auto-save-file-name-transforms
- `((".*" ,auto-save-directory t)))
- (set-language-environment 'Russian)
- (global-set-key (kbd "C-c w h") 'windmove-left)
- (global-set-key (kbd "C-c w l") 'windmove-right)
- (global-set-key (kbd "C-c w k") 'windmove-up)
- (global-set-key (kbd "C-c w j") 'windmove-down)
- ;; No need to put :ensure t
- (unless (package-installed-p 'use-package)
- (package-refresh-contents)
- (package-install 'use-package))
- (require 'use-package)
- (setq use-package-always-ensure t)
- (defun meow-setup ()
- (setq meow-cheatsheet-layout meow-cheatsheet-layout-qwerty)
- (meow-motion-overwrite-define-key
- '("j" . meow-next)
- '("k" . meow-prev)
- '("<escape>" . ignore))
- (meow-leader-define-key
- ;; SPC j/k will run the original command in MOTION state.
- '("j" . "H-j")
- '("k" . "H-k")
- ;; Use SPC (0-9) for digit arguments.
- '("1" . meow-digit-argument)
- '("2" . meow-digit-argument)
- '("3" . meow-digit-argument)
- '("4" . meow-digit-argument)
- '("5" . meow-digit-argument)
- '("6" . meow-digit-argument)
- '("7" . meow-digit-argument)
- '("8" . meow-digit-argument)
- '("9" . meow-digit-argument)
- '("0" . meow-digit-argument)
- '("/" . meow-keypad-describe-key)
- '("?" . meow-cheatsheet))
- (meow-normal-define-key
- '("0" . meow-expand-0)
- '("9" . meow-expand-9)
- '("8" . meow-expand-8)
- '("7" . meow-expand-7)
- '("6" . meow-expand-6)
- '("5" . meow-expand-5)
- '("4" . meow-expand-4)
- '("3" . meow-expand-3)
- '("2" . meow-expand-2)
- '("1" . meow-expand-1)
- '("-" . negative-argument)
- '(";" . meow-reverse)
- '("," . meow-inner-of-thing)
- '("." . meow-bounds-of-thing)
- '("[" . meow-beginning-of-thing)
- '("]" . meow-end-of-thing)
- '("a" . meow-append)
- '("A" . meow-open-below)
- '("b" . meow-back-word)
- '("B" . meow-back-symbol)
- '("c" . meow-change)
- '("d" . meow-delete)
- '("D" . meow-backward-delete)
- '("e" . meow-next-word)
- '("E" . meow-next-symbol)
- '("f" . meow-find)
- '("g" . meow-cancel-selection)
- '("G" . meow-grab)
- '("h" . meow-left)
- '("H" . meow-left-expand)
- '("i" . meow-insert)
- '("I" . meow-open-above)
- '("j" . meow-next)
- '("J" . meow-next-expand)
- '("k" . meow-prev)
- '("K" . meow-prev-expand)
- '("l" . meow-right)
- '("L" . meow-right-expand)
- '("m" . meow-join)
- '("n" . meow-search)
- '("o" . meow-block)
- '("O" . meow-to-block)
- '("p" . meow-yank)
- '("q" . meow-quit)
- '("Q" . meow-goto-line)
- '("r" . meow-replace)
- '("R" . meow-swap-grab)
- '("s" . meow-kill)
- '("t" . meow-till)
- '("u" . meow-undo)
- '("U" . meow-undo-in-selection)
- '("v" . meow-visit)
- '("w" . meow-mark-word)
- '("W" . meow-mark-symbol)
- '("x" . meow-line)
- '("X" . meow-goto-line)
- '("y" . meow-save)
- '("Y" . meow-sync-grab)
- '("z" . meow-pop-selection)
- '("'" . repeat)
- '("<escape>" . ignore)))
- (use-package meow
- :config
- (meow-setup)
- (meow-global-mode 1))
- (use-package doom-themes
- :config
- ;; Global settings (defaults)
- (setq doom-themes-enable-bold t ; if nil, bold is universally disabled
- doom-themes-enable-italic t) ; if nil, italics is universally disabled
- (load-theme 'doom-monokai-classic t)
- ;; Enable flashing mode-line on errors
- (doom-themes-visual-bell-config)
- ;; Enable custom neotree theme (all-the-icons must be installed!)
- ;;(doom-themes-neotree-config)
- ;; or for treemacs users
- ;;(setq doom-themes-treemacs-theme "doom-atom") ; use "doom-colors" for less minimal icon theme
- ;;(doom-themes-treemacs-config)
- ;; Corrects (and improves) org-mode's native fontification.
- (doom-themes-org-config))
- (use-package all-the-icons)
- (use-package doom-modeline
- :init (doom-modeline-mode 1))
- (use-package org-faces
- :ensure nil
- :after org
- :custom-face
- (org-block ((nil (:inherit fixed-pitch :foreground nil))))
- (org-code ((nil (:inherit (shadow fixed-pitch)))))
- (org-table ((nil (:inherit fixed-pitch))))
- (org-verbatim ((nil (:inherit (shadow fixed-pitch)))))
- (org-special-keyword ((nil (:inherit (font-lock-comment-face fixed-pitch)))))
- (org-meta-line ((nil (:inherit (font-lock-comment-face fixed-pitch)))))
- (org-checkbox ((nil (:inherit fixed-pitch)))))
- (defun my/org-mode-setup ()
- (org-indent-mode)
- (org-hide-block-all) ;; Collapse all blocks
- (variable-pitch-mode 1)
- (visual-line-mode 1))
- (use-package org
- :hook (org-mode . my/org-mode-setup))
- (use-package org-superstar
- :after org
- :hook (org-mode . (lambda () (org-superstar-mode 1))))
- (defun my/org-mode-visual-fill ()
- (setq visual-fill-column-width 120
- visual-fill-column-center-text t)
- (visual-fill-column-mode 1))
- (use-package visual-fill-column
- :after org
- :hook (org-mode . my/org-mode-visual-fill))
- (use-package corfu
- :custom
- (corfu-auto t)
- (corfu-separator ?\s)
- (corfu-quit-no-match 'separator)
- :init
- (global-corfu-mode)
- :bind (:map corfu-map ([remap isearch-forward] . corfu-insert-separator)))
- (use-package emacs
- :init
- (setq tab-always-indent 'complete))
- (use-package corfu-popupinfo
- :ensure nil
- :after corfu
- :custom
- (corfu-popupinfo-delay 0)
- :init
- (corfu-popupinfo-mode)
- :bind (:map corfu-popupinfo-map
- ("M-p" . corfu-popupinfo-scroll-down)
- ("M-n" . corfu-popupinfo-scroll-up)))
- (use-package kind-icon
- :ensure t
- :after corfu
- :custom
- (kind-icon-use-icons nil)
- (kind-icon-default-face 'corfu-default) ; to compute blended backgrounds correctly
- :config
- (add-to-list 'corfu-margin-formatters #'kind-icon-margin-formatter))
- (use-package orderless
- :custom
- (completion-styles '(orderless basic))
- (completion-category-defaults nil)
- (completion-category-overrides '((file (styles basic partial-completion))
- (eglot (styles orderless)))))
- (use-package cape
- :init
- (dolist (capf (list #'cape-dabbrev
- #'cape-file))
- (add-to-list 'completion-at-point-functions capf)))
- (use-package yasnippet
- :diminish
- :config
- (yas-reload-all)
- (yas-global-mode))
- (use-package yasnippet-snippets)
- (use-package company)
- (use-package company-yasnippet
- :ensure nil
- :config
- (add-to-list 'completion-at-point-functions (cape-company-to-capf #'company-yasnippet)))
- (use-package vertico
- :init (vertico-mode))
- ;; Persist history over Emacs restarts. Vertico sorts by history position.
- (use-package savehist
- :init
- (savehist-mode))
- ;; A few more useful configurations...
- (use-package emacs
- :init
- ;; Add prompt indicator to `completing-read-multiple'.
- ;; We display [CRM<separator>], e.g., [CRM,] if the separator is a comma.
- (defun crm-indicator (args)
- (cons (format "[CRM%s] %s"
- (replace-regexp-in-string
- "\\`\\[.*?]\\*\\|\\[.*?]\\*\\'" ""
- crm-separator)
- (car args))
- (cdr args)))
- (advice-add #'completing-read-multiple :filter-args #'crm-indicator)
- ;; Do not allow the cursor in the minibuffer prompt
- (setq minibuffer-prompt-properties
- '(read-only t cursor-intangible t face minibuffer-prompt))
- (add-hook 'minibuffer-setup-hook #'cursor-intangible-mode)
- ;; Emacs 28: Hide commands in M-x which do not work in the current mode.
- ;; Vertico commands are hidden in normal buffers.
- ;; (setq read-extended-command-predicate
- ;; #'command-completion-default-include-p)
- ;; Enable recursive minibuffers
- (setq enable-recursive-minibuffers t))
- (use-package vertico-directory
- :after vertico
- :ensure nil
- :bind (:map vertico-map
- ("RET" . vertico-directory-enter)
- ("DEL" . vertico-directory-delete-char)
- ("M-DEL" . vertico-directory-delete-word))
- :hook (rfn-eshadow-update-overlay . vertico-directory-tidy))
- (use-package marginalia
- ;; Either bind `marginalia-cycle' globally or only in the minibuffer
- :bind (("M-A" . marginalia-cycle)
- :map minibuffer-local-map
- ("M-A" . marginalia-cycle))
- ;; The :init configuration is always executed (Not lazy!)
- :init
- ;; Must be in the :init section of use-package such that the mode gets
- ;; enabled right away. Note that this forces loading the package.
- (marginalia-mode))
- (defun my/eglot-capf ()
- (setq-local completion-at-point-functions
- (list (cape-super-capf
- #'eglot-completion-at-point
- (cape-company-to-capf #'company-yasnippet)
- #'cape-dabbrev
- #'cape-file))))
- (use-package eglot
- :config
- (advice-add 'eglot-completion-at-point :around #'cape-wrap-buster)
- :bind (("C-c l a a" . eglot-code-actions)
- ("C-c l a i" . eglot-code-actions-inline)
- ("C-c l a q" . eglot-code-actions-quickfix)
- ("C-c l a e" . eglot-code-actions-extract)
- ("C-c l a r" . eglot-code-actions-rewrite)
- ("C-c l r" . elot-rename)
- ("C-c l s d" . xref-find-definitions)
- ("C-c l s i" . eglot-find-implementation)
- ("C-c l s c" . eglot-find-declaration)
- ("C-c l s t" . eglot-find-typeDefinition))
- :hook
- (eglot-managed-mode . my/eglot-capf))
- (use-package magit)
- (use-package helpful
- :bind
- (([remap describe-function] . helpful-callable)
- ([remap describe-variable] . helpful-variable)
- ([remap describe-key] . helpful-key)
- ([remap describe-command] . helpful-command)))
- (use-package no-littering
- :init
- (setq no-littering-etc-directory
- (expand-file-name "config/" user-emacs-directory))
- (setq no-littering-var-directory
- (expand-file-name "data/" user-emacs-directory))
- (setq backup-directory-alist
- `(("\\`/tmp/" . nil)
- ("\\`/dev/shm/" . nil)
- ("." . ,(no-littering-expand-var-file-name "backup/")))))
- (use-package fish-mode)
- (use-package haskell-mode)
- (use-package clojure-mode)
- (use-package cider)
- (defun my/clojure-mode-hook ()
- (clj-refactor-mode 1)
- (yas-minor-mode 1) ; for adding require/use/import statements
- ;; This choice of keybinding leaves cider-macroexpand-1 unbound
- (cljr-add-keybindings-with-prefix "C-c C-m"))
- (use-package clj-refactor
- :hook (clojure-mode . my/clojure-mode-hook))
- (use-package telega)
|