diff options
author | Mikhail Kirillov <w96k@runbox.com> | 2024-09-03 22:43:11 +0400 |
---|---|---|
committer | Mikhail Kirillov <w96k@runbox.com> | 2024-09-03 22:43:11 +0400 |
commit | fde9de8aaab787061625952015d69db18c82c878 (patch) | |
tree | 1ce4de9f7149e9b8f21c07d13080f21242e0b84c | |
parent | fe2941baeff0f28f4fd9a82ba516b94348361d9b (diff) |
Update configs
-rw-r--r-- | emacs/.emacs.d/.emacs-config.org | 874 | ||||
-rw-r--r-- | guix/.dotfiles/home-configuration.scm | 17 | ||||
-rw-r--r-- | guix/config-desktop.scm | 1 |
3 files changed, 265 insertions, 627 deletions
diff --git a/emacs/.emacs.d/.emacs-config.org b/emacs/.emacs.d/.emacs-config.org index 86bed3f..b6e007a 100644 --- a/emacs/.emacs.d/.emacs-config.org +++ b/emacs/.emacs.d/.emacs-config.org @@ -1,110 +1,28 @@ -#+TITLE: Конфигурация Emacs -#+AUTHOR: Кириллов <w96k.dev> Михаил +#+TITLE: Emacs configuration +#+AUTHOR: Kirillov <w96k.dev> Mikhail #+OPTIONS: toc:nil #+PROPERTY: header-args:elisp :results silent #+STARTUP: showeverything -* Вклады -Конфигурация составлена из моего кода, а также кода из конфигураций -других людей. Их настолько, что все перечислять я не смогу, но оставлю -интересные конфигурации других людей, в которые я время от времени -заглядываю. - -* Лицензия -Я выступаю против копирайта и интеллектуальной собственности в целом, -поэтому стараюсь копирайт избегать. По этой причине свой код -распространяю на правах общественного достояния вашей страны. Для этого -используется лицензия [[https://creativecommons.org/publicdomain/zero/1.0/][CC0]]. Если кратко, то можете использовать без -ограничений вплоть до полной приватизации всего контента. К сожалению за -чужие сниппеты не могу ручаться, они распространяются по своим лицензиям -и я их не указывал, впрочем всё равно никто это не проверяет и я бы не -стал напрягаться из-за авторских прав на конфигурацию текстового -редактора. - -* О конфигурации -Минимальная конфигурация Emacs. Пакеты ставлю через Guix или package.el -(elpa и melpa), для разделения ответственности использую грамотное -программирование при помощи org-mode. - -Версия Emacs 28+. -- В Guix пакет ~emacs-next~ -- В FreeBSD пакет ~emacs-devel~ -- В Ubuntu [[https://launchpad.net/~kelleyk/+archive/ubuntu/emacs][PPA emacs28]] и пакет ~emacs28-native~ - -Из программирования поддерживаются /C/, Java, /Python/, /Common Lisp / -Scheme/, Haskell, Idris, Ocaml, /Ruby/, PHP, /SML/, SQL, Erlang, -редактирование веб-шаблонов и различных форматов конфигураций. Какие-то -языки в лучшей мере настроены, какие-то хуже, но есть почти все -плюс-минус популярные. - -Для систем контроля версий использую встроенный /VC/ и в некоторых случаях -/Magit/. Для входа в виртуальные среды используется Direnv. - -Для ведения заметок использую методологию Zettelkasten при помощи -org-roam. Для доступа к оффлайн википедии и другим ресурсам Kiwix -клиент, который стучится на сервер, который стоит дома. - -Для коммуникаций клиент для Telegram /telega/, для IRC /erc/ и электронной -почты /gnus/, для Mastodon mastodon.el. - -Для системного администрирования имеют пакеты для работы с Debian, -NixOS, Guix. Также есть поддержка Docker, Docker-compose: можно -запускать/стопать контейнеры, а также залетать в них через TRAMP. - -Для установки необходимо установить пакеты Emacs из ~../../guix/user.scm~ -и выполнить tangle файла при помощи /M-x org-babel-tangle-file/. В -дальнейшем для развёртывания конфигурации можно использовать /M-x -config-tangle/ или /M-x config-load/. - -Данная конфигурация доступна также в сети интернет по адресу, но так как -сайт обновляется нечасто, то там может лежать старая версия: +* About this Emacs configuration + +Configuration uses org-mode to tangle its contents to init.el and then +be used by emacs. I use guix home for my emacs config on gnu guix +system. + +If you see :tangle nil it means that snippet is not used anymore, but +it is left because it might be valuable in a future for me. + +This configuration is available here: https://w96k.dev/emacs.html -Исходники конфигурации лежат на Sourcehut: +The git source code is hosted on Sourcehut: https://git.sr.ht/~w96k/dotfiles/tree/master/item/emacs -Распространяется на условиях свободной лицензии [[https://gnu.org/licenses/gpl-3.0.ru.html][GNU GPL v3]], -реиспользование одобряется пока распространяется под той же лицензией. - -* Пакеты -Данная конфигурация использует следующие пакеты: - -- Avy :: Прыжки по тексту -- Anaconda :: Поддержка Python -- Auctex :: Поддержка Tex и LaTeX -- Browse Kill Ring :: Обзор буфера обмена -- Haskell Mode :: Поддержка языка Haskell -- Idris Mode :: Поддержка языка Idris -- Magit :: Интерфейс к git -- Gitpatch :: Создание патчей -- Goto Cgh :: Переход к последнему изменению в буфере -- Debbuge :: Интерфейс debbugs (репорт багов Debian) -- Deft :: Полнотекстовый поиск -- Direnv :: Изменение окружения при "входе" в директорию -- Docker и Docker Compose :: Моды для поддержки контейнерных технологий -- Exec Path From Shell :: Синхронизация PATH переменной из шелла -- Expand Region :: Семантическое расширение выделения на курсоре -- Robe :: Прыжки по определениям Ruby -- Geiser :: Repl для языка Scheme -- Guix :: Интерфейс к Guix -- Org Roam :: Zettelkasten заметки в org-mode -- Gnuplot :: Программное рисование графиков -- Nix Mode :: Поддержка языка Nix -- Pdf Tools :: Рендер PDF файлов в Emacs -- PHP Mode :: Поддержка языка PHP -- Kiwix :: Чтение скачанных архивов веб-страниц -- SML Mode :: Поддержка языка Standard ML -- Sly/Slime :: REPL языка Common Lisp -- Simple HTTPD :: HTTP Сервер на elisp -- Telega :: Интерфейс к Telegram -- Treemacs :: Сайдбар для навигации по проекту -- Undo Tree :: Визуализация дерева отмен -- Yasnippet и Yasnippet Snippets :: Сниппеты для текстов и ЯПов -- Web Mode :: Поддержка шаблонов HTML и прочего - -Следующий блок нужен для тех, кто хочет использовать встроенный пакетный -менеджер. Я использую Guix для большей части взаимодействий со сторонним -кодом. +The license of emacs config and dotfiles is CC0 which is Public Domain. + +** Packets +Only needed when I need to install a package from Melpa and not GNU Guix #+begin_src elisp :tangle nil (require 'package) @@ -115,121 +33,6 @@ https://git.sr.ht/~w96k/dotfiles/tree/master/item/emacs (package-initialize)) (require 'gnutls) - - (progn - (package-refresh-contents) - (package-install 'avy) - (package-install 'php-mode) - (package-install 'phps-mode) - ;; (package-install 'anzu) - (package-install 'anaconda-mode) - (package-install 'auctex) - ;; (package-install 'rmsbolt) - ;; (package-install 'beginend) - ;; (package-install 'composer) - (package-install 'cinspect) - (package-install 'debian-el) - (package-install 'dpkg-dev-el) - (package-install 'edebug-inline-result) - ;;(package-install 'haskell-mode) - ;;(package-install 'idris-mode) - (package-install 'magit) - (package-install 'git-timemachine) - (package-install 'git-dwim) - (package-install 'gitpatch) - (package-install 'goto-chg) - (package-install 'debbugs) - ;;(package-install 'deft) - ;; (package-install 'direnv) - (package-install 'dumb-jump) - (package-install 'docker) - (package-install 'docker-cli) - (package-install 'docker-tramp) - (package-install 'docker-compose-mode) - (package-install 'org-sql) - ;;(package-install 'eglot) - ;; (package-install 'eglot-java) - ;; (package-install 'mastodon) - ;; (package-install 'exec-path-from-shell) - (package-install 'expand-region) - ;; (package-install 'flymake-php) - (package-install 'flycheck) - (package-install 'flycheck-phpstan) - (package-install 'phpactor) - ;;(package-install 'robe) - (package-install 'geiser) - (package-install 'geiser-guile) - (package-install 'guix) - ;; (package-install 'git-gutter) - ;; (package-install 'gnuplot) - ;;(package-install 'swiper) - ;;(package-install 'sqlite3) - (package-install 'org-roam) - ;; (package-install 'org-roam-ui) - ;; (package-install 'org-download) - ;; (package-install 'org-babel-eval-in-repl) - ;;(package-install 'ob-php) - ;; (package-install 'on-screen) - ;;(package-install 'nix-mode) - (package-install 'pdf-tools) - ;;(package-install 'phpactor) - ;; (package-install 'company-quickhelp) - ;;(package-install 'ac-php) - (package-install 'php-mode) - (package-install 'php-quickhelp) - (package-install 'phan) - ;;(package-install 'php-cs-fixer) - ;; (package-install 'company-php) - ;;(package-install 'php-eldoc) - ;;(package-install 'phps-mode) - (package-install 'realgud) - ;; (package-install 'realgud-xdebug) - ;; (package-install 'kiwix) - ;;(package-install 'sml-mode) - (package-install 'sly) - (package-install 'simple-httpd) - (package-install 'sudo-edit) - ;;(package-install 'treemacs) - (package-install 'undo-tree) - ;; (package-install 'yasnippet) - ;; (package-install 'yasnippet-snippets) - ;; (package-install 'vimrc-mode) - ;; (package-install 'flymake-phpcs) - ;; (package-install 'flymake-phpstan) - ;; (package-install 'no-littering) - (package-install 'web-mode) - ;; (package-install 'which-key) - ;; (package-install 'reverse-im) - (package-install 'imenu-list) - ;; (package-install 'isearch-mb) - (package-install 'visual-fill-column) - ;; (package-install 'browse-kill-ring) - (package-install 'corfu) - ;; (package-install 'inf-ruby) - (package-install 'yaml-mode) - ;; (package-install 'geben) - (package-install 'link-hint) - (package-install 'whole-line-or-region) - (package-install 'quickrun) - ;; (package-install 'psysh) - ;; (package-install 'restclient) - ) -#+end_src - -*** Ручная компиляция -#+begin_src elisp :tangle nil :results nil - ;; (native-compile-async "~/.emacs.d/elpa/" 'recursively) - (native-compile-async "~/.guix-profile/share/emacs/site-lisp" 'recursively) - - ;; block until native compilation has finished - (while (or comp-files-queue - (> (comp-async-runnings) 0)) -#+end_src - -** Отключаем ненужные загрузки -#+begin_src emacs-lisp :tangle nil - ;; Disable guix autoloading and x resources loading - (setq site-run-file nil) #+end_src ** EXWM @@ -241,132 +44,7 @@ https://git.sr.ht/~w96k/dotfiles/tree/master/item/emacs #+end_src -** Редакируем GUI -Удаляем ненужные бары, меняем шрифт и модлайн. Использую дефолтный для -шрифт DeJavu или недефолтный Agave, так как он является одним из самых интернациональных -шрифтов по количеству доступных символов после Unifont. Unifont я не -стал использовать, потому что иксы замыливают этот пиксельный шрифт, что -делает его использование крайне неприятным. - -#+begin_src emacs-lisp :tangle nil - ;; Change mode-line-modes to show only major mode - (defvar mode-line-major-mode - (let ((recursive-edit-help-echo "Recursive edit, type C-M-c to get out")) - (list (propertize "%[" 'help-echo recursive-edit-help-echo) - `(:propertize ("" mode-name) - help-echo "Major mode\n\ - mouse-1: Display major mode menu\n\ - mouse-2: Show help for major mode\n\ - mouse-3: Toggle minor modes" - mouse-face mode-line-highlight - local-map ,mode-line-major-mode-keymap) - '("" mode-line-process) - (propertize "%n" 'help-echo "mouse-2: Remove narrowing from buffer" - 'mouse-face 'mode-line-highlight - 'local-map (make-mode-line-mouse-map - 'mouse-2 #'mode-line-widen)) - (propertize "%]" 'help-echo recursive-edit-help-echo) - " ")) - "Mode line construct for displaying major and minor modes.") - - (put 'mode-line-major-mode 'risky-local-variable t) - - ;; Change mode-line-format - (setq-default mode-line-format - '("%e" - mode-line-front-space - mode-line-mule-info - - mode-line-client - mode-line-modified - mode-line-remote - mode-line-frame-identification - ;; long-path - mode-line-buffer-identification - mode-line-misc-info - " " - mode-line-major-mode - " " - vc-mode - " " - - mode-line-position - mode-line-end-spaces - )) -#+end_src - - -#+begin_src emacs-lisp :tangle nil - ;; Do not resize the frame at this early stage. - (setq frame-inhibit-implied-resize t) - (setq use-dialog-box nil) - - ;;; Disable some gui - (scroll-bar-mode -1) - (tool-bar-mode -1) - (menu-bar-mode -1) - ;;(tooltip-mode -1) - - ;;; Changing emacs default setting through customize - (custom-set-variables - '(fill-column 72) - '(git-gutter:added-sign " ") - '(git-gutter:deleted-sign " ") - '(git-gutter:modified-sign " ") - '(git-gutter:unchanged-sign " ") - '(lsp-headerline-breadcrumb-enable nil) - '(scroll-bar-mode 'nil) - '(scroll-bar-adjust-thumb-portion nil) - '(tool-bar-position 'bottom) - '(tool-bar-style 'both-horiz)) - - (custom-set-faces - '(default ((t (:height 140 :family "Jetbrains Mono" :embolden t)))) - '(region ((t (:background "gray85")))) - '(mode-line ((t (:background "grey70" :foreground "grey10")))) - '(mode-line-inactive ((t (:inherit mode-line :background "grey90" :foreground "grey20" :box (:line-width (-2 . -2) :color "grey85") :weight light)))) - '(mode-line-buffer-id ((t (:weight bold)))) - '(mode-line-emphasis ((t (:weight bold)))) - '(lsp-modeline-code-actions-face ((t :inherit mode-line :height 100))) - '(tool-bar ((t (:background "grey80" :foreground "grey10")))) - '(fill-column-indicator ((t (:foreground "grey95")))) - '(hl-line ((t (:background "gray95")))) - '(fringe ((t (:background "grey87")))) - '(header-line ((t (:inherit mode-line :background "grey90")))) - '(vertical-border ((t (:foreground "grey90")))) - '(window-divider ((t (:foreground "gray90"))))) - - (set-fringe-style (cons 7 7)) - - (defun switch-gui () - "Disable/enable menu-bar and tool-bar." - (interactive) - (if menu-bar-mode - (progn - (menu-bar-mode -1) - (tool-bar-mode -1) - (scroll-bar-mode -1)) - (progn - (menu-bar-mode 1) - (tool-bar-mode 1) - (scroll-bar-mode 1)))) - - (defun switch-scroll-bar () - "Disable/enable scroll-bar." - (interactive) - (if scroll-bar-mode - (scroll-bar-mode -1) - (scroll-bar-mode))) - - (define-key global-map (kbd "<f5>") 'switch-gui) - (define-key global-map (kbd "<f8>") 'switch-scroll-bar) - - (provide 'early-init) - ;;; early-init.el ends here -#+end_src - -** Инициализируем остальной конфиг -Следующие блоки кода выводят в файл init.el. +** Init.el #+begin_src emacs-lisp :tangle init.el ;; -*- lexical-binding: t -*- @@ -374,17 +52,6 @@ https://git.sr.ht/~w96k/dotfiles/tree/master/item/emacs ;; (setq debug-on-error nil) ;; (setq debug-on-quit nil) - (require 'package) - (package-initialize) - - (defun package-loaded? (string) - (if (or (cl-member string package-activated-list :test #'string=) - (ignore-errors (load (concat string "-autoloads")))) - t - (progn - (message (concat "Package " string " is not loaded")) - nil))) - ;; Timer (add-hook 'emacs-startup-hook (lambda () @@ -404,16 +71,14 @@ https://git.sr.ht/~w96k/dotfiles/tree/master/item/emacs #+end_src * Meta -** Обо мне +** About me #+BEGIN_SRC emacs-lisp :tangle init.el ;; Information about me (setq user-full-name "Mikhail Kirillov" user-mail-address "w96k@runbox.com") #+END_SRC -** Конфигурация -Базовые функции для манипулирования конфигом в дальнейшем, чтобы не -приходилось танглить вручную. +** Configuration #+BEGIN_SRC emacs-lisp :tangle init.el (setq config-dotfiles-path "/home/w96k/projects/dotfiles/emacs/.emacs.d/" config-path "~/.emacs.d/" @@ -430,16 +95,11 @@ https://git.sr.ht/~w96k/dotfiles/tree/master/item/emacs ;; so I need to move files .emacs.d manually ;; (rename-file (concat config-dotfiles-path "early-init.el") config-path t) (rename-file (concat config-dotfiles-path "init.el") config-path t)) - - (defun config-load () - (interactive) - (org-babel-load-file (concat config-dotfiles-path config-name) t)) - #+END_SRC -* Внешний вид +* Appereance -** Отображение номера строк и пробелов +** Line numbers Изначально они отключены, но можно вызвать по клавише F7. #+BEGIN_SRC emacs-lisp :tangle init.el (define-key global-map @@ -449,8 +109,8 @@ https://git.sr.ht/~w96k/dotfiles/tree/master/item/emacs (kbd "<f6>") 'whitespace-mode) #+END_SRC -* Редактирование -** Файловый менеджер +* Editing +** Dired #+BEGIN_SRC emacs-lisp :tangle init.el ;; Show files in KiB (setq dired-listing-switches "-hlap" @@ -460,11 +120,11 @@ https://git.sr.ht/~w96k/dotfiles/tree/master/item/emacs (global-auto-revert-mode 1) #+END_SRC -** Линтер -Использую встроенный Flymake и Flycheck +** Linter +I use Flymake and Flycheck *** Flymake #+BEGIN_SRC emacs-lisp :tangle nil - ;;(add-hook 'prog-mode-hook 'flymake-mode) + (add-hook 'prog-mode-hook 'flymake-mode) (require 'psalm) @@ -507,44 +167,17 @@ https://git.sr.ht/~w96k/dotfiles/tree/master/item/emacs (add-hook 'prog-mode-hook 'flycheck-mode)) #+END_SRC -** Дерево проекта -Возможно в дальнейшем откажусь от этого пакета, так как по факту им -пользуюсь нечасто. Он предоставляет дерево проектов, как в IDE. -#+BEGIN_SRC emacs-lisp :tangle nil - (when (package-loaded? "treemacs") - (progn - (setq treemacs-width 50 - treemacs-show-cursor t - treemacs-position 'right - treemacs-indentation 1 - treemacs-tag-follow-mode t - treemacs-fringe-indicator-mode nil) - - (define-key global-map - (kbd "C-x C-d") 'treemacs))) -#+END_SRC - -** Дерево imenu +** Imenu List #+begin_src emacs-lisp :tangle init.el - ;; (when (package-loaded? "imenu-list") - (setq imenu-list-focus-after-activation nil - imenu-list-auto-resize nil - imenu-list-mode-line-format '() - imenu-list-size 0.4) - (global-set-key (kbd "C-x C-d") #'imenu-list-smart-toggle) - ;; ) -#+end_src - -** Better Isearch -#+begin_src emacs-lisp :tangle nil - (when (package-loaded? "isearch-mb") - (progn - (isearch-mb-mode t) - (global-set-key (kbd "C-s") 'isearch-forward-regexp) - (global-set-key (kbd "C-r") 'isearch-backward-regexp))) + + (setq imenu-list-focus-after-activation nil + imenu-list-auto-resize nil + imenu-list-mode-line-format '() + imenu-list-size 0.4) + (global-set-key (kbd "C-x C-d") #'imenu-list-smart-toggle) #+end_src -** Система контроля версий +** Version Control System Модуль VC + Magit. | Operation | VC | Magit | @@ -565,43 +198,42 @@ https://www.manueluberti.eu//emacs/2021/11/27/vc/ (global-set-key "\C-xvB" 'git-branch-next-action) ;; Use magit only when built-in VC fails - (when (package-loaded? "magit") - (progn - (setq magit-refresh-status-buffer nil) - (global-set-key (kbd "C-x g") 'magit-status))) - (package-loaded? "git-timemachine") + (use-package magit + :defer t + :bind (("C-x g" . magit-status))) + + (use-package git-timemachine :defer t) #+END_SRC -** Прыжки +** Jumps #+BEGIN_SRC emacs-lisp :tangle init.el - (when (package-loaded? "avy") - (progn - (define-key global-map (kbd "M-s M-s") 'avy-goto-char) - (define-key global-map (kbd "M-s s") 'avy-goto-char) - (define-key global-map (kbd "M-s g") 'avy-goto-line) - (define-key global-map (kbd "M-s l") 'avy-goto-char-in-line) - (define-key global-map (kbd "M-s M-l") 'avy-goto-char-in-line) - - ;; Rewrite default bind to avy - (define-key global-map (kbd "M-g g") 'avy-goto-line) - (define-key global-map (kbd "M-g M-g") 'avy-goto-line))) - - (when (package-loaded? "link-hint") - (progn - (define-key global-map (kbd "M-s j") 'link-hint-open-link))) - - ;; Прыжок на последнее изменение - (when (package-loaded? "goto-chg") - (progn - (setq glc-default-span 2) - (define-key global-map (kbd "C-z") 'goto-last-change) - (define-key global-map (kbd "M-z") 'goto-last-change-reverse))) - - ;; Dumb Jump - (when (package-loaded? "dumb-jump") - (progn - (define-key global-map (kbd "C-.") 'dumb-jump-go))) + ;; Jumps by highlighting symbols on screen + (use-package avy + :defer t + :bind (("M-s M-s" . avy-goto-char) + ("M-s s" . avy-goto-char) + ("M-s g" . avy-goto-line) + ("M-s l" . avy-goto-char-in-line) + ("M-s M-l" . avy-goto-char-in-line) + + ("M-g g" . avy-goto-line) + ("M-s M-g" . avy-goto-line))) + + (use-package link-hint + :defer t + :bind (("M-s j" . link-hint-open-link))) + + ;; Jumps to last change + (use-package goto-chg + :defer t + :bind (("C-z" . goto-last-change) + ("M-z" . goto-last-change-reverse))) + + ;; Jumps using grep and similar tools + (use-package dumb-jump + :defer t + :bind (("C-." . dumb-jump-go))) #+END_SRC @@ -610,29 +242,26 @@ https://www.manueluberti.eu//emacs/2021/11/27/vc/ I use built-in project.el ** Ограничение ширины строки #+BEGIN_SRC emacs-lisp :tangle init.el - (when (package-loaded? "visual-fill-column") - (progn - ;;; Column width limit highlighter - (add-hook 'prog-mode-hook 'display-fill-column-indicator-mode) + (add-hook 'prog-mode-hook 'display-fill-column-indicator-mode) - ;;; Set column width to 79 according to pep8 for python - (add-hook 'python-mode-hook - (lambda () (set-fill-column 79))))) + ;;; Set column width to 79 according to pep8 for python + (add-hook 'python-mode-hook + (lambda () (set-fill-column 79))) #+END_SRC -** Подсвечивание парных скобок ** Ввод парных скобок и кавычек (electric) #+BEGIN_SRC emacs-lisp :tangle init.el ;;; Input of pair delimiters (electric-pair-mode) (add-hook 'prog-mode-hook 'electric-pair-mode) - ;; (add-hook 'prog-mode-hook 'rainbow-identifiers-mode) + (add-hook 'prog-mode-hook 'electric-indent-mode) #+END_SRC ** Kill-ring -#+BEGIN_SRC emacs-lisp :tangle nil - (when (package-loaded? "browse-kill-ring") - (define-key global-map (kbd "C-M-y") 'browse-kill-ring)) +#+BEGIN_SRC emacs-lisp :tangle init.el + (use-package browse-kill-ring + :defer t + :bind ("C-M-y" . browse-kill-ring)) #+END_SRC ** Tags @@ -655,7 +284,6 @@ I use built-in project.el (directory-file-name dir-name)))) #+END_SRC -** Дополнение ** Дебаггер #+begin_src emacs-lisp :tangle nil (when (package-loaded? "realgud") @@ -702,13 +330,6 @@ I use built-in project.el (add-hook 'eshell-mode-hook 'corfu-mode))) #+end_src -*** Модификация дефолта -#+BEGIN_SRC emacs-lisp :tangle nil - (setq completion-styles '(basic partial-completion substring flex emacs22) - completion-ignore-case t - read-buffer-completion-ignore-case t - read-file-name-completion-ignore-case t) -#+END_SRC *** Агрессивный дефолтный комплит #+BEGIN_SRC emacs-lisp :tangle nil (setq aggressive-completion-delay 0.5) @@ -731,11 +352,11 @@ I use built-in project.el ** Визуализирование откатов При помощи пакета undo-tree #+begin_src emacs-lisp :tangle init.el - (when (package-loaded? "undo-tree") - (progn - (add-hook 'prog-mode-hook #'undo-tree-mode) - (add-hook 'org-mode-hook #'undo-tree-mode) - (setq undo-tree-auto-save-history nil))) + (use-package undo-tree + :defer t + :hook + (prog-mode . undo-tree-mode) + (org-mode . undo-tree-mode)) #+end_src ** Сниппеты @@ -793,12 +414,13 @@ I use built-in project.el ** Выделение #+BEGIN_SRC emacs-lisp :tangle init.el - (when (package-loaded? "expand-region") - (global-set-key (kbd "C-=") 'er/expand-region)) + (use-package expand-region + :defer t + :bind (("C-=" . er/expand-region))) #+END_SRC ** Сессия -#+BEGIN_SRC emacs-lisp :tangle nil +#+BEGIN_SRC emacs-lisp :tangle init.el (desktop-save-mode 1) #+END_SRC ** Скроллинг @@ -814,8 +436,10 @@ I use built-in project.el #+end_src *** Подсчёт кандидатов -#+BEGIN_SRC emacs-lisp :tangle nil -(global-anzu-mode t) +#+BEGIN_SRC emacs-lisp :tangle init.el + (use-package anzu + :config + (global-anzu-mode t)) #+END_SRC *** Swiper (не используется) #+BEGIN_SRC emacs-lisp :result nil :tangle nil @@ -826,6 +450,11 @@ I use built-in project.el swiper-use-visual-line t swiper-stay-on-quit t) #+END_SRC +** Which function +#+begin_src emacs-lisp :tangle init.el + (which-function-mode t) +#+end_src + ** Подсказка биндов Пакет Which-key #+begin_src elisp :tangle nil @@ -843,15 +472,18 @@ I use built-in project.el ** Права суперпользователя Sudo-edit -#+begin_src emacs-lisp - (package-loaded? "sudo-edit") +#+begin_src emacs-lisp :tangle init.el + (use-package sudo-edit + :defer t) #+end_src ** Промежуточный код Показывает собранное состояние будь то собранный куски на ассемблере или байт-код при помощи пакета RMSbolt. -#+begin_src emacs-lisp :tangle nil - (add-hook 'prog-mode-hook 'rmsbolt-mode) +#+begin_src emacs-lisp :tangle init.el + (use-package rmsbolt + :defer t + :hook (prog-mode . rmsbolt-mode)) #+end_src ** Быстрый запуск программы @@ -873,11 +505,6 @@ Sudo-edit (sbcl ("/opt/sbcl/bin/sbcl") :coding-system utf-8-unix))) #+END_SRC -** Erlang -#+BEGIN_SRC emacs-lisp :tangle nil - (load "erlang-autoloads") -#+END_SRC - ** Ruby #+BEGIN_SRC emacs-lisp :tangle nil (when (package-loaded? "inf-ruby") @@ -1106,57 +733,44 @@ The main way to interact with SQL is using org-mode ** Веб шаблоны *** Web-mode #+BEGIN_SRC emacs-lisp :tangle init.el - (when (package-loaded? "web-mode") - (progn - - (add-to-list 'auto-mode-alist '("\\.html?\\'" . web-mode)) - (add-to-list 'auto-mode-alist '("\\.twig.html\\'" . web-mode)) - - (setq web-mode-markup-indent-offset 2) - (setq web-mode-enable-auto-pairing t) - (setq web-mode-enable-css-colorization t) - (setq web-mode-enable-block-face t) - (setq web-mode-enable-current-element-highlight t))) + (use-package web-mode + :defer t + :config + (add-to-list 'auto-mode-alist '("\\.html?\\'" . web-mode)) + (add-to-list 'auto-mode-alist '("\\.twig.html\\'" . web-mode)) + (setq web-mode-markup-indent-offset 2) + (setq web-mode-enable-auto-pairing t) + (setq web-mode-enable-css-colorization t) + (setq web-mode-enable-block-face t) + (setq web-mode-enable-current-element-highlight t)) #+END_SRC ** Org *** Org-mode #+BEGIN_SRC emacs-lisp :tangle init.el - (org-babel-do-load-languages - 'org-babel-load-languages - '((R . t) - (ditaa . t) - (dot . t) - ;; (php . t) - (emacs-lisp . t) - (gnuplot . t) - (haskell . nil) - (latex . t) - ;;(ledger . t) - (ocaml . nil) - (octave . t) - (python . t) - (ruby . t) - (screen . nil) - (shell . t) - (sql . t) - (js . t))) - - (defun org-babel-edit-prep:sql (babel-info) - (setq-local buffer-file-name (->> babel-info caddr (alist-get :tangle))) - (setq-local lsp-buffer-uri (->> babel-info caddr (alist-get :tangle) lsp--path-to-uri)) - (setq-local lsp-headerline-breadcrumb-enable nil) - (lsp)) - - (global-set-key (kbd "C-c l") 'org-store-link) - (global-set-key (kbd "C-c a") 'org-agenda) - (global-set-key (kbd "C-c c") 'org-capture) - ;; (global-set-key (kbd "M-f") 'org-metaright) - ;; (global-set-key (kbd "M-b") 'org-metaleft) - ;; (global-set-key (kbd "M-p") 'org-metaup) - ;; (global-set-key (kbd "M-n") 'org-metadown) - - (setq org-default-notes-file "~/Documents/todo.org" + (use-package org + :defer t + :config + (org-babel-do-load-languages + 'org-babel-load-languages + '((R . t) + (ditaa . t) + (dot . t) + ;; (php . t) + (emacs-lisp . t) + (gnuplot . t) + (haskell . nil) + (latex . t) + ;;(ledger . t) + (ocaml . nil) + (octave . t) + (python . t) + (ruby . t) + (screen . nil) + (shell . t) + (sql . t) + (js . t))) + (setq org-default-notes-file "~/Documents/todo.org" system-time-locale "C" org-use-speed-commands t org-adapt-indentation nil @@ -1170,8 +784,7 @@ The main way to interact with SQL is using org-mode org-src-tab-acts-natively t org-id-track-globally t org-confirm-babel-evaluate nil) - - (setq org-todo-keywords + (setq org-todo-keywords (quote ((sequence "TODO(t)" "MIGRATE(m)" "IN PROGRESS(p)" @@ -1183,7 +796,7 @@ The main way to interact with SQL is using org-mode "MEETING" "NEED CLARIFICATION(t)" )))) - (setq org-todo-keyword-faces + (setq org-todo-keyword-faces (quote (("TODO" :foreground "red" :weight bold) ("NEXT" :foreground "blue" :weight bold) ("DONE" :foreground "forest green" :weight bold) @@ -1192,10 +805,26 @@ The main way to interact with SQL is using org-mode ("CANCELLED" :foreground "forest green" :weight bold) ("MEETING" :foreground "forest cyan" :weight bold) ("PHONE" :foreground "blue" :weight bold)))) + :bind + ("C-c l" . org-store-link) + ("C-c a" . org-agenda) + ("C-c c" . org-capture) + ) + + (defun org-babel-edit-prep:sql (babel-info) + (setq-local buffer-file-name (->> babel-info caddr (alist-get :tangle))) + (setq-local lsp-buffer-uri (->> babel-info caddr (alist-get :tangle) lsp--path-to-uri)) + (setq-local lsp-headerline-breadcrumb-enable nil) + (lsp)) + + ;; (global-set-key (kbd "M-f") 'org-metaright) + ;; (global-set-key (kbd "M-b") 'org-metaleft) + ;; (global-set-key (kbd "M-p") 'org-metaup) + ;; (global-set-key (kbd "M-n") 'org-metadown) #+END_SRC -*** Org-ref (не используется) - + +*** Org-ref #+begin_src emacs-lisp :tangle nil (load "org-ref-autoloads") @@ -1209,59 +838,51 @@ The main way to interact with SQL is using org-mode *** Org-roam #+begin_src emacs-lisp :tangle init.el - (when (package-loaded? "org-roam") - (progn - (setq org-roam-directory (file-truename "~/Zettelkasten") - org-roam-v2-ack t - org-roam-completion-everywhere t - org-roam-index-file (concat org-roam-directory "/20210409054712-жизнь.org") - org-roam-dailies-directory (concat org-roam-directory "journals/")) - - (org-roam-db-autosync-mode t) + (use-package org-roam + :defer t + :bind + ("C-c n l" . org-roam-node-insert) + ("C-c n b" . org-roam-buffer-toggle) + ("C-c n f" . org-roam-node-find) + ("C-c n t t" . org-roam-tag-add) + ("C-c n t r" . org-roam-tag-remove) + ("C-c n i" . org-roam-jump-to-index) + ("C-c n g" . org-roam-graph) + ("C-c n d" . org-roam-db-build-cache) + ("C-c n r" . org-roam-node-random) + ("C-c n j" . org-roam-dailies-find-date) + :config + (setq org-roam-directory (file-truename "~/Zettelkasten") + org-roam-v2-ack t + org-roam-completion-everywhere t + org-roam-index-file (concat org-roam-directory "/20210409054712-жизнь.org") + org-roam-dailies-directory (concat org-roam-directory "journals/")) + + (org-roam-db-autosync-mode t)) + + (defun org-roam-jump-to-index () + "Stub of recreating the function from V1" + (interactive) + (let + ((org-roam-index org-roam-index-file)) + (find-file org-roam-index))) - (defun org-roam-jump-to-index () - "Stub of recreating the function from V1" - (interactive) - (let - ((org-roam-index org-roam-index-file)) - (find-file org-roam-index))) - - (define-key global-map - (kbd "C-c n l") 'org-roam-node-insert) - (define-key global-map - (kbd "C-c n f") 'org-roam-node-find) - (define-key global-map - (kbd "C-c n b") 'org-roam-buffer-toggle) - (define-key global-map - (kbd "C-c n t t") 'org-roam-tag-add) - (define-key global-map - (kbd "C-c n t r") 'org-roam-tag-remove) - (define-key global-map - (kbd "C-c n i") 'org-roam-jump-to-index) - (define-key global-map - (kbd "C-c n g") 'org-roam-graph) - (define-key global-map - (kbd "C-c n d") 'org-roam-db-build-cache) - (define-key global-map - (kbd "C-c n r") 'org-roam-node-random) - (define-key global-map - (kbd "C-c n j") 'org-roam-dailies-find-date))) - - (customize-set-variable 'org-link-descriptive t) -#+end_src + (use-package org + :defer t + :config + (customize-set-variable 'org-link-descriptive t) -*** Агенда и Capture -#+begin_src emacs-lisp :tangle init.el - (add-to-list 'org-agenda-files - "~/Documents/todo.org") + (add-to-list 'org-agenda-files + "~/Documents/todo.org") - (setq org-directory "~/Documents" - org-default-notes-file (concat org-directory "/todo.org")) + (setq org-directory "~/Documents" + org-default-notes-file (concat org-directory "/todo.org"))) #+end_src ** YAML -#+begin_src emacs-lisp - (package-loaded? "yaml-mode") +#+begin_src emacs-lisp :tangle init.el + (use-package yaml-mode + :defer t) #+end_src * Коммуникации @@ -1272,31 +893,25 @@ The main way to interact with SQL is using org-mode ** Telega #+BEGIN_SRC emacs-lisp :tangle init.el - (when (package-loaded? "telega") - (setq telega-filter-custom-show-folders t - telega-chat-fill-column 40 - telega-root-fill-column 60 - telega-url-shorten-use-images t) - - (define-key global-map (kbd "C-c t") telega-prefix-map)) + (use-package telega + :bind (("C-c t" . telega-prefix-map))) #+END_SRC ** Mastodon -#+begin_src emacs-lisp :tangle nil - (when (package-loaded? "mastodon") +#+begin_src emacs-lisp :tangle init.el + (use-package mastodon + :defer t + :config (setq mastodon-active-user "w96k" mastodon-instance-url "https://fosstodon.org/")) #+end_src -** LLM -#+begin_src emacs-lisp - -#+end_src - - -* Наука * Разное - +** *Highlight +#+BEGIN_SRC emacs-lisp :tangle init.el + (use-package highlight + :defer t) +#+end_src ** Минорные твики дефолтного имакса *** Короткие ответы на вопросы #+begin_src emacs-lisp :tangle init.el @@ -1309,22 +924,16 @@ The main way to interact with SQL is using org-mode *** Подсвечивать текущую строку #+begin_src emacs-lisp :tangle nil - (global-hl-line-mode 1) -#+end_src - -*** Открывать список буферов в отдельном фрейме -#+begin_src emacs-lisp :tangle nil - (add-to-list 'special-display-buffer-names "*Buffer List*") - (setq Buffer-menu-files-only t) + (global-hl-line-mode t) #+end_src *** Автодополнение в echo при M-x и других командах #+begin_src emacs-lisp :tangle init.el - (icomplete-mode 1) + (icomplete-mode t) #+end_src *** Проверять орфографию #+begin_src emacs-lisp :tangle init.el - (flyspell-mode 1) + (flyspell-mode t) #+end_src *** Не спрашивать о несуществующих буферах @@ -1358,12 +967,8 @@ The main way to interact with SQL is using org-mode ;; (set-window-buffer nil (current-buffer)) (setq default-directory "~/" - delete-seleciton-mode t - inhibit-startup-message t - initial-scratch-message nil custom-safe-themes t delete-old-versions t - confirm-kill-processes nil enable-local-variables t) #+end_src @@ -1442,12 +1047,11 @@ The main way to interact with SQL is using org-mode *** Kills #+begin_src emacs-lisp :tangle init.el - (define-key global-map (kbd "C-k") 'kill-region) - - (when (package-loaded? "whole-line-or-region") + (use-package whole-line-or-region + :bind (("C-k" . kill-region) + ("C-w" . backward-kill-word)) + :config (whole-line-or-region-global-mode)) - - (define-key global-map (kbd "C-w") 'backward-kill-word) #+end_src @@ -1469,8 +1073,8 @@ The main way to interact with SQL is using org-mode ** Docker #+begin_src emacs-lisp :tangle init.el - (package-loaded? "docker") - (package-loaded? "docker-compose-mode") + (use-package docker :defer t) + (use-package docker-compose-mode :defer t) #+end_src ** Debian Инструменты для работы с пакетным менеджером Debian'а apt'ом и смежными @@ -1482,27 +1086,27 @@ The main way to interact with SQL is using org-mode ** Guix #+begin_src emacs-lisp :tangle init.el - (package-loaded? "geiser-guile") - - (package-loaded? "guix") + ;; (use-package geiser-guile :defer t) - (setq geiser-guile-binary "guile") - - (with-eval-after-load 'geiser-guile - (progn - (add-to-list 'geiser-guile-load-path "~/projects/guix/"))) + (use-package guix + :defer t + :config + (setq geiser-guile-binary "guile") + (with-eval-after-load 'geiser-guile + (progn + (add-to-list 'geiser-guile-load-path "~/projects/guix/"))) - (let ((guix-copyright "~/projects/guix/etc/copyright.el")) - (if (file-exists-p guix-copyright) - (load-file "~/projects/guix/etc/copyright.el"))) + (let ((guix-copyright "~/projects/guix/etc/copyright.el")) + (if (file-exists-p guix-copyright) + (load-file "~/projects/guix/etc/copyright.el"))) - (setq copyright-names-regexp - (format "%s <%s>" user-full-name user-mail-address)) + (setq copyright-names-regexp + (format "%s <%s>" user-full-name user-mail-address))) #+end_src ** Nix -#+begin_src emacs-lisp :tangle nil - (package-loaded? "nix") +#+begin_src emacs-lisp :tangle init.el + (use-package nix) #+end_src ** Direnv @@ -1597,5 +1201,25 @@ The main way to interact with SQL is using org-mode ** Ignore case sensitive in completions, search and etc #+begin_src emacs-lisp :tangle init.el - (setq completion-ignore-case t) + (setq completion-ignore-case t + read-buffer-completion-ignore-case t + read-file-name-completion-ignore-case t) #+end_src + +** Make scripts executable automatically +#+begin_src emacs-lisp :tangle init.el + (add-hook 'after-save-hook + 'executable-make-buffer-file-executable-if-script-p) +#+end_src + +** F1 for M-x shell and F2 for grep +#+begin_src emacs-lisp :tangle init.el + (global-set-key (kbd "<f1>") 'shell) + (global-set-key (kbd "<f2>") 'rgrep) +#+end_src + +** Hippie expand +#+begin_src emacs-lisp :tangle init.el + (global-set-key [remap dabbrev-expand] 'hippie-expand) +#+end_src + diff --git a/guix/.dotfiles/home-configuration.scm b/guix/.dotfiles/home-configuration.scm index 4aab310..67446da 100644 --- a/guix/.dotfiles/home-configuration.scm +++ b/guix/.dotfiles/home-configuration.scm @@ -3,6 +3,8 @@ (gnu packages gnupg) (gnu packages shells) (gnu services) + (gnu services xorg) + (gnu system keyboard) (guix gexp) (guix channels) (gnu home services) @@ -30,6 +32,15 @@ "emacs-s" "emacs-xterm-color" "emacs-lsp-mode" + "emacs-helm" + "emacs-magit" + "emacs-git-timemachine" + "emacs-browse-kill-ring" + "emacs-anzu" + "emacs-sudo-edit" + "emacs-highlight" + "emacs-mastodon" + "emacs-org-roam" "guile" "guile-readline" @@ -37,7 +48,7 @@ "emacs-geiser" "emacs-geiser-guile" - "emacs-telega" + ;;"emacs-telega" "emacs-guix" "emacs-simple-httpd" "emacs-osm" @@ -52,12 +63,12 @@ ;; "wkz-emacs" "emacs-no-x-toolkit" "emacs-gptel" + "emacs-nix-mode" "lm-sensors" "htop" "make" "emacs-simple-httpd" "emacs-guix" - "emacs-telega" "gimp" "imagemagick" "stow" @@ -84,6 +95,8 @@ "gnupg" "xhost" + "universal-ctags" + "c-intro-and-ref" ;; "wkz-php" ;; "wkz-python" ;; "wkz-ruby" diff --git a/guix/config-desktop.scm b/guix/config-desktop.scm index cf30280..32ac2cc 100644 --- a/guix/config-desktop.scm +++ b/guix/config-desktop.scm @@ -49,6 +49,7 @@ '( "ratpoison" "xterm" + "screen" )) %base-packages)) |