33 KiB
33 KiB
- :toc:
- auto install packages
- common
- main packages
- KeyBinds
- ORG settings
- PROGRAMMING
- decorations
- scripts
- TOOD
#+TITLE:Config #+AUTH
:toc:
auto install packages
(require 'package)
(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t)
(package-initialize)
;; Список пакетов для установки.
(defvar my-required-packages
'(doom-themes
doom-modeline
evil
evil-collection
evil-surround
evil-snipe
which-key
general
key-chord
toc-org
org-bullets
projectile
sudo-edit
ivy
counsel
harpoon
bm
vterm
org-download
restclient
magit
magit-delta
image-dired
;; decorations
rainbow-mode
all-the-icons
all-the-icons-dired ;; M-x all-the-icons-install-fonts
centered-window
nyan-mode
perfect-margin
hl-todo
ligature
tree-sitter
diff-hl
dired-subtree
tree-sitter-langs
flycheck
flycheck-pycheckers
;; python
elpy
;; copilot
;; editorconfig
; jsonrpc
haskell-mode
;; frontend
web-mode
))
;; Установите недостающие пакеты.
(dolist (p my-required-packages)
(unless (package-installed-p p)
(package-install p)))
common
(menu-bar-mode -1) ; Отключение меню-бара
(tool-bar-mode -1) ; Отключение панели инструментов
(scroll-bar-mode -1) ; Отключение вертикальной полосы прокрутки
(show-paren-mode 1) ; Включение подсветки соответствующих скобок
(setq make-backup-files nil) ; Отключение создания файлов резервных копий (файлов с суффиксом ~)
(setq auto-save-default nil) ; Отключение автосохранения и создания файлов с префиксом .#
(setq inhibit-startup-screen t) ; Отключение стартового экрана при запуске Emacs
(setq-default isearch-lazy-highlight t) ; Включение "ленивой" подсветки при поиске
(global-visual-line-mode t) ; Включение переноса строк вместо горизонтального скролла
(setq-default display-line-numbers 'relative) ; Включение относительных номеров строк
(prefer-coding-system 'utf-8) ; Установка предпочтительной системы кодирования на UTF-8
(set-default-coding-systems 'utf-8) ; Установка системы кодирования по умолчанию на UTF-8
(set-terminal-coding-system 'utf-8) ; Установка системы кодирования терминала на UTF-8
(set-keyboard-coding-system 'utf-8) ; Установка системы кодирования клавиатуры на UTF-8
(setq default-buffer-file-coding-system 'utf-8) ; Установка системы кодирования файловых буферов на UTF-8
(setq scroll-conservatively 10000) ; Установка плавного скроллинга без резкого перемещения экрана
(electric-pair-mode 1) ; автоматически закрывать скопки
(global-hl-line-mode 1) ; cursor line
(add-hook 'before-save-hook 'delete-trailing-whitespace) ; Удаление пустых пробелов в конце строк перед сохранением файла
(blink-cursor-mode 0) ; cursorline
(setq display-fill-column-indicator nil) ; отключить вертикальные линии
(setq warning-minimum-level :error) ; отключить предупреждения
main packages
General keybindings
https://github.com/noctuid/general.el
Setup
(use-package general
:ensure t
:config
(general-evil-setup)
(general-create-definer spc-leader
:states '(normal insert visual emacs)
:keymaps 'override
:prefix "SPC" ;; set leader key
:global-prefix "M-SPC")) ;; access leader in insert mode
KeyBind
(spc-leader
"8" '(save-buffer :wk "save file")
"2" '(evil-quit :wk "quit file")
"7" '(evil-first-non-blank :wk "first non blank")
"9" '(evil-last-non-blank :wk "last non blank")
"h r r" '((lambda () (interactive) (load-file "/home/fs/.emacs.d/init.el")) :wk "Reload emacs config")
)
Evil Mode
https://github.com/emacs-evil/evil
Setup
(use-package evil
:ensure t
:init
(setq evil-want-integration t)
(setq evil-want-keybinding nil)
(setq evil-vsplit-window-right t)
(setq evil-split-window-below t)
(setq evil-want-C-u-scroll t)
:config
(evil-mode 1)
(define-key evil-normal-state-map "p" 'evil-paste-after)
(setq evil-kill-on-visual-paste nil))
(use-package evil-collection
:after evil
:ensure t
:config
(setq evil-collection-mode-list '(dashboard dired ibuffer))
(evil-collection-init))
(use-package evil-surround
:ensure t
:config
(global-evil-surround-mode 1)
(setq-default evil-surround-pairs-alist '((?\( . ("(" . ")"))
(?\[ . ("[" . "]"))
(?\{ . ("{" . "}"))
(?\" . ("\"" . "\""))
(?\` . ("`" . "`"))
(?\' . ("'" . "'"))
(?\) . ("(" . ")"))
(?\] . ("[" . "]"))
(?\} . ("{" . "}")))))
KeyBing
(require 'key-chord)
(key-chord-mode 1)
(key-chord-define evil-insert-state-map "jk" 'evil-normal-state)
(key-chord-define evil-insert-state-map "kj" 'evil-normal-state)
(define-key evil-normal-state-map (kbd ",") 'evil-scroll-up)
(define-key evil-normal-state-map (kbd ".") 'evil-scroll-down)
(define-key evil-normal-state-map (kbd "'") 'evil-execute-macro)
(spc-leader
"l l" 'evil-scroll-line-to-center)
pojectile
(use-package projectile
:ensure t
:init
(projectile-mode +1)
:config
(setq projectile-completion-system 'ivy))
Ivy
Setup
(use-package ivy
:ensure t
:init
(ivy-mode +1))
(define-key ivy-minibuffer-map (kbd "C-l") 'ivy-immediate-done)
(define-key ivy-minibuffer-map (kbd "RET") 'ivy-done)
(define-key ivy-minibuffer-map (kbd "<return>") 'ivy-done)
KeyBind
(define-key ivy-minibuffer-map (kbd "C-j") 'ivy-next-line)
(define-key ivy-minibuffer-map (kbd "C-k") 'ivy-previous-line)
Counsel
(unless (package-installed-p 'counsel)
(package-refresh-contents)
(package-install 'counsel))
(setq counsel-fzf-cmd "find . -type f -not -path '*/.*' | fzf -f \"%s\"")
dired
setup
(require 'dired)
(defun dired-open-file-in-new-tab ()
"Open the current file in dired in a new tab."
(interactive)
(tab-new)
(dired-find-file))
(setq dired-listing-switches "-alXGh --group-directories-first"
dired-recursive-copies 'always
dired-recursive-deletes 'top
global-auto-revert-non-file-buffers t
auto-revert-verbose nil
dired-dwim-target t
wdired-allow-to-change-permissions t)
открыть файл в вертикально разделенном экране
(defun dired-open-split-horizontal ()
"In dired, open current file in another window if exists, otherwise split window horizontally."
(interactive)
;; Сохраняем путь текущего файла
(let ((current-file (dired-get-file-for-visit)))
;; Проверяем, есть ли другое окно
(if (one-window-p)
(split-window-horizontally))
;; Переключаемся на другое окно
(other-window 1)
;; Открываем файл или каталог, используя сохраненный путь
(find-file current-file))
(other-window 1)
)
(define-key dired-mode-map (kbd "s") 'dired-open-in-split-window)
(evil-define-key 'normal dired-mode-map (kbd "s") 'dired-open-split-horizontal)
(evil-define-key 'normal dired-mode-map (kbd "h") 'dired-up-directory)
копировать текущий путь
(defun copy-current-file-path-to-clipboard ()
"Copy the current buffer file name to the clipboard."
(interactive)
(let ((filename (if (equal major-mode 'dired-mode)
default-directory
(buffer-file-name))))
(when filename
(kill-new filename)
(message "Copied buffer file name '%s' to the clipboard." filename))))
dired subtree
(require 'dired-subtree)
(evil-define-key 'normal dired-mode-map (kbd "i") 'dired-subtree-insert)
(evil-define-key 'normal dired-mode-map (kbd "r") 'dired-subtree-remove)
(evil-define-key 'normal dired-mode-map (kbd "o") 'dired-open-file-in-new-tab)
открыть pcmanfm
(defun dired-open-pcmanfm ()
"Open the current directory in Dired with PCManFM."
(interactive)
(let ((current-dir (dired-current-directory)))
(start-process "pcmanfm" nil "pcmanfm" current-dir)))
(define-key dired-mode-map (kbd "C-c o") 'dired-open-pcmanfm)
dired hot keys
(spc-leader
"d" '(:ignore t :wk "dired")
"d o" '(dired :wk "open dired")
"d c" '(:ignore t :wk "copy/crete")
"d c c" '(dired-do-copy :wk "dired copy")
"d c d" '(dired-create-directory :wk "create dir")
"d c f" '(dired-create-empty-file :wk "crete file")
"d c p" '(copy-current-file-path-to-clipboard :wk "copy file path to clipboard")
"d r" '(dired-do-rename :wk "renema & move")
"d p" '(:ignore t :wk "permissions")
"d p p" '(dired-do-chmod :wk "chmod")
"d p o" '(dired-do-chown :wk "chown")
"d h" '(dired-hide-details-mode :wk "hide/show deteils")
)
openwith
(use-package openwith
:ensure t
:config
(openwith-mode t)
(setq openwith-associations
(list (list (openwith-make-extension-regexp '("pdf"))
"atril" '(file))
(list (openwith-make-extension-regexp '("flac" "mp3" "wav"))
"vlc" '(file))
(list (openwith-make-extension-regexp '("bmp" "jpeg" "jpg" "png"))
"vimiv" '(file))
(list (openwith-make-extension-regexp '("mpv" "mkv" "mp4"))
"mpv" '(file))
(list (openwith-make-extension-regexp '("doc" "docx" "odt"))
"libreoffice" '("--writer" file))
(list (openwith-make-extension-regexp '("ods" "xls" "xlsx"))
"libreoffice" '("--calc" file))
(list (openwith-make-extension-regexp '("odp" "pps" "ppt" "pptx"))
"libreoffice" '("--impress" file))
)))
;; Отключить автоматическое открытие изображений в Emacs
(setq auto-mode-alist (rassq-delete-all 'image-mode auto-mode-alist))
;; Функция для отключения openwith-mode в org-mode
(defun disable-openwith-in-org-mode ()
"Disable openwith-mode in org-mode."
(when openwith-mode
(openwith-mode -1)))
;; Добавляем хук для отключения openwith-mode в org-mode
(add-hook 'org-mode-hook 'disable-openwith-in-org-mode)
org-download
(require 'org-download)
(defun my-org-download-set-dir ()
"Set `org-download-image-dir` to the directory of the current
buffer's file."
(setq-local org-download-image-dir (concat (file-name-directory
(buffer-file-name)) "/images/" (file-name-base buffer-file-name) "/") ))
(add-hook 'org-mode-hook 'my-org-download-set-dir)
(add-hook 'dired-mode-hook 'org-download-enable)
perspective
(use-package perspective
:ensure t
:config
(setq persp-mode-prefix-key nil
persp-suppress-no-prefix-key-warning t)
(persp-mode))
(spc-leader
"w" '(:ignore t :wk "workspace")
"w i" '(persp-switch :wk "switch workspace")
"w n" '(persp-next :wk "next workspace")
"w p" '(persp-prev :wk "prev workspace")
"w k" '(persp-kill :wk "kill workspace")
"w r" '(persp-rename :wk "rename workspace")
"w l" '(persp-state-load :wk "state load")
"w s" '(persp-state-save :wk "state save")
"w 1" '((lambda () (interactive) (persp-switch-by-number 1)) :wk "1")
"w 2" '((lambda () (interactive) (persp-switch-by-number 2)) :wk "2")
"w 3" '((lambda () (interactive) (persp-switch-by-number 3)) :wk "3")
"w 4" '((lambda () (interactive) (persp-switch-by-number 4)) :wk "4")
"w 5" '((lambda () (interactive) (persp-switch-by-number 5)) :wk "5")
"w 6" '((lambda () (interactive) (persp-switch-by-number 6)) :wk "6")
"w 7" '((lambda () (interactive) (persp-switch-by-number 7)) :wk "7")
"w 8" '((lambda () (interactive) (persp-switch-by-number 8)) :wk "8")
"w 9" '((lambda () (interactive) (persp-switch-by-number 9)) :wk "9")
)
anzu
(use-package anzu
:ensure t
:config
)
(use-package evil-anzu
:ensure t
:after (evil anzu)
:config
(setq anzu-search-threshold 0)
(setq anzu-cons-mode-line-p nil)
(global-anzu-mode 1))
doom-modeline
(require 'doom-modeline)
(doom-modeline-mode 1)
Perfect margin
(setq perfect-margin-visible-width 150)
NeoTree
Setup
(use-package neotree
:ensure t
:bind ("<f8>" . neotree-toggle)
:config
;; Отображать файлы и папки на том же уровне
(setq-default neo-smart-open t)
;; Вертикальное расположение окна neotree
(setq neo-window-position 'left)
)
;; Активация пакетов
(use-package all-the-icons :ensure t)
(setq neo-theme (if (display-graphic-p) 'icons 'arrow))
(setq neo-window-fixed-size nil)
(setq neo-smart-open t)
(setq neo-window-width 50)
(add-hook 'neotree-mode-hook
(lambda ()
(define-key evil-normal-state-local-map (kbd "q") 'neotree-hide)
(define-key evil-normal-state-local-map (kbd "RET") 'neotree-enter)
(define-key evil-normal-state-local-map (kbd "g") 'neotree-refresh)
(define-key evil-normal-state-local-map (kbd "f") 'neotree-create-node)
))
KeyBind
(spc-leader
"c c" '(neotree-show :wk "toggle neoTree")
)
KeyBinds
file
(defun open-current-directory-in-dired ()
"Open the current directory of the current file in Dired.
If a Dired buffer is already opened, navigate to that buffer."
(interactive)
(let ((dir (file-name-directory (or buffer-file-name default-directory))))
(if (get-buffer-window (dired-noselect dir))
(switch-to-buffer-other-window (dired-noselect dir))
(dired-jump nil dir))))
(spc-leader
"f" '(:ignore t :wk "file")
"f c" '(copy-file :wk "copy file")
"f o" '(open-current-directory-in-dired :wk "open in dired"))
marks
(spc-leader
"m" '(:ignore t :wk "marks")
"m a" '(bm-toggle :wk "toggle mark")
;; "m n" '(bm-next :wk "next mark")
"m n" '(lambda () (interactive) (bm-next) (recenter) :wk "next mark")
"m p" '(lambda () (interactive) (bm-previous) (recenter) :wk "prev mark")
;; "m p" '(bm-previous :wk "prev mark")
"m l" '(bm-show :wk "list marks")
"m g" '(lambda () (interactive) (bm-show-goto-bookmark) (recenter) :wk "goto bookmark")
"m c" '(bm-remove-all-all-buffers :wk "claer mark"))
(setq bm-marker 'bm-marker-left)
(setq bm-highlight-style nil)
(setq bm-highlight-style 'bm-highlight-only-fringe)
(custom-set-faces
'(bm-face ((t (:background "yellow" :foreground "black" :weight bold)))))
buffer & bookmarks & harpoon
(spc-leader
;; buffer
"b" '(:ignore t :wk "buffer")
"b i" '(ibuffer :wk "Switch ibuffer")
"b b" '(projectile-switch-to-buffer :wk "Switch buffer")
"b k" '(kill-this-buffer :wk "Kill this buffer")
;; bookmark
"b s" '(bookmark-set :wk "set bookmarks")
"b d" '(bookmark-delete :wk "delete bookmarks")
"b l" '(list-bookmarks :wk "list bookmarks")
"b j" '(bookmark-jump :wk "list jump")
"b a" '(bookmark-set :wk "bookmarks set")
"b r" '(revert-buffer :wk "Reload buffer"))
(spc-leader
"TAB" '(:ignore t :wk "?")
"TAB TAB" '(comment-line :wk "comment line")
)
(spc-leader
"h" '(:ignore t :wk "help & harpoon")
"h a" '(harpoon-add-file :wk "add to harpoon")
"h c" '(harpoon-clear :wk "harboon clear")
"h l" '(harpoon-toggle-quick-menu :wk "toggle menu")
"h m" '(harpoon-quick-menu-hydra :wk "quick menu")
"h 1" '(harpoon-go-to-1 :wk "1")
"h 2" '(harpoon-go-to-2 :wk "2")
"h 3" '(harpoon-go-to-3 :wk "3")
"h 4" '(harpoon-go-to-4 :wk "4")
"h 5" '(harpoon-go-to-5 :wk "5")
"h d" '(harpoon-delete-item :wk "delete item")
)
project
add and switch project
(defun projectile/open-and-switch-project (directory)
" - "
(interactive (list (read-directory-name "What directory? ")))
(let (
(projectile-file-path (concat directory "/.projectile"))
(git-directory-path (concat directory "/.git")))
(unless (file-directory-p git-directory-path)
(unless (file-exists-p projectile-file-path)
(make-empty-file projectile-file-path)))
(projectile-add-known-project directory)))
hot keys
(spc-leader
"," '(find-file :wk "find file")
"SPC" '(counsel-fzf :wk "fzf find file")
"." '(swiper :wk "swiper")
"p" '(:ignore t :wk "projectile")
"p a" '(projectile/open-and-switch-project :wk "add project")
"p s" '(projectile-switch-project :wk "switch project")
;; "p g" '(counsel-rg :wk "project tile grep")
"p g" '(lambda () (interactive) (counsel-rg) (recenter) :wk "project tile grep")
"b i" '(projectile-ibuffer :wk "Switch buffer")
"b n" '(projectile-next-project-buffer :wk "next project buffer")
"b p" '(projectile-previous-project-buffer :wk "previous project buffer"))
Sudo Edit & code (sudo edit/split/perfect margin/json)
(require 'sudo-edit)
(spc-leader
"c" '(:ignore t :wk "code")
"c s" '(sudo-edit :wk "sudo-edit")
"c u" '(comment-line :wk "comment line")
"s" '(:ignore t :wk "split window")
"s h" '(split-window-right :wk "split window horizontaly")
"s v" '(split-window-below :wk "split window verticalty")
"c p" '(perfect-margin-mode :wk "center")
"c j" '(json-pretty-print :wk "json")
)
Magit
(require 'magit)
(spc-leader
"g" '(:ignore t :wk "git")
"g g" '(magit :wk "magit")
"g a" '(magit-stage-buffer-file :wk "add curent file")
"g u" '(magit-unstage-buffer-file :wk "unstage current file")
"g l" '(:ignore t :wk "log")
"g l g" '(magit-log-current :wk "log")
"g l l" '(magit-log-buffer-file :wk "log buffer")
"g c" '(magit-commit t :wk "commit")
"g b" '(:ignore t :wk "branch")
"g b b" '(magit-branch-checkout t :wk "checkout")
"g b c" '(magit-branch-create t :wk "create branch")
"g b p" '(magit-pull-branch t :wk "pull")
"g s" '(:ignore t :wk "stash")
"g s s" '(magit-stash t :wk "stash")
"g s p" '(magit-stash-pop t :wk "stash pop")
"g d" '(:ignore t :wk "diff")
"g d d" '(magit-diff-buffer-file :wk "log buffer")
"g d g" '(magit-diff-unstaged :wk "diff unstaged buffer")
"g d s" '(magit-diff-staged :wk "diff staged buffer")
)
ORG settings
org hot key
(spc-leader
"o" '(:ignore t :wk "org hot key")
"o c" '(org-time-stamp :wk "calendar paste date")
"o l" '(org-shiftmetaright :wk "move metric right")
"o h" '(org-shiftmetaleft :wk "move metric left")
"o t" '(org-tree-to-indirect-buffer :wk "tree to inderect buffer")
"o o" '(org-cycle-global :wk "org cycle global")
"o i" '(org-display-inline-images :wk "display image")
"o m" '(org-babel-execute-src-block :wk "org babel execute")
"o e" '(org-edit-src-code :wk "org babel execute")
"o r" '(org-reset-checkbox-state-subtree :wk "reset checkboxs")
"o g" '(org-agenda :wk "org agenda")
"o m" '(eval-buffer :wk "eval buffer")
"h RET" '(org-meta-return :wk "org return (insert lists))")
)
Org Temo chet sheet
Typing the below + TAB | Expands to … |
---|---|
<a | '#+BEGIN_EXPORT ascii' … '#+END_EXPORT |
<c | '#+BEGIN_CENTER' … '#+END_CENTER' |
<C | '#+BEGIN_COMMENT' … '#+END_COMMENT' |
<e | '#+BEGIN_EXAMPLE' … '#+END_EXAMPLE' |
<E | '#+BEGIN_EXPORT' … '#+END_EXPORT' |
<h | '#+BEGIN_EXPORT html' … '#+END_EXPORT' |
<l | '#+BEGIN_EXPORT latex' … '#+END_EXPORT' |
<q | '#+BEGIN_QUOTE' … '#+END_QUOTE' |
<s | '#+BEGIN_SRC' … '#+END_SRC' |
<v | '#+BEGIN_VERSE' … '#+END_VERSE' |
toc
(require 'toc-org nil t)
(add-hook 'org-mode-hook 'toc-org-enable)
(add-hook 'org-mode-hook 'org-indent-mode)
; (setq toc-org-max-depth 2)
(require 'org-bullets)
(add-hook 'org-mode-hook (lambda () (org-bullets-mode 1)))
(require 'org-bullets)
(which-key-mode 1)
(setq which-key-min-display-lines 13)
; (setq which-key-side-window-location 'bottom
; which-key-sort-order #'which-key-key-order-alpha
; which-key-separator " → " )
(require 'org-tempo)
;;(electric-indent-mode -1)
(setq org-edit-src-content-indentation 0)
org babel execute
;; Разрешить выполнение кода в org-mode
(org-babel-do-load-languages
'org-babel-load-languages
'((python . t)
(shell . t)))
(setq org-src-tab-acts-natively t)
;; Отключить запросы на подтверждение выполнения кода
(setq org-confirm-babel-evaluate nil)
org agenda
(custom-set-variables
'(org-agenda-files
'("~/Documents/work.org" "/home/fs/Documents/dates.org" "/home/fs/Documents/time.org")))
Org Image
(setq org-image-actual-width '(500))
PROGRAMMING
snipets
(use-package yasnippet
:ensure t
:config
(yas-global-mode 1))
python
(defun load-python-config ()
(org-babel-load-file
(expand-file-name
"lan/python-cf.org"
user-emacs-directory)))
(add-hook 'python-mode-hook 'load-python-config)
go
(defun load-go-config ()
(org-babel-load-file
(expand-file-name
"lan/go-cf.org"
user-emacs-directory)))
(add-hook 'go-mode-hook 'load-go-config)
decorations
colorthemes
(custom-set-faces
'(line-number ((t (:foreground "white")))) ; Цвет отображения номера строки
'(line-number-current-line ((t (:foreground "white"))))) ; Цвет текущей строки
;; '(line-number ((t (:foreground "black")))) ; Цвет отображения номера строки
;; '(line-number-current-line ((t (:foreground "black"))))) ; Цвет текущей строки
; (load-theme 'doom-nord t)
;; (load-theme 'doom-nord-aurora t)
; (load-theme 'doom-nord-light t)
; (load-theme 'doom-one-light t)
;; (load-theme 'doom-gruvbox-light t)
(load-theme 'doom-gruvbox t)
; (load-theme 'doom-ayu-dark t)
; (load-theme 'doom-dracula t)
;; (load-theme 'doom-tomorrow-night t)
;; (load-theme 'doom-one t)
; (load-theme 'doom-opera t)
; (load-theme 'doom-monokai-pro t)
; (load-theme 'doom-spacegrey t)
;; (load-theme 'doom-tokyo-night t)
; (load-theme 'doom-xcode t)
;; (load-theme 'doom-solarized-light t)
; (add-to-list 'custom-theme-load-path "~/.emacs.d/everforest-theme")
; (load-theme 'everforest-hard-dark t)
; (add-to-list 'custom-theme-load-path "~/.emacs.d/atom-one-dark-theme")
; (load-theme 'atom-one-dark t)
;
(set-frame-parameter nil 'alpha-background 100)
diff
состоянии изменений git
(global-diff-hl-mode +1)
fonts
; Makes commented text and keywords italics.
; This is working in emacsclient but not emacs.
; Your font must have an italic face available.
(set-face-attribute 'font-lock-comment-face nil
:slant 'italic)
(set-face-attribute 'font-lock-keyword-face nil
:slant 'italic)
; Firacode Nerd Font
; JetBrainsMonoNL Nerd Font
(defun set-small-font ()
(interactive)
(set-face-attribute 'default nil
:font "JetBrainsMonoNL Nerd Font"
:height 120
:weight 'medium))
(defun set-big-font ()
(interactive)
(set-face-attribute 'default nil
:font "JetBrainsMonoNL Nerd Font"
:height 150
:weight 'medium))
(set-small-font)
(spc-leader
"c f" '(:ignore t :wk "font")
"c f s" '(set-small-font :wk "small font")
"c f b" '(set-big-font :wk "big font"))
;; This sets the default font on all graphical frames created after restarting Emacs.
;; Does the same thing as 'set-face-attribute default' above, but emacsclient fonts
;; are not right unless I also add this method of setting the default font.
(add-to-list 'default-frame-alist '(font . "JetBrainsMonoNL Nerd Font"))
;; Uncomment the following line if line spacing needs adjusting.
(setq-default line-spacing 0.12)
ligature
(use-package ligature
:config
;; Enable the "www" ligature in every possible major mode
(ligature-set-ligatures 't '("www"))
;; Enable traditional ligature support in eww-mode, if the
;; `variable-pitch' face supports it
(ligature-set-ligatures 'eww-mode '("ff" "fi" "ffi"))
;; Enable all Cascadia Code ligatures in programming modes
(ligature-set-ligatures 'prog-mode '("|||>" "<|||" "<==>" "<!--" "####" "~~>" "***" "||=" "||>"
":::" "::=" "=:=" "===" "==>" "=!=" "=>>" "=<<" "=/=" "!=="
"!!." ">=>" ">>=" ">>>" ">>-" ">->" "->>" "-->" "---" "-<<"
"<~~" "<~>" "<*>" "<||" "<|>" "<$>" "<==" "<=>" "<=<" "<->"
"<--" "<-<" "<<=" "<<-" "<<<" "<+>" "</>" "###" "#_(" "..<"
"..." "+++" "/==" "///" "_|_" "www" "&&" "^=" "~~" "~@" "~="
"~>" "~-" "**" "*>" "*/" "||" "|}" "|]" "|=" "|>" "|-" "{|"
"[|" "]#" "::" ":=" ":>" ":<" "$>" "==" "=>" "!=" "!!" ">:"
">=" ">>" ">-" "-~" "-|" "->" "--" "-<" "<~" "<*" "<|" "<:"
"<$" "<=" "<>" "<-" "<<" "<+" "</" "#{" "#[" "#:" "#=" "#!"
"##" "#(" "#?" "#_" "%%" ".=" ".-" ".." ".?" "+>" "++" "?:"
"?=" "?." "??" ";;" "/*" "/=" "/>" "//" "__" "~~" "(*" "*)"
"\\\\" "://"))
;; Enables ligature checks globally in all buffers. You can also do it
;; per mode with `ligature-mode'.
(global-ligature-mode t))
icons
(require 'all-the-icons)
(require 'all-the-icons-dired)
(add-hook 'dired-mode-hook 'all-the-icons-dired-mode)
rainbow mode
This minor mode sets background color to strings that match color names, e.g. #0000ff is displayed in white with a blue background.
(require 'rainbow-mode)
(add-hook 'org-mode-hook 'rainbow-mode)
(add-hook 'prog-mode-hook 'rainbow-mode)
Nyan-mode
(require 'nyan-mode)
(nyan-mode +1)
;; (nyan-toggle-wavy-trail)
;; (nyan-start-animation)
(setq nyan-wavy-trail t)
(setq nyan-animate-nyancat t)
evil-snipe
(require 'evil-snipe)
(evil-snipe-mode +1)
(evil-snipe-override-mode +1)
(setq evil-snipe-smart-case +1)
org chckbox hl
(defface org-checkbox-done-text
'((t (:inherit org-done)))
"Face for the text part of a checked org-mode checkbox.")
(font-lock-add-keywords
'org-mode
`(("^[ \t]*\\(?:[-+*]\\|[0-9]+[).]\\)[ \t]+\\(\\(?:\\[@\\(?:start:\\)?[0-9]+\\][ \t]*\\)?\\[\\(?:X\\|\\([0-9]+\\)/\\2\\)\\][^\n]*\n\\)" 1 'org-checkbox-done-text prepend))
'append)
hl-todo
;(require 'hl-todo)
;(global-hl-todo-mode +1)
scripts
add projectile project
(defun create-empty-projectile-file ()
"Create an empty .projectile file in the current directory."
(interactive)
(let ((projectile-file ".projectile"))
(if (file-exists-p projectile-file)
(message ".projectile file already exists in this directory.")
(write-region "" nil projectile-file)
(message ".projectile file created successfully."))))
REST
(defun send-easy-http ()
(interactive)
(let (
(output-buffer (get-buffer-create "*Rest Output*"))
(command (concat "python /home/fs/bin/easy_http.py " buffer-file-name " " (projectile-project-root))))
(save-buffer)
(unless (get-buffer-window output-buffer)
(split-window-right)
(other-window 1)
(switch-to-buffer output-buffer)
(other-window -1))
(with-current-buffer output-buffer
(js-mode)
(erase-buffer)
(shell-command command output-buffer)
(goto-char (point-max)))
(message command)))
(require 'restclient)
(add-to-list 'auto-mode-alist '("\\.http\\'" . restclient-mode))
(spc-leader
"r" '(:ignore t :wk "rest")
"r s" '(send-easy-http :wk "send http")
"r a" '(create-empty-projectile-file :wk "create projectile file")
)
results_output
(defun insert-results-output ()
(interactive)
(insert " :results output")
)
(spc-leader
"i c r" '(insert-results-output :wk " :results output")
)
open terminal
(defun open-term ()
"Open a terminal in a new right split window."
(interactive)
(let ((term-buffer (generate-new-buffer "*term*")))
(set-window-buffer (split-window-right) term-buffer)
(select-window (get-buffer-window term-buffer))
(vterm)))
(spc-leader
"t t" '(open-term :wk "terminal")
)
TOOD
- сохронять файл при смене буфера
- горячие клавиши для изменения размера окон
- найти альтернативу format all
- более быстрый python lsp
- copilot
- найти более подходящий спсоб работы со шрифтами и добавить горячие клавиши для управления размерами шрифтов
- org mod upgrade
- протестить дерево сохранений