Changeset fde9de8 in dotfiles for emacs/.emacs.d/.emacs-config.org


Ignore:
Timestamp:
Sep 3, 2024, 10:43:11 PM (2 months ago)
Author:
Mikhail Kirillov <w96k@…>
Branches:
master
Children:
fc6fa17
Parents:
fe2941b
Message:

Update configs

File:
1 edited

Legend:

Unmodified
Added
Removed
  • emacs/.emacs.d/.emacs-config.org

    rfe2941b rfde9de8  
    1 #+TITLE: Конфигурация Emacs
    2 #+AUTHOR: Кириллов <w96k.dev> Михаил
     1#+TITLE: Emacs configuration
     2#+AUTHOR: Kirillov <w96k.dev> Mikhail
    33#+OPTIONS: toc:nil
    44#+PROPERTY: header-args:elisp :results silent
    55#+STARTUP: showeverything
    66
    7 * Вклады
    8 Конфигурация составлена из моего кода, а также кода из конфигураций
    9 других людей. Их настолько, что все перечислять я не смогу, но оставлю
    10 интересные конфигурации других людей, в которые я время от времени
    11 заглядываю.
    12 
    13 * Лицензия
    14 Я выступаю против копирайта и интеллектуальной собственности в целом,
    15 поэтому стараюсь копирайт избегать. По этой причине свой код
    16 распространяю на правах общественного достояния вашей страны. Для этого
    17 используется лицензия [[https://creativecommons.org/publicdomain/zero/1.0/][CC0]]. Если кратко, то можете использовать без
    18 ограничений вплоть до полной приватизации всего контента. К сожалению за
    19 чужие сниппеты не могу ручаться, они распространяются по своим лицензиям
    20 и я их не указывал, впрочем всё равно никто это не проверяет и я бы не
    21 стал напрягаться из-за авторских прав на конфигурацию текстового
    22 редактора.
    23 
    24 * О конфигурации
    25 Минимальная конфигурация Emacs. Пакеты ставлю через Guix или package.el
    26 (elpa и melpa), для разделения ответственности использую грамотное
    27 программирование при помощи org-mode.
    28 
    29 Версия Emacs 28+.
    30 - В Guix пакет  ~emacs-next~
    31 - В FreeBSD пакет ~emacs-devel~
    32 - В Ubuntu [[https://launchpad.net/~kelleyk/+archive/ubuntu/emacs][PPA emacs28]] и пакет ~emacs28-native~
    33 
    34 Из программирования поддерживаются /C/, Java, /Python/, /Common Lisp /
    35 Scheme/, Haskell, Idris, Ocaml, /Ruby/, PHP, /SML/, SQL, Erlang,
    36 редактирование веб-шаблонов и различных форматов конфигураций. Какие-то
    37 языки в лучшей мере настроены, какие-то хуже, но есть почти все
    38 плюс-минус популярные.
    39 
    40 Для систем контроля версий использую встроенный /VC/ и в некоторых случаях
    41 /Magit/. Для входа в виртуальные среды используется Direnv.
    42 
    43 Для ведения заметок использую методологию Zettelkasten при помощи
    44 org-roam. Для доступа к оффлайн википедии и другим ресурсам Kiwix
    45 клиент, который стучится на сервер, который стоит дома.
    46 
    47 Для коммуникаций клиент для Telegram /telega/, для IRC /erc/ и электронной
    48 почты /gnus/, для Mastodon mastodon.el.
    49 
    50 Для системного администрирования имеют пакеты для работы с Debian,
    51 NixOS, Guix. Также есть поддержка Docker, Docker-compose: можно
    52 запускать/стопать контейнеры, а также залетать в них через TRAMP.
    53 
    54 Для установки необходимо установить пакеты Emacs из ~../../guix/user.scm~
    55 и выполнить tangle файла при помощи /M-x org-babel-tangle-file/. В
    56 дальнейшем для развёртывания конфигурации можно использовать /M-x
    57 config-tangle/ или /M-x config-load/.
    58 
    59 Данная конфигурация доступна также в сети интернет по адресу, но так как
    60 сайт обновляется нечасто, то там может лежать старая версия:
     7* About this Emacs configuration
     8
     9Configuration uses org-mode to tangle its contents to init.el and then
     10be used by emacs. I use guix home for my emacs config on gnu guix
     11system.
     12
     13If you see :tangle nil it means that snippet is not used anymore, but
     14it is left because it might be valuable in a future for me.
     15
     16This configuration is available here:
    6117https://w96k.dev/emacs.html
    6218
    63 Исходники конфигурации лежат на Sourcehut:
     19The git source code is hosted on Sourcehut:
    6420https://git.sr.ht/~w96k/dotfiles/tree/master/item/emacs
    6521
    66 Распространяется на условиях свободной лицензии [[https://gnu.org/licenses/gpl-3.0.ru.html][GNU GPL v3]],
    67 реиспользование одобряется пока распространяется под той же лицензией.
    68 
    69 * Пакеты
    70 Данная конфигурация использует следующие пакеты:
    71 
    72 - Avy :: Прыжки по тексту
    73 - Anaconda :: Поддержка Python
    74 - Auctex :: Поддержка Tex и LaTeX
    75 - Browse Kill Ring :: Обзор буфера обмена
    76 - Haskell Mode :: Поддержка языка Haskell
    77 - Idris Mode :: Поддержка языка Idris
    78 - Magit :: Интерфейс к git
    79 - Gitpatch :: Создание патчей
    80 - Goto Cgh :: Переход к последнему изменению в буфере
    81 - Debbuge :: Интерфейс debbugs (репорт багов Debian)
    82 - Deft :: Полнотекстовый поиск
    83 - Direnv :: Изменение окружения при "входе" в директорию
    84 - Docker и Docker Compose :: Моды для поддержки контейнерных технологий
    85 - Exec Path From Shell :: Синхронизация PATH переменной из шелла
    86 - Expand Region :: Семантическое расширение выделения на курсоре
    87 - Robe :: Прыжки по определениям Ruby
    88 - Geiser :: Repl для языка Scheme
    89 - Guix :: Интерфейс к Guix
    90 - Org Roam :: Zettelkasten заметки в org-mode
    91 - Gnuplot :: Программное рисование графиков
    92 - Nix Mode :: Поддержка языка Nix
    93 - Pdf Tools :: Рендер PDF файлов в Emacs
    94 - PHP Mode :: Поддержка языка PHP
    95 - Kiwix :: Чтение скачанных архивов веб-страниц
    96 - SML Mode :: Поддержка языка Standard ML
    97 - Sly/Slime :: REPL языка Common Lisp
    98 - Simple HTTPD :: HTTP Сервер на elisp
    99 - Telega :: Интерфейс к Telegram
    100 - Treemacs :: Сайдбар для навигации по проекту
    101 - Undo Tree :: Визуализация дерева отмен
    102 - Yasnippet и Yasnippet Snippets :: Сниппеты для текстов и ЯПов
    103 - Web Mode :: Поддержка шаблонов HTML и прочего
    104 
    105 Следующий блок нужен для тех, кто хочет использовать встроенный пакетный
    106 менеджер. Я использую Guix для большей части взаимодействий со сторонним
    107 кодом.
     22The license of emacs config and dotfiles is CC0 which is Public Domain.
     23
     24** Packets
     25Only needed when I need to install a package from Melpa and not GNU Guix
    10826#+begin_src elisp :tangle nil
    10927  (require 'package)
     
    11634
    11735  (require 'gnutls)
    118 
    119   (progn
    120       (package-refresh-contents)
    121       (package-install 'avy)
    122       (package-install 'php-mode)
    123       (package-install 'phps-mode)
    124       ;; (package-install 'anzu)
    125       (package-install 'anaconda-mode)
    126       (package-install 'auctex)
    127       ;; (package-install 'rmsbolt)
    128       ;; (package-install 'beginend)
    129       ;; (package-install 'composer)
    130       (package-install 'cinspect)
    131       (package-install 'debian-el)
    132       (package-install 'dpkg-dev-el)
    133       (package-install 'edebug-inline-result)
    134       ;;(package-install 'haskell-mode)
    135       ;;(package-install 'idris-mode)
    136       (package-install 'magit)
    137       (package-install 'git-timemachine)
    138       (package-install 'git-dwim)
    139       (package-install 'gitpatch)
    140       (package-install 'goto-chg)
    141       (package-install 'debbugs)
    142       ;;(package-install 'deft)
    143       ;; (package-install 'direnv)
    144       (package-install 'dumb-jump)
    145       (package-install 'docker)
    146       (package-install 'docker-cli)
    147       (package-install 'docker-tramp)
    148       (package-install 'docker-compose-mode)
    149       (package-install 'org-sql)
    150       ;;(package-install 'eglot)
    151       ;; (package-install 'eglot-java)
    152       ;; (package-install 'mastodon)
    153       ;; (package-install 'exec-path-from-shell)
    154       (package-install 'expand-region)
    155       ;; (package-install 'flymake-php)
    156       (package-install 'flycheck)
    157       (package-install 'flycheck-phpstan)
    158       (package-install 'phpactor)
    159       ;;(package-install 'robe)
    160       (package-install 'geiser)
    161       (package-install 'geiser-guile)
    162       (package-install 'guix)
    163       ;; (package-install 'git-gutter)
    164       ;; (package-install 'gnuplot)
    165       ;;(package-install 'swiper)
    166       ;;(package-install 'sqlite3)
    167       (package-install 'org-roam)
    168       ;; (package-install 'org-roam-ui)
    169       ;; (package-install 'org-download)
    170       ;; (package-install 'org-babel-eval-in-repl)
    171       ;;(package-install 'ob-php)
    172       ;; (package-install 'on-screen)
    173       ;;(package-install 'nix-mode)
    174       (package-install 'pdf-tools)
    175       ;;(package-install 'phpactor)
    176       ;; (package-install 'company-quickhelp)
    177       ;;(package-install 'ac-php)
    178       (package-install 'php-mode)
    179       (package-install 'php-quickhelp)
    180       (package-install 'phan)
    181       ;;(package-install 'php-cs-fixer)
    182       ;; (package-install 'company-php)
    183       ;;(package-install 'php-eldoc)
    184       ;;(package-install 'phps-mode)
    185       (package-install 'realgud)
    186       ;; (package-install 'realgud-xdebug)
    187       ;; (package-install 'kiwix)
    188       ;;(package-install 'sml-mode)
    189       (package-install 'sly)
    190       (package-install 'simple-httpd)
    191       (package-install 'sudo-edit)
    192       ;;(package-install 'treemacs)
    193       (package-install 'undo-tree)
    194       ;; (package-install 'yasnippet)
    195       ;; (package-install 'yasnippet-snippets)
    196       ;; (package-install 'vimrc-mode)
    197       ;; (package-install 'flymake-phpcs)
    198       ;; (package-install 'flymake-phpstan)
    199       ;; (package-install 'no-littering)
    200       (package-install 'web-mode)
    201       ;; (package-install 'which-key)
    202       ;; (package-install 'reverse-im)
    203       (package-install 'imenu-list)
    204       ;; (package-install 'isearch-mb)
    205       (package-install 'visual-fill-column)
    206       ;; (package-install 'browse-kill-ring)
    207       (package-install 'corfu)
    208       ;; (package-install 'inf-ruby)
    209       (package-install 'yaml-mode)
    210       ;; (package-install 'geben)
    211       (package-install 'link-hint)
    212       (package-install 'whole-line-or-region)
    213       (package-install 'quickrun)
    214       ;; (package-install 'psysh)
    215       ;; (package-install 'restclient)
    216       )
    217 #+end_src
    218 
    219 *** Ручная компиляция
    220 #+begin_src elisp :tangle nil :results nil
    221   ;; (native-compile-async "~/.emacs.d/elpa/" 'recursively)
    222   (native-compile-async "~/.guix-profile/share/emacs/site-lisp" 'recursively)
    223 
    224   ;; block until native compilation has finished
    225     (while (or comp-files-queue
    226                (> (comp-async-runnings) 0))
    227 #+end_src
    228 
    229 ** Отключаем ненужные загрузки
    230 #+begin_src emacs-lisp :tangle nil
    231   ;; Disable guix autoloading and x resources loading
    232   (setq site-run-file nil)
    23336#+end_src
    23437
     
    24245
    24346
    244 ** Редакируем GUI
    245 Удаляем ненужные бары, меняем шрифт и модлайн. Использую дефолтный для
    246 шрифт DeJavu или недефолтный Agave, так как он является одним из самых интернациональных
    247 шрифтов по количеству доступных символов после Unifont. Unifont я не
    248 стал использовать, потому что иксы замыливают этот пиксельный шрифт, что
    249 делает его использование крайне неприятным.
    250 
    251 #+begin_src emacs-lisp :tangle nil
    252   ;; Change mode-line-modes to show only major mode
    253   (defvar mode-line-major-mode
    254     (let ((recursive-edit-help-echo "Recursive edit, type C-M-c to get out"))
    255       (list (propertize "%[" 'help-echo recursive-edit-help-echo)
    256             `(:propertize ("" mode-name)
    257                           help-echo "Major mode\n\
    258       mouse-1: Display major mode menu\n\
    259       mouse-2: Show help for major mode\n\
    260       mouse-3: Toggle minor modes"
    261                           mouse-face mode-line-highlight
    262                           local-map ,mode-line-major-mode-keymap)
    263             '("" mode-line-process)
    264             (propertize "%n" 'help-echo "mouse-2: Remove narrowing from buffer"
    265                         'mouse-face 'mode-line-highlight
    266                         'local-map (make-mode-line-mouse-map
    267                                     'mouse-2 #'mode-line-widen))
    268             (propertize "%]" 'help-echo recursive-edit-help-echo)
    269             " "))
    270     "Mode line construct for displaying major and minor modes.")
    271 
    272   (put 'mode-line-major-mode 'risky-local-variable t)
    273 
    274   ;; Change mode-line-format
    275   (setq-default mode-line-format
    276                 '("%e"
    277                   mode-line-front-space
    278                   mode-line-mule-info
    279 
    280                   mode-line-client
    281                   mode-line-modified
    282                   mode-line-remote
    283                   mode-line-frame-identification
    284                   ;; long-path
    285                   mode-line-buffer-identification
    286                   mode-line-misc-info
    287                   "   "
    288                   mode-line-major-mode
    289                   " "
    290                   vc-mode
    291                   "  "
    292 
    293                   mode-line-position
    294                   mode-line-end-spaces
    295                   ))
    296 #+end_src
    297 
    298 
    299 #+begin_src emacs-lisp :tangle nil
    300   ;; Do not resize the frame at this early stage.
    301   (setq frame-inhibit-implied-resize t)
    302   (setq use-dialog-box nil)
    303 
    304   ;;; Disable some gui
    305   (scroll-bar-mode -1)
    306   (tool-bar-mode -1)
    307   (menu-bar-mode -1)
    308   ;;(tooltip-mode -1)
    309 
    310   ;;; Changing emacs default setting through customize
    311   (custom-set-variables
    312    '(fill-column 72)
    313    '(git-gutter:added-sign " ")
    314    '(git-gutter:deleted-sign " ")
    315    '(git-gutter:modified-sign " ")
    316    '(git-gutter:unchanged-sign " ")
    317    '(lsp-headerline-breadcrumb-enable nil)
    318    '(scroll-bar-mode 'nil)
    319    '(scroll-bar-adjust-thumb-portion nil)
    320    '(tool-bar-position 'bottom)
    321    '(tool-bar-style 'both-horiz))
    322 
    323   (custom-set-faces
    324    '(default ((t (:height 140 :family "Jetbrains Mono" :embolden t))))
    325    '(region ((t (:background "gray85"))))
    326    '(mode-line ((t (:background "grey70" :foreground "grey10"))))
    327    '(mode-line-inactive ((t (:inherit mode-line :background "grey90" :foreground "grey20" :box (:line-width (-2 . -2) :color "grey85") :weight light))))
    328    '(mode-line-buffer-id ((t (:weight bold))))
    329    '(mode-line-emphasis ((t (:weight bold))))
    330    '(lsp-modeline-code-actions-face ((t :inherit mode-line :height 100)))
    331    '(tool-bar ((t (:background "grey80" :foreground "grey10"))))
    332    '(fill-column-indicator ((t (:foreground "grey95"))))
    333    '(hl-line ((t (:background "gray95"))))
    334    '(fringe ((t (:background "grey87"))))
    335    '(header-line ((t (:inherit mode-line :background "grey90"))))
    336    '(vertical-border ((t (:foreground "grey90"))))
    337    '(window-divider ((t (:foreground "gray90")))))
    338 
    339   (set-fringe-style (cons 7 7))
    340 
    341   (defun switch-gui ()
    342     "Disable/enable menu-bar and tool-bar."
    343     (interactive)
    344     (if menu-bar-mode
    345         (progn
    346           (menu-bar-mode -1)
    347           (tool-bar-mode -1)
    348           (scroll-bar-mode -1))
    349       (progn
    350         (menu-bar-mode 1)
    351         (tool-bar-mode 1)
    352         (scroll-bar-mode 1))))
    353 
    354   (defun switch-scroll-bar ()
    355     "Disable/enable scroll-bar."
    356     (interactive)
    357     (if scroll-bar-mode
    358         (scroll-bar-mode -1)
    359       (scroll-bar-mode)))
    360 
    361   (define-key global-map (kbd "<f5>") 'switch-gui)
    362   (define-key global-map (kbd "<f8>") 'switch-scroll-bar)
    363 
    364   (provide 'early-init)
    365       ;;; early-init.el ends here
    366 #+end_src
    367 
    368 ** Инициализируем остальной конфиг
    369 Следующие блоки кода выводят в файл init.el.
     47** Init.el
    37048#+begin_src emacs-lisp :tangle init.el
    37149  ;; -*- lexical-binding: t -*-
     
    37452  ;; (setq debug-on-error nil)
    37553  ;; (setq debug-on-quit nil)
    376 
    377   (require 'package)
    378   (package-initialize)
    379 
    380   (defun package-loaded? (string)
    381     (if (or (cl-member string package-activated-list :test #'string=)
    382             (ignore-errors (load (concat string "-autoloads"))))
    383         t
    384         (progn
    385           (message (concat "Package " string " is not loaded"))
    386           nil)))
    38754
    38855  ;; Timer
     
    40572
    40673* Meta
    407 ** Обо мне
     74** About me
    40875#+BEGIN_SRC emacs-lisp :tangle init.el
    40976  ;; Information about me
     
    41279#+END_SRC
    41380
    414 ** Конфигурация
    415 Базовые функции для манипулирования конфигом в дальнейшем, чтобы не
    416 приходилось танглить вручную.
     81** Configuration
    41782#+BEGIN_SRC emacs-lisp :tangle init.el
    41883  (setq config-dotfiles-path "/home/w96k/projects/dotfiles/emacs/.emacs.d/"
     
    43196    ;; (rename-file (concat config-dotfiles-path "early-init.el") config-path t)
    43297    (rename-file (concat config-dotfiles-path "init.el") config-path t))
    433 
    434   (defun config-load ()
    435     (interactive)
    436     (org-babel-load-file (concat config-dotfiles-path config-name) t))
    437 
    438 #+END_SRC
    439 
    440 * Внешний вид
    441 
    442 ** Отображение номера строк и пробелов
     98#+END_SRC
     99
     100* Appereance
     101
     102** Line numbers
    443103Изначально они отключены, но можно вызвать по клавише F7.
    444104#+BEGIN_SRC emacs-lisp :tangle init.el
     
    450110#+END_SRC
    451111
    452 * Редактирование
    453 ** Файловый менеджер
     112* Editing
     113** Dired
    454114#+BEGIN_SRC emacs-lisp :tangle init.el
    455115  ;; Show files in KiB
     
    461121#+END_SRC
    462122
    463 ** Линтер
    464 Использую встроенный Flymake и Flycheck
     123** Linter
     124I use Flymake and Flycheck
    465125*** Flymake
    466126#+BEGIN_SRC emacs-lisp :tangle nil
    467   ;;(add-hook 'prog-mode-hook 'flymake-mode)
     127  (add-hook 'prog-mode-hook 'flymake-mode)
    468128
    469129  (require 'psalm)
     
    508168#+END_SRC
    509169
    510 ** Дерево проекта
    511 Возможно в дальнейшем откажусь от этого пакета, так как по факту им
    512 пользуюсь нечасто. Он предоставляет дерево проектов, как в IDE.
    513 #+BEGIN_SRC emacs-lisp :tangle nil
    514   (when (package-loaded? "treemacs")
    515     (progn
    516       (setq treemacs-width       50
    517             treemacs-show-cursor t
    518             treemacs-position    'right
    519             treemacs-indentation 1
    520             treemacs-tag-follow-mode t
    521             treemacs-fringe-indicator-mode nil)
    522 
    523       (define-key global-map
    524         (kbd "C-x C-d") 'treemacs)))
    525 #+END_SRC
    526 
    527 ** Дерево imenu
    528 #+begin_src emacs-lisp :tangle init.el
    529     ;; (when (package-loaded? "imenu-list")
    530       (setq imenu-list-focus-after-activation nil
    531             imenu-list-auto-resize nil
    532             imenu-list-mode-line-format '()
    533             imenu-list-size 0.4)
    534       (global-set-key (kbd "C-x C-d") #'imenu-list-smart-toggle)
    535   ;; )
    536 #+end_src
    537 
    538 ** Better Isearch
    539 #+begin_src emacs-lisp :tangle nil
    540   (when (package-loaded? "isearch-mb")
    541     (progn
    542       (isearch-mb-mode t)
    543       (global-set-key (kbd "C-s") 'isearch-forward-regexp)
    544       (global-set-key (kbd "C-r") 'isearch-backward-regexp)))
    545 #+end_src
    546 
    547 ** Система контроля версий
     170** Imenu List
     171#+begin_src emacs-lisp :tangle init.el
     172 
     173  (setq imenu-list-focus-after-activation nil
     174        imenu-list-auto-resize nil
     175        imenu-list-mode-line-format '()
     176        imenu-list-size 0.4)
     177  (global-set-key (kbd "C-x C-d") #'imenu-list-smart-toggle)
     178#+end_src
     179
     180** Version Control System
    548181Модуль VC + Magit.
    549182
     
    566199
    567200    ;; Use magit only when built-in VC fails
    568     (when (package-loaded? "magit")
    569       (progn
    570         (setq magit-refresh-status-buffer nil)
    571         (global-set-key (kbd "C-x g") 'magit-status)))
    572 
    573   (package-loaded? "git-timemachine")
    574 #+END_SRC
    575 
    576 ** Прыжки
    577 #+BEGIN_SRC emacs-lisp :tangle init.el
    578   (when (package-loaded? "avy")
    579     (progn
    580       (define-key global-map (kbd "M-s M-s") 'avy-goto-char)
    581       (define-key global-map (kbd "M-s s") 'avy-goto-char)
    582       (define-key global-map (kbd "M-s g") 'avy-goto-line)
    583       (define-key global-map (kbd "M-s l") 'avy-goto-char-in-line)
    584       (define-key global-map (kbd "M-s M-l") 'avy-goto-char-in-line)
    585 
    586       ;; Rewrite default bind to avy
    587       (define-key global-map (kbd "M-g g") 'avy-goto-line)
    588       (define-key global-map (kbd "M-g M-g") 'avy-goto-line)))
    589 
    590   (when (package-loaded? "link-hint")
    591     (progn
    592       (define-key global-map (kbd "M-s j") 'link-hint-open-link)))
    593 
    594   ;; Прыжок на последнее изменение
    595   (when (package-loaded? "goto-chg")
    596     (progn
    597       (setq glc-default-span 2)
    598       (define-key global-map (kbd "C-z") 'goto-last-change)
    599       (define-key global-map (kbd "M-z") 'goto-last-change-reverse)))
    600 
    601   ;; Dumb Jump
    602   (when (package-loaded? "dumb-jump")
    603     (progn
    604       (define-key global-map (kbd "C-.") 'dumb-jump-go)))
     201
     202  (use-package magit
     203    :defer t
     204    :bind (("C-x g" . magit-status)))
     205
     206  (use-package git-timemachine :defer t)
     207#+END_SRC
     208
     209** Jumps
     210#+BEGIN_SRC emacs-lisp :tangle init.el
     211  ;; Jumps by highlighting symbols on screen
     212  (use-package avy
     213    :defer t
     214    :bind (("M-s M-s"   . avy-goto-char)
     215           ("M-s s"     . avy-goto-char)
     216           ("M-s g"     . avy-goto-line)
     217           ("M-s l"     . avy-goto-char-in-line)
     218           ("M-s M-l"   . avy-goto-char-in-line)
     219
     220           ("M-g g"     . avy-goto-line)
     221           ("M-s M-g"   . avy-goto-line)))
     222
     223  (use-package link-hint
     224    :defer t
     225    :bind (("M-s j" . link-hint-open-link)))
     226
     227  ;; Jumps to last change
     228  (use-package goto-chg
     229    :defer t
     230    :bind (("C-z" . goto-last-change)
     231           ("M-z" . goto-last-change-reverse)))
     232
     233  ;; Jumps using grep and similar tools
     234  (use-package dumb-jump
     235    :defer t
     236    :bind (("C-." . dumb-jump-go)))
    605237
    606238#+END_SRC
     
    611243** Ограничение ширины строки
    612244#+BEGIN_SRC emacs-lisp :tangle init.el
    613   (when (package-loaded? "visual-fill-column")
    614     (progn
    615       ;;; Column width limit highlighter
    616       (add-hook 'prog-mode-hook 'display-fill-column-indicator-mode)
    617 
    618       ;;; Set column width to 79 according to pep8 for python
    619       (add-hook 'python-mode-hook
    620                 (lambda () (set-fill-column 79)))))
    621 #+END_SRC
    622 
    623 ** Подсвечивание парных скобок
     245  (add-hook 'prog-mode-hook 'display-fill-column-indicator-mode)
     246
     247  ;;; Set column width to 79 according to pep8 for python
     248  (add-hook 'python-mode-hook
     249            (lambda () (set-fill-column 79)))
     250#+END_SRC
     251
    624252** Ввод парных скобок и кавычек (electric)
    625253#+BEGIN_SRC emacs-lisp :tangle init.el
     
    627255  (electric-pair-mode)
    628256  (add-hook 'prog-mode-hook 'electric-pair-mode)
    629   ;; (add-hook 'prog-mode-hook 'rainbow-identifiers-mode)
     257  (add-hook 'prog-mode-hook 'electric-indent-mode)
    630258#+END_SRC
    631259
    632260** Kill-ring
    633 #+BEGIN_SRC emacs-lisp :tangle nil
    634   (when (package-loaded? "browse-kill-ring") 
    635     (define-key global-map (kbd "C-M-y") 'browse-kill-ring))
     261#+BEGIN_SRC emacs-lisp :tangle init.el
     262  (use-package browse-kill-ring
     263    :defer t
     264    :bind ("C-M-y" . browse-kill-ring))
    636265#+END_SRC
    637266
     
    656285#+END_SRC
    657286
    658 ** Дополнение
    659287** Дебаггер
    660288#+begin_src emacs-lisp :tangle nil
     
    703331
    704332#+end_src
    705 *** Модификация дефолта
    706 #+BEGIN_SRC emacs-lisp :tangle nil
    707   (setq completion-styles '(basic partial-completion substring flex emacs22)
    708         completion-ignore-case t
    709         read-buffer-completion-ignore-case t
    710         read-file-name-completion-ignore-case t)
    711 #+END_SRC
    712333*** Агрессивный дефолтный комплит
    713334#+BEGIN_SRC emacs-lisp :tangle nil
     
    732353При помощи пакета undo-tree   
    733354#+begin_src emacs-lisp :tangle init.el
    734   (when (package-loaded? "undo-tree")
    735     (progn
    736       (add-hook 'prog-mode-hook #'undo-tree-mode)
    737       (add-hook 'org-mode-hook #'undo-tree-mode)
    738       (setq undo-tree-auto-save-history nil)))
     355  (use-package undo-tree
     356    :defer t
     357    :hook
     358    (prog-mode . undo-tree-mode)
     359    (org-mode . undo-tree-mode))
    739360#+end_src
    740361
     
    794415** Выделение
    795416#+BEGIN_SRC emacs-lisp :tangle init.el
    796   (when (package-loaded? "expand-region")
    797     (global-set-key (kbd "C-=") 'er/expand-region))
     417  (use-package expand-region
     418    :defer t
     419    :bind (("C-=" . er/expand-region)))
    798420#+END_SRC
    799421
    800422** Сессия
    801 #+BEGIN_SRC emacs-lisp :tangle nil
     423#+BEGIN_SRC emacs-lisp :tangle init.el
    802424  (desktop-save-mode 1)
    803425#+END_SRC
     
    815437
    816438*** Подсчёт кандидатов
    817 #+BEGIN_SRC emacs-lisp :tangle nil
    818 (global-anzu-mode t)
     439#+BEGIN_SRC emacs-lisp :tangle init.el
     440  (use-package anzu
     441    :config
     442    (global-anzu-mode t))
    819443#+END_SRC
    820444*** Swiper (не используется)
     
    827451        swiper-stay-on-quit t)
    828452#+END_SRC
     453** Which function
     454#+begin_src emacs-lisp :tangle init.el
     455  (which-function-mode t)
     456#+end_src
     457
    829458** Подсказка биндов
    830459Пакет Which-key
     
    844473** Права суперпользователя
    845474Sudo-edit
    846 #+begin_src emacs-lisp
    847   (package-loaded? "sudo-edit")
     475#+begin_src emacs-lisp :tangle init.el
     476  (use-package sudo-edit
     477    :defer t)
    848478#+end_src
    849479
     
    851481Показывает собранное состояние будь то собранный куски на ассемблере
    852482или байт-код при помощи пакета RMSbolt.
    853 #+begin_src emacs-lisp :tangle nil
    854   (add-hook 'prog-mode-hook 'rmsbolt-mode)
     483#+begin_src emacs-lisp :tangle init.el
     484  (use-package rmsbolt
     485    :defer t
     486    :hook (prog-mode . rmsbolt-mode))
    855487#+end_src
    856488
     
    872504          (cmucl ("cmucl" "-quiet"))
    873505          (sbcl ("/opt/sbcl/bin/sbcl") :coding-system utf-8-unix)))
    874 #+END_SRC
    875 
    876 ** Erlang
    877 #+BEGIN_SRC emacs-lisp :tangle nil
    878   (load "erlang-autoloads")
    879506#+END_SRC
    880507
     
    1107734*** Web-mode
    1108735#+BEGIN_SRC emacs-lisp :tangle init.el
    1109   (when (package-loaded? "web-mode")
    1110     (progn
    1111 
    1112       (add-to-list 'auto-mode-alist '("\\.html?\\'" . web-mode))
    1113       (add-to-list 'auto-mode-alist '("\\.twig.html\\'" . web-mode))
    1114 
    1115       (setq web-mode-markup-indent-offset 2)
    1116       (setq web-mode-enable-auto-pairing t)
    1117       (setq web-mode-enable-css-colorization t)
    1118       (setq web-mode-enable-block-face t)
    1119       (setq web-mode-enable-current-element-highlight t)))
     736  (use-package web-mode
     737    :defer t
     738    :config
     739    (add-to-list 'auto-mode-alist '("\\.html?\\'" . web-mode))
     740    (add-to-list 'auto-mode-alist '("\\.twig.html\\'" . web-mode))
     741    (setq web-mode-markup-indent-offset 2)
     742    (setq web-mode-enable-auto-pairing t)
     743    (setq web-mode-enable-css-colorization t)
     744    (setq web-mode-enable-block-face t)
     745    (setq web-mode-enable-current-element-highlight t))
    1120746#+END_SRC
    1121747
     
    1123749*** Org-mode
    1124750#+BEGIN_SRC emacs-lisp :tangle init.el
    1125   (org-babel-do-load-languages
    1126    'org-babel-load-languages
    1127    '((R . t)
    1128      (ditaa . t)
    1129      (dot . t)
    1130      ;; (php . t)
    1131      (emacs-lisp . t)
    1132      (gnuplot . t)
    1133      (haskell . nil)
    1134      (latex . t)
    1135      ;;(ledger . t)
    1136      (ocaml . nil)
    1137      (octave . t)
    1138      (python . t)
    1139      (ruby . t)
    1140      (screen . nil)
    1141      (shell . t)
    1142      (sql . t)
    1143      (js . t)))
    1144 
    1145   (defun org-babel-edit-prep:sql (babel-info)
    1146     (setq-local buffer-file-name (->> babel-info caddr (alist-get :tangle)))
    1147     (setq-local lsp-buffer-uri (->> babel-info caddr (alist-get :tangle) lsp--path-to-uri))
    1148     (setq-local lsp-headerline-breadcrumb-enable nil)
    1149     (lsp))
    1150 
    1151   (global-set-key (kbd "C-c l") 'org-store-link)
    1152   (global-set-key (kbd "C-c a") 'org-agenda)
    1153   (global-set-key (kbd "C-c c") 'org-capture)
    1154   ;; (global-set-key (kbd "M-f") 'org-metaright)
    1155   ;; (global-set-key (kbd "M-b") 'org-metaleft)
    1156   ;; (global-set-key (kbd "M-p") 'org-metaup)
    1157   ;; (global-set-key (kbd "M-n") 'org-metadown)
    1158 
    1159   (setq org-default-notes-file "~/Documents/todo.org"
     751  (use-package org
     752    :defer t
     753    :config
     754    (org-babel-do-load-languages
     755     'org-babel-load-languages
     756     '((R . t)
     757       (ditaa . t)
     758       (dot . t)
     759       ;; (php . t)
     760       (emacs-lisp . t)
     761       (gnuplot . t)
     762       (haskell . nil)
     763       (latex . t)
     764       ;;(ledger . t)
     765       (ocaml . nil)
     766       (octave . t)
     767       (python . t)
     768       (ruby . t)
     769       (screen . nil)
     770       (shell . t)
     771       (sql . t)
     772       (js . t)))
     773    (setq org-default-notes-file "~/Documents/todo.org"
    1160774        system-time-locale "C"
    1161775        org-use-speed-commands t
     
    1171785        org-id-track-globally t
    1172786        org-confirm-babel-evaluate nil)
    1173 
    1174   (setq org-todo-keywords
     787    (setq org-todo-keywords
    1175788        (quote ((sequence "TODO(t)"
    1176789                          "MIGRATE(m)"
     
    1184797                          "NEED CLARIFICATION(t)"
    1185798                          ))))
    1186   (setq org-todo-keyword-faces
     799    (setq org-todo-keyword-faces
    1187800        (quote (("TODO" :foreground "red" :weight bold)
    1188801                ("NEXT" :foreground "blue" :weight bold)
     
    1193806                ("MEETING" :foreground "forest cyan" :weight bold)
    1194807                ("PHONE" :foreground "blue" :weight bold))))
    1195 #+END_SRC
    1196 
    1197 *** Org-ref (не используется)
    1198  
     808    :bind
     809    ("C-c l" . org-store-link)
     810    ("C-c a" . org-agenda)
     811    ("C-c c" . org-capture)
     812    )
     813
     814  (defun org-babel-edit-prep:sql (babel-info)
     815    (setq-local buffer-file-name (->> babel-info caddr (alist-get :tangle)))
     816    (setq-local lsp-buffer-uri (->> babel-info caddr (alist-get :tangle) lsp--path-to-uri))
     817    (setq-local lsp-headerline-breadcrumb-enable nil)
     818    (lsp))
     819
     820  ;; (global-set-key (kbd "M-f") 'org-metaright)
     821  ;; (global-set-key (kbd "M-b") 'org-metaleft)
     822  ;; (global-set-key (kbd "M-p") 'org-metaup)
     823  ;; (global-set-key (kbd "M-n") 'org-metadown)
     824#+END_SRC
     825
     826
     827*** Org-ref
    1199828#+begin_src emacs-lisp :tangle nil
    1200829  (load "org-ref-autoloads")
     
    1210839*** Org-roam
    1211840#+begin_src emacs-lisp :tangle init.el
    1212   (when (package-loaded? "org-roam")
    1213     (progn
    1214       (setq org-roam-directory (file-truename "~/Zettelkasten")
    1215             org-roam-v2-ack t
    1216             org-roam-completion-everywhere t
    1217             org-roam-index-file (concat org-roam-directory "/20210409054712-жизнь.org")
    1218             org-roam-dailies-directory (concat org-roam-directory "journals/"))
    1219 
    1220       (org-roam-db-autosync-mode t)
    1221 
    1222       (defun org-roam-jump-to-index ()
    1223         "Stub of recreating the function from V1"
    1224         (interactive)
    1225         (let
    1226             ((org-roam-index org-roam-index-file))
    1227           (find-file org-roam-index)))
    1228 
    1229       (define-key global-map
    1230                   (kbd "C-c n l") 'org-roam-node-insert)
    1231       (define-key global-map
    1232                   (kbd "C-c n f") 'org-roam-node-find)
    1233       (define-key global-map
    1234                   (kbd "C-c n b") 'org-roam-buffer-toggle)
    1235       (define-key global-map
    1236                   (kbd "C-c n t t") 'org-roam-tag-add)
    1237       (define-key global-map
    1238                   (kbd "C-c n t r") 'org-roam-tag-remove)
    1239       (define-key global-map
    1240                   (kbd "C-c n i") 'org-roam-jump-to-index)
    1241       (define-key global-map
    1242                   (kbd "C-c n g") 'org-roam-graph)
    1243       (define-key global-map
    1244                   (kbd "C-c n d") 'org-roam-db-build-cache)
    1245       (define-key global-map
    1246                   (kbd "C-c n r") 'org-roam-node-random)
    1247       (define-key global-map 
    1248                   (kbd "C-c n j") 'org-roam-dailies-find-date)))
    1249 
    1250   (customize-set-variable 'org-link-descriptive t)
    1251 #+end_src
    1252 
    1253 *** Агенда и Capture
    1254 #+begin_src emacs-lisp :tangle init.el
    1255   (add-to-list 'org-agenda-files
    1256                "~/Documents/todo.org")
    1257 
    1258   (setq org-directory "~/Documents"
    1259         org-default-notes-file (concat org-directory "/todo.org"))
     841  (use-package org-roam
     842    :defer t
     843    :bind
     844    ("C-c n l" . org-roam-node-insert)
     845    ("C-c n b" . org-roam-buffer-toggle)
     846    ("C-c n f" . org-roam-node-find)
     847    ("C-c n t t" . org-roam-tag-add)
     848    ("C-c n t r" . org-roam-tag-remove)
     849    ("C-c n i" . org-roam-jump-to-index)
     850    ("C-c n g" . org-roam-graph)
     851    ("C-c n d" . org-roam-db-build-cache)
     852    ("C-c n r" . org-roam-node-random)
     853    ("C-c n j" . org-roam-dailies-find-date)
     854    :config
     855    (setq org-roam-directory (file-truename "~/Zettelkasten")
     856        org-roam-v2-ack t
     857        org-roam-completion-everywhere t
     858        org-roam-index-file (concat org-roam-directory "/20210409054712-жизнь.org")
     859        org-roam-dailies-directory (concat org-roam-directory "journals/"))
     860
     861    (org-roam-db-autosync-mode t))
     862
     863  (defun org-roam-jump-to-index ()
     864    "Stub of recreating the function from V1"
     865    (interactive)
     866    (let
     867        ((org-roam-index org-roam-index-file))
     868      (find-file org-roam-index)))
     869
     870  (use-package org
     871    :defer t
     872    :config
     873    (customize-set-variable 'org-link-descriptive t)
     874
     875    (add-to-list 'org-agenda-files
     876               "~/Documents/todo.org")
     877
     878    (setq org-directory "~/Documents"
     879        org-default-notes-file (concat org-directory "/todo.org")))
    1260880#+end_src
    1261881
    1262882** YAML
    1263 #+begin_src emacs-lisp
    1264   (package-loaded? "yaml-mode")
     883#+begin_src emacs-lisp :tangle init.el
     884  (use-package yaml-mode
     885    :defer t)
    1265886#+end_src
    1266887
     
    1273894** Telega
    1274895#+BEGIN_SRC emacs-lisp :tangle init.el
    1275   (when (package-loaded? "telega")
    1276     (setq telega-filter-custom-show-folders t
    1277           telega-chat-fill-column 40
    1278           telega-root-fill-column 60
    1279           telega-url-shorten-use-images t)
    1280 
    1281     (define-key global-map (kbd "C-c t") telega-prefix-map))
     896  (use-package telega
     897    :bind (("C-c t" . telega-prefix-map)))
    1282898#+END_SRC
    1283899
    1284900** Mastodon
    1285 #+begin_src emacs-lisp :tangle nil
    1286   (when (package-loaded? "mastodon")
     901#+begin_src emacs-lisp :tangle init.el
     902  (use-package mastodon
     903    :defer t
     904    :config
    1287905    (setq mastodon-active-user "w96k"
    1288906          mastodon-instance-url "https://fosstodon.org/"))
    1289907#+end_src
    1290908
    1291 ** LLM
    1292 #+begin_src emacs-lisp
    1293 
    1294 #+end_src
    1295 
    1296 
    1297 * Наука
    1298909* Разное
    1299 
     910** *Highlight
     911#+BEGIN_SRC emacs-lisp :tangle init.el
     912  (use-package highlight
     913    :defer t)
     914#+end_src
    1300915** Минорные твики дефолтного имакса
    1301916*** Короткие ответы на вопросы
     
    1310925*** Подсвечивать текущую строку
    1311926#+begin_src emacs-lisp :tangle nil
    1312   (global-hl-line-mode 1)
    1313 #+end_src
    1314 
    1315 *** Открывать список буферов в отдельном фрейме
    1316 #+begin_src emacs-lisp :tangle nil
    1317   (add-to-list 'special-display-buffer-names "*Buffer List*")
    1318   (setq Buffer-menu-files-only t)
     927  (global-hl-line-mode t)
    1319928#+end_src
    1320929
    1321930*** Автодополнение в echo при M-x и других командах
    1322931#+begin_src emacs-lisp :tangle init.el
    1323   (icomplete-mode 1)
     932  (icomplete-mode t)
    1324933#+end_src
    1325934*** Проверять орфографию
    1326935#+begin_src emacs-lisp :tangle init.el
    1327   (flyspell-mode 1)
     936  (flyspell-mode t)
    1328937#+end_src
    1329938
     
    1359968
    1360969  (setq default-directory "~/"
    1361         delete-seleciton-mode t
    1362         inhibit-startup-message t
    1363         initial-scratch-message nil
    1364970        custom-safe-themes t
    1365971        delete-old-versions t
    1366         confirm-kill-processes nil
    1367972        enable-local-variables t)
    1368973#+end_src
     
    14431048*** Kills
    14441049#+begin_src emacs-lisp :tangle init.el
    1445   (define-key global-map (kbd "C-k") 'kill-region)
    1446 
    1447   (when (package-loaded? "whole-line-or-region")
     1050  (use-package whole-line-or-region
     1051    :bind (("C-k" . kill-region)
     1052           ("C-w" . backward-kill-word))
     1053    :config
    14481054    (whole-line-or-region-global-mode))
    1449 
    1450   (define-key global-map (kbd "C-w") 'backward-kill-word)
    14511055#+end_src
    14521056
     
    14701074** Docker
    14711075#+begin_src emacs-lisp :tangle init.el
    1472   (package-loaded? "docker")
    1473   (package-loaded? "docker-compose-mode")
     1076  (use-package docker :defer t)
     1077  (use-package docker-compose-mode :defer t)
    14741078#+end_src
    14751079** Debian
     
    14831087** Guix
    14841088#+begin_src emacs-lisp :tangle init.el
    1485   (package-loaded? "geiser-guile")
    1486 
    1487   (package-loaded? "guix")
    1488 
    1489   (setq geiser-guile-binary "guile")
    1490 
    1491   (with-eval-after-load 'geiser-guile
    1492     (progn
    1493       (add-to-list 'geiser-guile-load-path "~/projects/guix/")))
    1494 
    1495   (let ((guix-copyright "~/projects/guix/etc/copyright.el"))
    1496     (if (file-exists-p guix-copyright)
    1497         (load-file "~/projects/guix/etc/copyright.el")))
    1498 
    1499   (setq copyright-names-regexp
    1500         (format "%s <%s>" user-full-name user-mail-address))
     1089  ;; (use-package geiser-guile :defer t)
     1090
     1091  (use-package guix
     1092    :defer t
     1093    :config
     1094    (setq geiser-guile-binary "guile")
     1095    (with-eval-after-load 'geiser-guile
     1096      (progn
     1097        (add-to-list 'geiser-guile-load-path "~/projects/guix/")))
     1098
     1099    (let ((guix-copyright "~/projects/guix/etc/copyright.el"))
     1100      (if (file-exists-p guix-copyright)
     1101        (load-file "~/projects/guix/etc/copyright.el")))
     1102
     1103    (setq copyright-names-regexp
     1104        (format "%s <%s>" user-full-name user-mail-address)))
    15011105#+end_src
    15021106
    15031107** Nix
    1504 #+begin_src emacs-lisp :tangle nil
    1505   (package-loaded? "nix")
     1108#+begin_src emacs-lisp :tangle init.el
     1109  (use-package nix)
    15061110#+end_src
    15071111
     
    15981202** Ignore case sensitive in completions, search and etc
    15991203#+begin_src emacs-lisp :tangle init.el
    1600   (setq completion-ignore-case t)
    1601 #+end_src
     1204  (setq completion-ignore-case t
     1205        read-buffer-completion-ignore-case t
     1206        read-file-name-completion-ignore-case t)
     1207#+end_src
     1208
     1209** Make scripts executable automatically
     1210#+begin_src emacs-lisp :tangle init.el
     1211  (add-hook 'after-save-hook
     1212            'executable-make-buffer-file-executable-if-script-p)
     1213#+end_src
     1214
     1215** F1 for M-x shell and F2 for grep
     1216#+begin_src emacs-lisp :tangle init.el
     1217  (global-set-key (kbd "<f1>") 'shell)
     1218  (global-set-key (kbd "<f2>") 'rgrep)
     1219#+end_src
     1220
     1221** Hippie expand
     1222#+begin_src emacs-lisp :tangle init.el
     1223  (global-set-key [remap dabbrev-expand] 'hippie-expand)
     1224#+end_src
     1225
Note: See TracChangeset for help on using the changeset viewer.