summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMikhail Kirillov <w96k@runbox.com>2024-09-03 22:43:11 +0400
committerMikhail Kirillov <w96k@runbox.com>2024-09-03 22:43:11 +0400
commitfde9de8aaab787061625952015d69db18c82c878 (patch)
tree1ce4de9f7149e9b8f21c07d13080f21242e0b84c
parentfe2941baeff0f28f4fd9a82ba516b94348361d9b (diff)
Update configs
-rw-r--r--emacs/.emacs.d/.emacs-config.org874
-rw-r--r--guix/.dotfiles/home-configuration.scm17
-rw-r--r--guix/config-desktop.scm1
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))