2024-09-04 00:54:15 +06:00
#+TITLE :Config
#+AUTH
#+STARTUP : showeverything
* :toc:
- [[#auto-install-packages ][auto install packages ]]
2024-12-12 00:05:59 +06:00
- [[#setup-use-package ][Setup use-package ]]
2024-09-04 00:54:15 +06:00
- [[#common ][common ]]
2024-12-12 00:05:59 +06:00
- [[#ui ][UI ]]
2024-09-04 00:54:15 +06:00
- [[#main-packages ][main packages ]]
- [[#general-keybindings ][General keybindings ]]
2025-02-15 20:38:47 +06:00
- [[#window-move ][Window move ]]
2024-09-04 00:54:15 +06:00
- [[#evil-mode ][Evil Mode ]]
- [[#ivy ][Ivy ]]
- [[#counsel ][Counsel ]]
- [[#dired ][dired ]]
2024-12-12 00:05:59 +06:00
- [[#image-viewer ][Image Viewer ]]
2024-09-04 00:54:15 +06:00
- [[#openwith ][openwith ]]
- [[#org-download ][org-download ]]
- [[#perspective ][perspective ]]
- [[#anzu ][anzu ]]
- [[#doom-modeline ][doom-modeline ]]
- [[#neotree ][NeoTree ]]
2024-10-27 00:29:18 +06:00
- [[#file-copy-file-open-file-in-dired ][file (copy file, open file in dired) ]]
- [[#bm-marks--org-tangle ][bm-marks / org tangle ]]
- [[#project--projectile ][project / projectile ]]
2024-09-04 00:54:15 +06:00
- [[#buffer--bookmarks--harpoon ][buffer & bookmarks & harpoon ]]
- [[#sudo-edit--code-sudo-editsplitperfect-marginjson ][Sudo Edit & code (sudo edit/split/perfect margin/json) ]]
- [[#magit ][Magit ]]
- [[#org-settings ][ORG settings ]]
- [[#org-hot-key ][org hot key ]]
- [[#org-temo-chet-sheet ][Org Temo chet sheet ]]
- [[#toc ][toc ]]
- [[#org-babel-execute ][org babel execute ]]
- [[#org-agenda ][org agenda ]]
- [[#org-image ][Org Image ]]
2025-02-15 20:38:47 +06:00
- [[#org-level-size ][org level size ]]
2024-09-04 00:54:15 +06:00
- [[#programming ][PROGRAMMING ]]
2024-09-12 22:43:09 +06:00
- [[#snipets ][snipets ]]
2024-09-04 00:54:15 +06:00
- [[#python ][python ]]
- [[#go ][go ]]
2025-02-15 20:38:47 +06:00
- [[#emacs-lisp ][Emacs-lisp ]]
2024-09-04 00:54:15 +06:00
- [[#decorations ][decorations ]]
- [[#colorthemes ][colorthemes ]]
- [[#diff ][diff ]]
- [[#fonts ][fonts ]]
- [[#ligature ][ligature ]]
- [[#icons ][icons ]]
- [[#rainbow-mode ][rainbow mode ]]
- [[#nyan-mode ][Nyan-mode ]]
- [[#evil-snipe ][evil-snipe ]]
- [[#org-chckbox-hl ][org chckbox hl ]]
- [[#hl-todo ][hl-todo ]]
2024-10-27 00:29:18 +06:00
- [[#programs ][Programs ]]
2024-10-14 00:46:34 +06:00
- [[#emms ][emms ]]
2024-10-27 00:29:18 +06:00
- [[#latex-pdf ][Latex (pdf) ]]
2025-02-15 20:38:47 +06:00
- [[#terminal ][Terminal ]]
2024-12-12 00:05:59 +06:00
- [[#exwm ][EXWM ]]
- [[#setup-windows-hotkey ][setup windows hotkey ]]
- [[#setup-wm ][setup wm ]]
2025-02-15 20:38:47 +06:00
- [[#text-processor ][Text Processor ]]
2024-09-04 00:54:15 +06:00
- [[#scripts ][scripts ]]
- [[#add-projectile-project ][add projectile project ]]
- [[#rest ][REST ]]
2024-10-14 00:46:34 +06:00
- [[#insert-some-text ][insert some text ]]
2024-09-04 00:54:15 +06:00
* auto install packages
#+begin_src emacs-lisp
(require 'package)
2024-12-12 00:05:59 +06:00
;; (add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/ ") t)
(setq package-archives '(("melpa" . "https://melpa.org/packages/ ")
("gnu" . "https://elpa.gnu.org/packages/ ")))
2024-09-04 00:54:15 +06:00
(package-initialize)
2024-12-12 00:05:59 +06:00
(unless package-archive-contents
(package-refresh-contents))
;; Список пакетов для установки.
;; (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
;; yaml-mode
;; ;; 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
;; ))
2024-09-04 00:54:15 +06:00
;; Список пакетов для установки.
(defvar my-required-packages
2024-12-12 00:05:59 +06:00
'(org-download
2024-09-04 00:54:15 +06:00
))
;; Установите недостающие пакеты.
(dolist (p my-required-packages)
(unless (package-installed-p p)
(package-install p)))
#+end_src
2024-12-12 00:05:59 +06:00
** Setup use-package
#+begin_src emacs-lisp
;; This is only needed once, near the top of the file
(require 'use-package)
#+end_src
2024-09-04 00:54:15 +06:00
* common
#+begin_src emacs-lisp
(setq make-backup-files nil) ; Отключение создания файлов резервных копий (файлов с суффиксом ~)
(setq auto-save-default nil) ; Отключение автосохранения и создания файлов с префиксом .#
(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) ; автоматически закрывать скопки
(add-hook 'before-save-hook 'delete-trailing-whitespace) ; Удаление пустых пробелов в конце строк перед сохранением файла
(blink-cursor-mode 0) ; cursorline
(setq display-fill-column-indicator nil) ; отключить вертикальные линии
(setq warning-minimum-level :error) ; отключить предупреждения
2024-12-12 00:05:59 +06:00
;; (setq indent-tabs-mode nil) ;; Использовать пробелы вместо табов
;; (setq tab-width 4)
2024-09-04 00:54:15 +06:00
#+end_src
2024-12-12 00:05:59 +06:00
** UI
#+begin_src emacs-lisp
(setq inhibit-startup-screen t) ; Отключение стартового экрана при запуске Emacs
(menu-bar-mode -1) ; Отключение меню-б а р а
(tool-bar-mode -1) ; Отключение панели инструментов
(scroll-bar-mode -1) ; Отключение вертикальной полосы прокрутки
(show-paren-mode 1) ; Включение подсветки соответствующих скобок
#+end_src
*** Cursor LIne
#+begin_src emacs-lisp
(global-hl-line-mode 1) ; cursor line
#+end_src
2024-09-04 00:54:15 +06:00
2024-12-12 00:05:59 +06:00
* main packages
2024-09-04 00:54:15 +06:00
** General keybindings
https://github.com/noctuid/general.el
*** Setup
#+begin_src emacs-lisp
(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
#+end_src
*** KeyBind
#+begin_src emacs-lisp
(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")
)
#+end_src
2025-02-15 20:38:47 +06:00
** Window move
#+begin_src emacs-lisp
(global-unset-key (kbd "C-j"))
(global-set-key (kbd "C-h") 'windmove-left) ;; Alt-h для перехода влево
(global-set-key (kbd "C-l") 'windmove-right) ;; Alt-l для перехода вправо
(global-set-key (kbd "C-k") 'windmove-up) ;; Alt-k для перехода вверх
(global-set-key (kbd "C-j") 'windmove-down) ;; Alt-j для перехода вниз
#+end_src
2024-09-04 00:54:15 +06:00
** Evil Mode
https://github.com/emacs-evil/evil
*** Setup
#+begin_src emacs-lisp
(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)
2024-12-12 00:05:59 +06:00
(setq evil-kill-on-visual-paste nil)
(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)
)
2024-09-04 00:54:15 +06:00
(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 '((?\( . ("(" . ")"))
(?\[ . ("[" . "]"))
(?\{ . ("{" . "}"))
(?\" . ("\"" . "\""))
(?\` . ("`" . "`"))
(?\' . ("'" . "'"))
(?\) . ("(" . ")"))
(?\] . ("[" . "]"))
(?\} . ("{" . "}")))))
#+end_src
*** KeyBing
#+begin_src emacs-lisp
2024-12-12 00:05:59 +06:00
(use-package key-chord
:ensure t
:config
(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))
2024-09-12 22:43:09 +06:00
2024-09-04 00:54:15 +06:00
(spc-leader
"l l" 'evil-scroll-line-to-center)
#+end_src
** Ivy
2024-12-12 00:05:59 +06:00
пакет для Emacs, который предоставляет интерфейс для интерактивного выбора (completion) и навигации. Это часть экосистемы swiper и counsel и часто используется для упрощения работы с различными функциями Emacs
2024-09-04 00:54:15 +06:00
*** Setup
#+begin_src emacs-lisp
2024-12-12 00:05:59 +06:00
;; (use-package ivy
;; :ensure t
;; :init
;; (ivy-mode +1))
2024-09-04 00:54:15 +06:00
(use-package ivy
:ensure t
2024-12-12 00:05:59 +06:00
:config
(ivy-mode 1) ;; Включение Ivy
:bind (:map ivy-minibuffer-map
("C-l" . ivy-immediate-done) ;; Завершить без проверки
("RET" . ivy-done) ;; Завершить выбор
("<return >" . ivy-done) ;; Завершить выбор
("C-j" . ivy-next-line) ;; Перейти к следующей строке
("C-k" . ivy-previous-line)) ;; Перейти к предыдущей строке
:custom
(ivy-use-virtual-buffers t) ;; Показывать виртуальные буферы (например, недавние файлы)
(ivy-count-format "(%d/%d) ")) ;; Показывать счетчик выбора
;; (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)
;; (define-key ivy-minibuffer-map (kbd "C-j") 'ivy-next-line)
;; (define-key ivy-minibuffer-map (kbd "C-k") 'ivy-previous-line)
2024-09-04 00:54:15 +06:00
#+end_src
** Counsel
#+begin_src emacs-lisp
2024-12-12 00:05:59 +06:00
;; (unless (package-installed-p 'counsel)
;; (package-refresh-contents)
;; (package-install 'counsel))
;; (setq counsel-fzf-cmd
;; (concat
;; "find . -type f -not -path '*/.*' 2>&1 | "
;; "grep -v 'Permission denied' | "
;; "grep -v './env/ ' | "
;; "grep -v './fonts/ ' | "
;; "grep -v './__pycache__/ ' | "
;; "grep -v 'site-packages' | "
;; "grep -v '.pyc' | "
;; "grep -v '_minted' | "
;; "fzf -f '%s'"))
(use-package counsel
:ensure t
:config
;; Настройка команды fzf для counsel
(setq counsel-fzf-cmd
(concat
"find . -type f -not -path '*/.*' 2>&1 | "
"grep -v 'Permission denied' | "
"grep -v './env/ ' | "
"grep -v './fonts/ ' | "
"grep -v './__pycache__/ ' | "
"grep -v 'site-packages' | "
"grep -v '.pyc' | "
"grep -v '_minted' | "
"fzf -f '%s'"))
;; Включение counsel для различных функций
:bind (("M-x" . counsel-M-x) ;; Улучшенная команда M-x
))
2024-10-14 00:46:34 +06:00
#+end_src
показывать ошибки при rg поиске
#+begin_src emacs-lisp
(with-eval-after-load 'counsel
(advice-add 'counsel-rg
:around
(lambda (func &rest args)
(cl-flet ((filter-func (code) (if (= code 2) 0 code)))
(unwind-protect
(progn (advice-add 'process-exit-status :filter-return #'filter-func)
(apply func args))
(advice-remove 'process-exit-status #'filter-func))))))
2024-09-04 00:54:15 +06:00
#+end_src
2025-02-15 20:38:47 +06:00
2024-09-04 00:54:15 +06:00
** dired
*** setup
2024-10-27 00:29:18 +06:00
(setq dired-listing-switches "-alXGh --group-directories-first":
Определяет параметры, которые передаются команде ls для отображения содержимого директорий.
-a: Показывает все файлы, включая скрытые (начинающиеся с точки).
-l: Выводит в длинном формате, показывая дополнительные детали (размер, дата, права и т.д.).
-X: Сортирует файлы по расширению.
-G: Отключает цвета в выводе (если они поддерживаются).
-h: Показывает размеры в человекочитаемом формате (например, 1K, 234M).
--group-directories-first: Сначала отображает директории, затем файлы.
(setq dired-recursive-copies 'always):
Устанавливает режим рекурсивного копирования для dired на "всегда", что означает, что при копировании директорий все их содержимое будет скопировано рекурсивно.
(setq dired-recursive-deletes 'top):
Определяет поведение для рекурсивного удаления. Установлено на "top", что означает, что при удалении директории будет предложено удалить её содержимое (файлы и поддиректории) перед удалением самой директории.
(setq global-auto-revert-non-file-buffers t):
Включает автоматическое обновление (рефреш) буферов, не относящихся к файлам, например, таких как dired, если они изменяются на диске. Это помогает поддерживать актуальность отображаемой информации.
(setq auto-revert-verbose nil):
Отключает вывод сообщений о том, что буфер был обновлен. Это может уменьшить количество сообщений в минибуфере.
(setq dired-dwim-target t):
Включает "do what I mean" (DWIM) поведение для установки целевого пути. Это значит, что при использовании команды dired для перемещения или копирования файлов, Emacs попытается автоматически угадать, куда вы хотите переместить файлы, основываясь на контексте.
(setq wdired-allow-to-change-permissions t):
Разрешает изменять права доступа на файлы и директории в режиме wdired, который позволяет редактировать файлы в dired в текстовом режиме.
2024-09-04 00:54:15 +06:00
#+begin_src emacs-lisp
(require 'dired)
(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)
#+end_src
*** открыть файл в вертикально разделенном экране
#+begin_src emacs-lisp
(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)
#+end_src
2024-10-27 00:29:18 +06:00
2024-09-04 00:54:15 +06:00
*** dired subtree
#+begin_src emacs-lisp
(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)
#+end_src
*** открыть pcmanfm
#+begin_src emacs-lisp
(defun dired-open-pcmanfm ()
"Open the current directory in Dired with PCManFM."
(interactive)
(let ((current-dir (dired-current-directory)))
2025-02-15 20:38:47 +06:00
(start-process "pcmanfm" nil "pcmanfm" current-dir)))
2024-09-04 00:54:15 +06:00
#+end_src
2024-10-27 00:29:18 +06:00
*** функция для копирования текущего пути
#+begin_src emacs-lisp
(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))))
#+end_src
*** KeyBind
2024-09-04 00:54:15 +06:00
#+begin_src emacs-lisp
(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")
)
#+end_src
2024-12-12 00:05:59 +06:00
** Image Viewer
#+begin_src emacs-lisp
(setq imagemagick-enabled-types '("PNG" "JPEG" "GIF" "TIFF"))
(setq image-use-external-converter t)
#+end_src
2024-09-04 00:54:15 +06:00
** openwith
#+begin_src emacs-lisp
(use-package openwith
:ensure t
:config
2024-10-27 00:29:18 +06:00
(openwith-mode t)
;; :defer t
)
2024-09-04 00:54:15 +06:00
2024-10-27 00:29:18 +06:00
(defun activate-openwith()
(setq openwith-associations
(list (list (openwith-make-extension-regexp '("pdf" "djvu"))
"atril" '(file))
;; (list (openwith-make-extension-regexp '("flac" "mp3" "wav"))
;; "vlc" '(file))
2025-02-15 20:38:47 +06:00
(list (openwith-make-extension-regexp '("bmp" "jpeg" "jpg" "png" "webp"))
"sxiv -t ." '(file))
2024-10-27 00:29:18 +06:00
(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))
))
)
2024-09-04 00:54:15 +06:00
;; Отключить автоматическое открытие изображений в 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)
2024-10-27 00:29:18 +06:00
;; Добавляем хук для активации openwith-mode в dired-mode
(add-hook 'dired-mode-hook 'activate-openwith)
2024-12-12 00:05:59 +06:00
;; setup open when make frame
(defun setup/openwith ()
"Activate openwith in Dired mode."
(when (derived-mode-p 'dired-mode)
(activate-openwith)))
(add-hook 'after-make-frame-functions
(lambda (_frame)
(with-current-buffer (current-buffer)
(setup/openwith))))
2024-09-04 00:54:15 +06:00
#+end_src
** org-download
#+begin_src emacs-lisp
(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)
#+end_src
** perspective
#+begin_src emacs-lisp
(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")
)
#+end_src
** anzu
2024-10-27 00:29:18 +06:00
улучшенный интерфейс для поиска и замены текста
2024-09-04 00:54:15 +06:00
#+begin_src emacs-lisp
(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))
#+end_src
** doom-modeline
#+begin_src emacs-lisp
2024-12-12 00:05:59 +06:00
(use-package doom-modeline
:ensure t
:hook (after-init . doom-modeline-mode) ;; Включает doom-modeline после инициализации Emacs
;; :custom
;; (doom-modeline-height 15) ;; Высота строки модели
;; (doom-modeline-bar-width 3) ;; Ширина индикатора
;; (doom-modeline-icon t) ;; Показывать иконки (зависит от поддержки шрифтов)
;; (doom-modeline-major-mode-icon t) ;; Показывать иконку режима
;; (doom-modeline-minor-modes nil) ;; Скрыть список минорных режимов
)
2024-09-04 00:54:15 +06:00
#+end_src
** NeoTree
*** Setup
#+begin_src emacs-lisp
(use-package neotree
2024-10-27 00:29:18 +06:00
:init
2024-09-04 00:54:15 +06:00
:ensure t
:bind ("<f8 >" . neotree-toggle)
:config
;; Отображать файлы и папки на том же уровне
(setq-default neo-smart-open t)
;; Вертикальное расположение окна neotree
(setq neo-window-position 'left)
2024-10-27 00:29:18 +06:00
;; Активация пакетов
(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)
)
2024-09-04 00:54:15 +06:00
(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)
))
#+end_src
*** KeyBind
#+begin_src emacs-lisp
(spc-leader
"c c" '(neotree-show :wk "toggle neoTree")
)
#+end_src
2024-10-27 00:29:18 +06:00
** file (copy file, open file in dired)
2025-02-15 20:38:47 +06:00
*** Dired function
2024-09-04 00:54:15 +06:00
#+begin_src emacs-lisp
(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))))
2025-02-15 20:38:47 +06:00
#+end_src
2024-09-04 00:54:15 +06:00
2025-02-15 20:38:47 +06:00
*** transpose-frame
#+begin_src emacs-lisp
(use-package transpose-frame
:ensure t
:bind (
("C-t" . transpose-frame)
))
#+end_src
#+begin_src emacs-lisp
2024-09-04 00:54:15 +06:00
(spc-leader
2025-02-15 20:38:47 +06:00
"f" '(:ignore t :wk "file/frame")
"f t" '(transpose-frame :wk "transpose-frame")
2024-09-04 00:54:15 +06:00
"f c" '(copy-file :wk "copy file")
"f o" '(open-current-directory-in-dired :wk "open in dired"))
#+end_src
2025-02-15 20:38:47 +06:00
2024-10-27 00:29:18 +06:00
** bm-marks / org tangle
2024-09-04 00:54:15 +06:00
#+begin_src emacs-lisp
(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")
2024-10-14 00:46:34 +06:00
"m c" '(bm-remove-all-all-buffers :wk "claer mark")
"m 8" '(org-babel-tangle :wk "org-babel-tangle"))
2024-09-04 00:54:15 +06:00
(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)))))
#+end_src
2024-10-27 00:29:18 +06:00
** project / projectile
*** setup projectile
#+begin_src emacs-lisp
(use-package projectile
:ensure t
:init
(projectile-mode +1)
:config
(setq projectile-completion-system 'ivy))
#+end_src
*** KeyBind
2024-12-12 00:05:59 +06:00
2024-10-27 00:29:18 +06:00
add and switch project
#+begin_src emacs-lisp
(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)))
#+end_src
2025-02-15 20:38:47 +06:00
*** Search M-x commands with fzf
#+begin_src emacs-lisp
(use-package fzf
:ensure t
:init (setenv "FZF_DEFAULT_COMMAND" "fd --type f")
)
#+end_src
2024-10-27 00:29:18 +06:00
hot keys
#+begin_src emacs-lisp
(spc-leader
"," '(find-file :wk "find file")
"SPC" '(counsel-fzf :wk "fzf find file")
"." '(swiper :wk "swiper")
"p" '(:ignore t :wk "projectile")
2024-12-12 00:05:59 +06:00
"p a" '(projectile/open-and-switch-project :wk "add project and switch")
2024-10-27 00:29:18 +06:00
"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"))
#+end_src
2024-09-04 00:54:15 +06:00
** buffer & bookmarks & harpoon
#+begin_src emacs-lisp
(spc-leader
;; buffer
"b" '(:ignore t :wk "buffer")
2024-12-12 00:05:59 +06:00
;; "b i" '(counsel-ibuffer :wk "Switch ibuffer")
2024-09-04 00:54:15 +06:00
"b i" '(ibuffer :wk "Switch ibuffer")
2024-12-12 00:05:59 +06:00
"b c" '(counsel-ibuffer :wk "counsel Switch ibuffer")
2024-09-04 00:54:15 +06:00
"b b" '(projectile-switch-to-buffer :wk "Switch buffer")
2024-12-12 00:05:59 +06:00
"b m" '(rename-buffer :wk "rename buffer")
2024-10-27 00:29:18 +06:00
"b k" '(:ignore t :wk "kill buffer")
"b k t" '(kill-this-buffer :wk "Kill this buffer")
"b k k" '(kill-buffer :wk "Kill buffer in imenu")
2024-09-04 00:54:15 +06:00
;; 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"))
2024-10-27 00:29:18 +06:00
(spc-leader
)
2024-09-04 00:54:15 +06:00
(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")
)
#+end_src
2024-10-27 00:29:18 +06:00
** Sudo Edit & code (sudo edit/split/perfect margin/json)
*** Perfect margin settings
2024-09-04 00:54:15 +06:00
#+begin_src emacs-lisp
2024-10-27 00:29:18 +06:00
;; (setq perfect-margin-visible-width 150)
2024-12-12 00:05:59 +06:00
(setq perfect-margin-visible-width 180)
2024-09-04 00:54:15 +06:00
#+end_src
2024-10-27 00:29:18 +06:00
*** KeyBind
2024-09-04 00:54:15 +06:00
#+begin_src emacs-lisp
(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")
)
#+end_src
** Magit
#+begin_src emacs-lisp
(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")
2025-02-15 20:38:47 +06:00
"g c" '(magit-commit-create t :wk "commit")
2024-09-04 00:54:15 +06:00
"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")
2025-02-15 20:38:47 +06:00
"g f" '(magit-fetch :wk "fetch")
2024-09-04 00:54:15 +06:00
)
#+end_src
* ORG settings
** org hot key
#+begin_src emacs-lisp
(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")
2024-12-12 00:05:59 +06:00
"o ;" '(org-cycle :wk "org cycle global")
2024-09-04 00:54:15 +06:00
"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")
2024-10-27 00:29:18 +06:00
"o k" '(org-ctrl-c-minus :wk "eval buffer")
2024-09-04 00:54:15 +06:00
"h RET" '(org-meta-return :wk "org return (insert lists))")
)
2024-12-12 00:05:59 +06:00
(with-eval-after-load 'org
(define-key org-mode-map (kbd "M-h") nil))
2024-09-04 00:54:15 +06:00
#+end_src
** 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
#+begin_src emacs-lisp
(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)
#+end_src
** org babel execute
#+begin_src emacs-lisp
;; Разрешить выполнение кода в 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)
#+end_src
** org agenda
#+begin_src emacs-lisp
(custom-set-variables
'(org-agenda-files
'("~/Documents/work.org" "/home/fs/Documents/dates.org" "/home/fs/Documents/time.org")))
#+end_src
** Org Image
#+begin_src emacs-lisp
(setq org-image-actual-width '(500))
#+end_src
2025-02-15 20:38:47 +06:00
** org level size
#+begin_src emacs-lisp
;; Установка стилей для заголовков
(custom-set-faces
'(org-level-1 ((t (:height 1.5 :weight bold))))
'(org-level-2 ((t (:height 1.3 :weight bold))))
'(org-level-3 ((t (:height 1.2))))
'(org-level-4 ((t (:height 1.1)))))
#+end_src
2024-09-04 00:54:15 +06:00
* PROGRAMMING
2024-09-12 22:43:09 +06:00
** snipets
#+begin_src emacs-lisp
(use-package yasnippet
:ensure t
:config
(yas-global-mode 1))
#+end_src
2024-09-04 00:54:15 +06:00
** python
#+begin_src emacs-lisp
(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)
#+end_src
** go
#+begin_src emacs-lisp
(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)
#+end_src
2025-02-15 20:38:47 +06:00
** Emacs-lisp
#+begin_src emacs-lisp
(use-package highlight-function-calls
:ensure t
:config
(add-hook 'emacs-lisp-mode-hook 'highlight-function-calls-mode))
#+end_src
2024-09-04 00:54:15 +06:00
* decorations
** colorthemes
#+begin_src emacs-lisp
(custom-set-faces
'(line-number ((t (:foreground "white")))) ; Цвет отображения номера строки
'(line-number-current-line ((t (:foreground "white"))))) ; Цвет текущей строки
2025-02-15 20:38:47 +06:00
'(org-block-background ((t (:background "#1b1b1b"))))
; '(line-number ((t (:foreground "black")))) ; Цвет отображения номера строки
; '(line-number-current-line ((t (:foreground "black"))))) ; Цвет текущей строки
2024-10-27 00:29:18 +06:00
;; (load-theme 'doom-1337 t)
2024-10-14 00:46:34 +06:00
;; (load-theme 'doom-nord t)
2024-09-12 22:43:09 +06:00
;; (load-theme 'doom-nord-aurora t)
2024-10-14 00:46:34 +06:00
;; (load-theme 'doom-nord-light t)
;; (load-theme 'doom-one-light t)
2024-09-12 22:43:09 +06:00
;; (load-theme 'doom-gruvbox-light t)
2025-02-15 20:38:47 +06:00
;; (load-theme 'doom-gruvbox t)
2024-10-14 00:46:34 +06:00
;; (load-theme 'doom-ayu-dark t)
;; (load-theme 'doom-dracula t)
2024-09-12 22:43:09 +06:00
;; (load-theme 'doom-tomorrow-night t)
2024-10-27 00:29:18 +06:00
;; (load-theme 'doom-henna t)
2025-02-15 20:38:47 +06:00
(load-theme 'doom-one t)
2024-10-14 00:46:34 +06:00
;; (load-theme 'doom-opera t)
2024-10-28 21:49:48 +06:00
;; (load-theme 'doom-monokai-pro t)
2024-10-14 00:46:34 +06:00
;; (load-theme 'doom-spacegrey t)
2024-09-12 22:43:09 +06:00
;; (load-theme 'doom-tokyo-night t)
2024-10-14 00:46:34 +06:00
;; (load-theme 'doom-xcode t)
2024-09-12 22:43:09 +06:00
;; (load-theme 'doom-solarized-light t)
2024-10-27 00:29:18 +06:00
;; (load-theme 'doom-solarized-dark t)
2025-02-15 20:38:47 +06:00
;; (load-theme 'solarized-gruvbox-light t)
;; (load-theme 'solarized-gruvbox-dark t)
2024-09-04 00:54:15 +06:00
2024-10-14 00:46:34 +06:00
;; (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)
2024-09-04 00:54:15 +06:00
2024-10-27 00:29:18 +06:00
;; (add-to-list 'custom-theme-load-path "~/.emacs.d/iceberg-theme.el")
;; (load-theme 'iceberg t)
2024-10-14 00:46:34 +06:00
;; (set-frame-parameter nil 'alpha-background 100)
2024-10-27 00:29:18 +06:00
;; (set-frame-parameter nil 'alpha-background 92)
2025-02-15 20:38:47 +06:00
(let ((al 90)) ;; Прозрачность %
2024-10-27 00:29:18 +06:00
(set-frame-parameter (selected-frame) 'alpha `(,al . ,al)) ;; Прозрачность для текущего фрейма
(add-to-list 'default-frame-alist `(alpha . (,al . ,al)))) ;; Прозрачность для всех новых фреймов
2024-09-04 00:54:15 +06:00
#+end_src
** diff
состоянии изменений git
#+begin_src emacs-lisp
(global-diff-hl-mode +1)
#+end_src
** fonts
#+begin_src emacs-lisp
; 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
2024-10-27 00:29:18 +06:00
(defun set-small-font-wayland ()
(interactive)
(set-face-attribute 'default nil
:font "JetBrainsMonoNL Nerd Font"
:height 110
:weight 'medium))
2024-09-04 00:54:15 +06:00
(defun set-small-font ()
(interactive)
(set-face-attribute 'default nil
2024-10-27 00:29:18 +06:00
:font "JetBrainsMonoNL Nerd Font"
2024-09-04 00:54:15 +06:00
:height 120
:weight 'medium))
(defun set-big-font ()
(interactive)
(set-face-attribute 'default nil
2025-02-15 20:38:47 +06:00
:font "Firacode Nerd Font"
2024-12-12 00:05:59 +06:00
:height 140
:weight 'medium))
(defun set-large-font ()
(interactive)
(set-face-attribute 'default nil
:font "JetBrainsMonoNL Nerd Font"
:height 200
2024-09-04 00:54:15 +06:00
:weight 'medium))
2024-10-27 00:29:18 +06:00
;; (set-small-font-wayland)
2024-10-28 21:49:48 +06:00
;; (set-small-font)
(set-big-font)
2024-09-04 00:54:15 +06:00
(spc-leader
"c f" '(:ignore t :wk "font")
"c f s" '(set-small-font :wk "small font")
2024-12-12 00:05:59 +06:00
"c f b" '(set-big-font :wk "big font")
"c f l" '(set-large-font :wk "l font"))
2024-09-04 00:54:15 +06:00
;; 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)
#+end_src
** ligature
#+begin_src emacs-lisp
(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))
#+end_src
** icons
#+begin_src emacs-lisp
(require 'all-the-icons)
(require 'all-the-icons-dired)
(add-hook 'dired-mode-hook 'all-the-icons-dired-mode)
#+end_src
** 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.
#+begin_src emacs-lisp
(require 'rainbow-mode)
(add-hook 'org-mode-hook 'rainbow-mode)
(add-hook 'prog-mode-hook 'rainbow-mode)
#+end_src
** Nyan-mode
#+begin_src emacs-lisp
2024-10-27 00:29:18 +06:00
(use-package nyan-mode
:ensure t
:init
:config
(setq nyan-wavy-trail t)
(setq nyan-animate-nyancat t)
(nyan-mode 1)) ;; Включить анимацию
;; (require 'nyan-mode)
;; (nyan-mode +1)
;;
;; (defun my-nyan-cat-settings ()
;; "Set Nyan Cat settings for new frames."
;; (setq nyan-animate-nyancat t)
;; (setq nyan-wavy-trail t)
;; )
;;
;; ;; Применение настроек к уже открытому фрейму
;; (my-nyan-cat-settings)
;;
;; ;; Применение настроек для новых фреймов
;; (add-hook 'after-make-frame-functions
;; (lambda (frame)
;; (my-nyan-cat-settings)
;; (select-frame frame)
;; ))
2024-09-04 00:54:15 +06:00
#+end_src
** evil-snipe
#+begin_src emacs-lisp
(require 'evil-snipe)
(evil-snipe-mode +1)
(evil-snipe-override-mode +1)
(setq evil-snipe-smart-case +1)
#+end_src
** org chckbox hl
#+begin_src emacs-lisp
(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)
#+end_src
** hl-todo
#+begin_src emacs-lisp
;(require 'hl-todo)
;(global-hl-todo-mode +1)
#+end_src
2024-10-27 00:29:18 +06:00
* Programs
2024-10-14 00:46:34 +06:00
** emms
#+begin_src emacs-lisp
2024-10-27 00:29:18 +06:00
;; Функция для отображения только названия треков в плейлисте
(defun my-emms-track-simple-description (track)
"Return a simple description of the TRACK with only the title."
(let ((name (emms-track-get track 'info-title)))
(if name
name
(emms-track-simple-description track))))
2024-10-14 00:46:34 +06:00
(use-package emms
2024-10-27 00:29:18 +06:00
:init
(setq emms-track-description-function 'my-emms-track-simple-description)
2024-10-14 00:46:34 +06:00
:ensure t
:config
(require 'emms-setup)
(emms-all) ;; Загружает все основные модули Emms
(emms-default-players) ;; Определяет плееры
(setq emms-source-file-default-directory "~/Music/ ") ;; Укажите свою папку с музыкой
;; Отображение текущего трека в mode-line
(use-package emms-mode-line
:config
(emms-mode-line 1))
;; Включить отображение времени проигрывания
(use-package emms-playing-time
:config
(emms-playing-time 1))
2024-10-27 00:29:18 +06:00
(with-eval-after-load 'emms
(define-key emms-playlist-mode-map (kbd "l") 'emms-seek-forward)
(define-key emms-playlist-mode-map (kbd "h") 'emms-seek-backward)
(define-key emms-playlist-mode-map (kbd "o") 'emms-pause)
(define-key emms-playlist-mode-map (kbd "C-c k") 'emms-playlist-clear)
(define-key emms-playlist-mode-map (kbd "j") 'next-line)
(define-key emms-playlist-mode-map (kbd "k") 'previous-line)
(define-key emms-playlist-mode-map (kbd "C-u") 'scroll-down-command)
(define-key emms-playlist-mode-map (kbd "C-d") 'scroll-up-command)
)
)
;; Включаем Evil mode в плейлисте EMMS
(add-hook 'emms-playlist-mode-hook 'evil-normalize-keymaps)
(spc-leader
"e" '(:ignore t :wk "music")
"e d" '(emms-add-dired :wk "add dired tree to playlist")
"e t" '(emms-add-directory-tree :wk "dir tree to playlist")
"e r" '(emms :wk "start")
2024-12-12 00:05:59 +06:00
"e a" '(emms-toggle-repeat-track :wk "repeat track")
2024-10-27 00:29:18 +06:00
"e s" '(emms-pause :wk "stop")
"e k" '(emms-next :wk "next")
"e j" '(emms-previous :wk "previous")
;; "e w" '(emms :wk "save playlist")
"e i" '(emms-seek-forward :wk "seek-forward 10s")
"e u" '(emms-seek-backward :wk "seek-backward 10s")
2024-10-28 21:49:48 +06:00
"e w" '(:ignore t :wk "music playlist load/save")
2024-12-12 00:05:59 +06:00
"e w s" '(emms-playlist-save :wk "save playlist")
"e w l" '(emms-play-m3u-playlist :wk "load playlist")
2024-10-27 00:29:18 +06:00
)
2024-10-14 00:46:34 +06:00
#+end_src
2024-10-27 00:29:18 +06:00
** Latex (pdf)
2025-02-15 20:38:47 +06:00
*** Warning
#+begin_quote
PLEASE READ THIS WARNING ***********************************
The following (inessential) packages failed to install properly:
yb-book
You can fix this by running this command:
tlmgr update --all --reinstall-forcibly-removed
to complete the installation.
However, if the problem was a failure to download (by far the
most common cause), check that you can connect to the chosen mirror
in a browser; you may need to specify a mirror explicitly.
******************************************************************
#+end_quote
2024-10-28 21:49:48 +06:00
*** Install
2024-10-27 00:29:18 +06:00
чтобы экспорт работал кректно надо установить pygments
=pip install pygments= но для arch linux =sudo pacman -S python-pygments=
2024-10-28 21:49:48 +06:00
установка из стандартных репозиториев арча не дает результатов, нужно устанавливать в ручную
https://tug.org/texlive/quickinstall.html
*** setting
2024-10-27 00:29:18 +06:00
#+begin_src emacs-lisp
(setq org-latex-pdf-process
'("xelatex -interaction nonstopmode %f"
"xelatex -interaction nonstopmode %f"))
2024-10-28 21:49:48 +06:00
#+end_src
2024-12-12 00:05:59 +06:00
2024-10-28 21:49:48 +06:00
*** настройка каталога PATH
#+begin_src emacs-lisp
;; Указываем путь к каталогу LaTeX
(setenv "PATH" (concat "/usr/local/texlive/2024/bin/x86_64-linux:" (getenv "PATH")))
(setq exec-path (append '("/usr/local/texlive/2024/bin/x86_64-linux") exec-path))
(executable-find "mktexlsr")
2024-10-27 00:29:18 +06:00
2024-10-28 21:49:48 +06:00
(setq org-latex-compiler "xelatex") ;; Используйте "lualatex", если хотите использовать LuaTeX
2024-10-27 00:29:18 +06:00
#+end_src
2024-10-28 21:49:48 +06:00
*** включить подсветку синтаксиса
2024-10-27 00:29:18 +06:00
#+begin_src emacs-lisp
2024-10-28 21:49:48 +06:00
;; Использовать minted для подсветки синтаксиса при экспорте в PDF через LaTeX
(setq org-latex-listings 'minted)
2024-10-27 00:29:18 +06:00
2024-10-28 21:49:48 +06:00
;; Добавить настройки minted в preamble
(setq org-latex-packages-alist '(("" "minted")))
#+end_src
2024-10-27 00:29:18 +06:00
2024-10-28 21:49:48 +06:00
*** Настройка процесса экспорта в PDF для Org Mode
#+begin_src emacs-lisp
(setq org-latex-pdf-process
'("xelatex -interaction nonstopmode -output-directory %o %f"
"xelatex -interaction nonstopmode -output-directory %o %f"))
2024-10-27 00:29:18 +06:00
#+end_src
*** Cheat sheet
**** дефолтный header
2024-10-28 21:49:48 +06:00
#+begin_src tex
2024-10-27 00:29:18 +06:00
#+LATEX_HEADER : \hypersetup{colorlinks=true, linkcolor=black} ;; убрать красную подсветку из ссылок
#+LATEX_HEADER : \usepackage{fontspec} ;; подтержка русского языка
#+LATEX_HEADER : \setmainfont{Noto Sans} ;; шрифт
2024-10-28 21:49:48 +06:00
#+LATEX_CLASS_OPTIONS : [7pt] ;; размер шрифта
#+end_src
2024-10-27 00:29:18 +06:00
2024-10-28 21:49:48 +06:00
**** отступы от границ
#+begin_src tex
#+LATEX_HEADER : \usepackage[a4paper, left=2cm, right=2cm, top=2.5cm, bottom=2.5cm]{geometry}
#+end_src
a4paper — формат бумаги (можно поменять на letterpaper или другой, если требуется).
left=2cm, right=2cm, top=2.5cm, bottom=2.5cm — отступы от левой, правой, верхней и нижней границы страницы, соответственно. можно изменить эти значения на нужные размеры в сантиметрах (или дюймах, используя in).
2024-10-14 00:46:34 +06:00
2025-02-15 20:38:47 +06:00
** Terminal
*** Open terminal with random buffer name
#+begin_src emacs-lisp
(defun run-buffer-random (command)
"Open a shell and rename its buffer to shell-<randomname >."
(let ((random-name (format "shell-%s" (make-temp-name ""))) ; Генерируем случайное имя
(shell-buffer (funcall command))) ; Запускаем shell
(with-current-buffer shell-buffer
(rename-buffer random-name t)))) ; Переименовываем буфер
(defun open-eshell-on-right ()
"Open a terminal in a new right split window with a randomly named buffer."
(interactive)
(let ((term-buffer (generate-new-buffer (format "eshell-%s" (make-temp-name "")))))
(set-window-buffer (split-window-right) term-buffer)
(select-window (get-buffer-window term-buffer))
(eshell term-buffer)))
(defun rand-eshell ()
(interactive)
(run-buffer-random #'eshell)) ; Передаем функцию как объект
(defun rand-shell ()
(interactive)
(run-buffer-random #'vterm)) ; Передаем функцию как объект
(defun default-terminal ()
(interactive)
(run-buffer-random #'eshell))
#+end_src
*** scripts
**** fuzzy cd by main dirs
#+begin_src emacs-lisp
(defun counsel-find-dirs ()
"Search directories with `find` and display results in Ivy."
(interactive)
(let* ((paths '("/home/fs/Desktop/pet"
"/home/fs/Desktop/tmp"
"/home/fs/Desktop/work"))
(find-command (concat "find "
(mapconcat #'shell-quote-argument paths " ")
" -maxdepth 2 -type d ! -readable -prune -o -print"))
(results (split-string (shell-command-to-string find-command) "\n" t)))
(ivy-read "Select directory: " results
:action (lambda (dir)
(when (file-directory-p dir)
(dired dir))))))
#+end_src
**** цвета
#+begin_src emacs-lisp
(add-hook 'eshell-preoutput-filter-functions
'ansi-color-apply)
(setenv "TERM" "xterm-256color")
#+end_src
*** open terminal
#+begin_src emacs-lisp
(spc-leader
"t" '(:ignore t :wk "terminal")
"t e" '(rand-eshell :wk "run emacs shell")
"t s" '(rand-shell :wk "run standart shell")
"t t" '(open-eshell-on-right :wk "eshell on right")
)
#+end_src
*** Vterm
#+begin_src emacs-lisp
(use-package eshell-vterm
:load-path "site-lisp/eshell-vterm"
:demand t
:after eshell
:config
(eshell-vterm-mode))
#+end_src
**** Vterm paste
#+begin_src emacs-lisp
(with-eval-after-load 'evil
(add-hook 'vterm-mode-hook
(lambda ()
;; Назначение hjkl как стрелок в normal state
(evil-define-key 'normal vterm-mode-map
"p" 'vterm-yank
"h" (lambda () (interactive) (vterm-send-key "<left >"))
"j" (lambda () (interactive) (vterm-send-key "<down >"))
"k" (lambda () (interactive) (vterm-send-key "<up >"))
"l" (lambda () (interactive) (vterm-send-key "<right >"))))))
#+end_src
2024-12-12 00:05:59 +06:00
* EXWM
** setup windows hotkey
*** ace window (для перемещения по окнам)
#+begin_src emacs-lisp
(use-package ace-window
:ensure t
:bind (
("M-s" . ace-swap-window))
:config
(setq aw-swap-other-window t))
#+end_src
2025-02-15 20:38:47 +06:00
#+RESULTS :
: ace-swap-window
2024-12-12 00:05:59 +06:00
** setup wm
#+begin_src emacs-lisp
;; (org-babel-load-file
;; (expand-file-name
;; "lib/ex.org"
;; user-emacs-directory))
#+end_src
2025-02-15 20:38:47 +06:00
* Text Processor
#+begin_src emacs-lisp
(org-babel-load-file
(expand-file-name
"lib/text-processor.el"
user-emacs-directory))
#+end_src
2024-12-12 00:05:59 +06:00
2024-09-04 00:54:15 +06:00
* scripts
** add projectile project
#+begin_src emacs-lisp
(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."))))
#+end_src
2024-10-14 00:46:34 +06:00
2024-09-04 00:54:15 +06:00
** REST
#+begin_src emacs-lisp
(defun send-easy-http ()
(interactive)
(let (
(output-buffer (get-buffer-create "*Rest Output* "))
2024-12-12 00:05:59 +06:00
;; (command (concat "python /home/fs/bin/easy_http.py " buffer-file-name " " (projectile-project-root))))
(command (concat "/home/fs/bin/http " buffer-file-name " " (projectile-project-root))))
2024-09-04 00:54:15 +06:00
(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")
)
#+end_src
2024-10-14 00:46:34 +06:00
** insert some text
*** insert results output
2024-09-04 00:54:15 +06:00
#+begin_src emacs-lisp
(defun insert-results-output ()
(interactive)
(insert " :results output")
)
2024-10-14 00:46:34 +06:00
#+end_src
2024-09-04 00:54:15 +06:00
2024-10-14 00:46:34 +06:00
*** insert org babel tangle
#+begin_src emacs-lisp
(defun insert-org-tangle ()
(interactive)
(insert " :tangle change_file.ext")
)
#+end_src
2024-10-28 21:49:48 +06:00
*** insert latex header
#+begin_src emacs-lisp
(defun insert-latex-header ()
(interactive)
(insert "#+LATEX_HEADER: \\hypersetup{colorlinks=true, linkcolor=black}\n")
(insert "#+LATEX_HEADER: \\usepackage{fontspec}\n")
(insert "#+LATEX_HEADER: \\setmainfont{Noto Sans}\n")
(insert "#+LATEX_CLASS_OPTIONS: [11pt]\n")
)
#+end_src
2024-10-14 00:46:34 +06:00
*** keybind
#+begin_src emacs-lisp
2024-09-04 00:54:15 +06:00
(spc-leader
2024-10-14 00:46:34 +06:00
"i c" '(insert-results-output :wk " :results output")
"i m " '(insert-org-tangle :wk " :tangle change_file.ext")
2024-10-28 21:49:48 +06:00
"i l " '(insert-latex-header :wk "latex header")
2024-09-04 00:54:15 +06:00
)
#+end_src