diff options
| author | spl3g <spleefer6@yandex.ru> | 2024-10-03 17:44:36 +0300 |
|---|---|---|
| committer | spl3g <spleefer6@yandex.ru> | 2025-05-01 14:58:56 +0300 |
| commit | 3b9099e4537e039b140294157ae18b1d1b41b366 (patch) | |
| tree | 17b6da77c0b42eb3014cdb843490ebc48afcddea /home-manager | |
| parent | 24a7b21c13165718828826634c1c3efeeea48f48 (diff) | |
feat: start moving into a new config
Diffstat (limited to 'home-manager')
| -rw-r--r-- | home-manager/homeModules/emacs/init.el | 30 | ||||
| -rw-r--r-- | home-manager/homeModules/emacs/new.el | 337 |
2 files changed, 356 insertions, 11 deletions
diff --git a/home-manager/homeModules/emacs/init.el b/home-manager/homeModules/emacs/init.el index 56b4bb5..1c9b948 100644 --- a/home-manager/homeModules/emacs/init.el +++ b/home-manager/homeModules/emacs/init.el @@ -1,7 +1,12 @@ -(org-babel-load-file - (expand-file-name - "config.org" - user-emacs-directory)) +;;; Code: +;; (org-babel-load-file +;; (expand-file-name +;; "config.org" +;; user-emacs-directory)) +(load (expand-file-name + "new.el" + user-emacs-directory)) + (custom-set-variables ;; custom-set-variables was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. @@ -9,16 +14,19 @@ ;; If there is more than one, they won't work right. '(auth-source-save-behavior nil) '(custom-safe-themes - '("d77d6ba33442dd3121b44e20af28f1fae8eeda413b2c3d3b9f1315fbda021992" "80214de566132bf2c844b9dee3ec0599f65c5a1f2d6ff21a2c8309e6e70f9242" default)) + '("d77d6ba33442dd3121b44e20af28f1fae8eeda413b2c3d3b9f1315fbda021992" + "80214de566132bf2c844b9dee3ec0599f65c5a1f2d6ff21a2c8309e6e70f9242" default)) '(eshell-modules-list - '(eshell-alias eshell-banner eshell-basic eshell-cmpl eshell-dirs eshell-tramp eshell-extpipe eshell-glob eshell-hist eshell-ls eshell-pred eshell-prompt eshell-script eshell-term eshell-unix)) - '(package-selected-packages '(marginalia embark-consult)) - '(safe-local-variable-values '((engine . go)))) + '(eshell-alias eshell-banner eshell-basic eshell-cmpl eshell-dirs eshell-tramp + eshell-extpipe eshell-glob eshell-hist eshell-ls eshell-pred + eshell-prompt eshell-script eshell-term eshell-unix)) + '(org-agenda-files '("~/prog/js/agenda.org")) + '(package-selected-packages '(eglot marginalia embark-consult)) + '(safe-local-variable-values '((engine . go))) + '(warning-suppress-log-types '((emacs) (comp)))) (custom-set-faces ;; custom-set-faces was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. ;; Your init file should contain only one such instance. ;; If there is more than one, they won't work right. - ) -(put 'upcase-region 'disabled nil) -(put 'downcase-region 'disabled nil) + '(italic ((t (:slant italic))))) diff --git a/home-manager/homeModules/emacs/new.el b/home-manager/homeModules/emacs/new.el new file mode 100644 index 0000000..4ddfb79 --- /dev/null +++ b/home-manager/homeModules/emacs/new.el @@ -0,0 +1,337 @@ +(load (expand-file-name "elpaca.el" user-emacs-directory)) + +(use-package emacs + :ensure nil + :demand t + :hook + (minibuffer-setup . cursor-intangible-mode) + :custom + (minibuffer-prompt-properties '(read-only t cursor-intangible t face minibuffer-prompt)) + (enable-recursive-minibuffers t) + + ;; Scrolling + (scroll-margin 5) + (scroll-conservatively 101) + (mouse-wheel-progressive-speed nil) + + ;; Backups + (create-lockfiles nil) + (make-backup-files nil) + (backup-directory-alist `(("." . ,(expand-file-name "backup" user-emacs-directory)))) + (tramp-backup-directory-alist backup-directory-alist) + (backup-by-copying-when-linked t) + (backup-by-copying t) ; Backup by copying rather renaming + (delete-old-versions t) ; Delete excess backup versions silently + (version-control t) ; Use version numbers for backup files + (kept-new-versions 5) + (kept-old-versions 5) + (vc-make-backup-files nil) + + ;; Auto saving + (auto-save-default t) + (auto-save-include-big-deletions t) + (kill-buffer-delete-auto-save-files t) + + ;; Ediff + (ediff-window-setup-function #'ediff-setup-windows-plain) + (ediff-split-window-function #'split-window-horizontally) + :init + ;; Add prompt indicator to `completing-read-multiple'. + ;; We display [CRM<separator>], e.g., [CRM,] if the separator is a comma. + (defun crm-indicator (args) + (cons (format "[CRM%s] %s" + (replace-regexp-in-string + "\\`\\[.*?]\\*\\|\\[.*?]\\*\\'" "" + e crm-separator) + (car args)) + (cdr args))) + (advice-add #'completing-read-multiple :filter-args #'crm-indicator) + + (set-face-attribute 'default nil + :font "FiraCode Nerd Font" + :height 110 + :weight 'medium)) + +;; Auto reverting buffers +(use-package auto-revert + :ensure nil + :no-require t + :custom + (revert-without-query (list ".")) + (auto-revert-stop-on-user-input nil) + (auto-revert-verbose t) + + ;; Revert other buffers (e.g, Dired) + (global-auto-revert-non-file-buffers t) + :init + (global-auto-revert-mode)) + +;; Recent files +(use-package recentf + :ensure nil + :custom + (recentf-max-saved-items 500) ; default is 20 + (recentf-auto-cleanup 'mode) + :init + (recentf-mode)) + +;; Save history +(use-package savehist :ensure nil + :custom + (savehist-file "~/.config/emacs/var/savehist.el") + (history-length 500) + (savehist-additional-variables '(kill-ring search-ring)) + :config + (savehist-mode t)) + +;; Annoyances +(blink-cursor-mode -1) + +;; Don't blink the paren matching the one at point, it's too distracting. +(setq blink-matching-paren nil) + +;; No beeping or blinking +(setq visible-bell nil) +(setq ring-bell-function #'ignore) + +;; This controls how long Emacs will blink to show the deleted pairs with +;; `delete-pair'. A longer delay can be annoying as it causes a noticeable pause +;; after each deletion, disrupting the flow of editing. +(setq delete-pair-blink-delay 0.03) + +;; Emacs no littering +(use-package no-littering + :demand t + :config + (no-littering-theme-backups)) + +;; Minibuffer completions +(use-package prescient + :config + (prescient-persist-mode) + (setq completion-styles '(prescient basic) + completion-category-overrides '((file (styles basic partial-completion)))) + :custom-face + (prescient-primary-highlight ((t (:inherit 'font-lock-keyword-face))))) + +(use-package vertico + :init + (vertico-mode) + :bind (:map vertico-map + ("M-j" . vertico-next) + ("M-k" . vertico-previous) + ("RET" . vertico-directory-enter) + ("DEL" . vertico-directory-delete-char) + ("M-DEL" . vertico-directory-delete-word))) + +(use-package marginalia + :bind (:map minibuffer-local-map + ("M-A" . marginalia-cycle)) + :init + (marginalia-mode)) + +;; In buffer completions +(use-package corfu + :hook (emacs-startup . global-corfu-mode) + :bind (:map corfu-map + ("M-j" . corfu-next) + ("M-k" . corfu-previous) + ([remap previous-line] . nil) + ([remap next-line] . nil)) + :custom + (corfu-preselect 'prompt) + (corfu-auto t) + (corfu-popupinfo-delay 0.5) + (corfu-auto-delay 0.1) + (corfu-auto-prefix 2) + (corfu-count 16) + (corfu-max-width 120) + (corfu-scroll-margin 4) + (corfu-on-exact-match nil) + (tab-always-indent 'complete) + :config + (global-corfu-mode) + (corfu-popupinfo-mode)) + +(use-package cape + :after corfu + :custom + (dabbrev-ignored-buffer-modes '(archive-mode image-mode eshell-mode)) + :config + (advice-add #'lsp-completion-at-point :around #'cape-wrap-noninterruptible) + (advice-add #'lsp-completion-at-point :around #'cape-wrap-nonexclusive) + (add-hook 'completion-at-point-functions #'cape-dabbrev) + (add-hook 'completion-at-point-functions #'cape-file) + (add-hook 'completion-at-point-functions #'cape-elisp-block)) + +(use-package which-key + :ensure nil + :init + (which-key-mode)) + +;; Theme +(defvar after-load-theme-hook nil + "Hook run after a color theme is loaded using `load-theme'.") +(defadvice load-theme (after run-after-load-theme-hook activate) + "Run `after-load-theme-hook'." + (run-hooks 'after-load-theme-hook)) + +(defadvice consult-theme (after run-after-load-theme-hook activate) + "Run `after-load-theme-hook'." + (run-hooks 'after-load-theme-hook)) + +(defun widen-mode-line () + "Widen the mode-line." + (interactive) + (set-face-attribute 'mode-line nil + :inherit 'mode-line + :box '(:line-width 8 :style flat-button)) + (set-face-attribute 'mode-line-inactive nil + :inherit 'mode-line-inactive + :box '(:line-width 8 :style flat-button))) + +(add-hook 'after-load-theme-hook 'widen-mode-line) + +;; Some things for programming +(electric-pair-mode t) + +(use-package rainbow-delimiters + :hook (prog-mode . rainbow-delimiters-mode)) + +(add-hook 'prog-mode-hook 'display-line-numbers-mode) +(setq display-line-numbers 'relative) +(visual-line-mode 1) + +;; My eshell functions +(defun spl3g/select-eshell () + (interactive) + (let* ((eshell-buffers (seq-filter (lambda (buffer) + (eq (with-current-buffer buffer major-mode) + 'eshell-mode)) + (buffer-list))) + (eshell-names (mapcar (lambda (buffer) (buffer-name buffer)) eshell-buffers)) + (eshell-windows (remove nil (mapcar (lambda (buffer) + (let* ((window (get-buffer-window buffer)) + (name (buffer-name buffer))) + (when window + (cons name window)))) + eshell-buffers))) + (selected-buffer (if (length> eshell-buffers 1) + (completing-read "Select eshell buffer: " eshell-names) + (car eshell-buffers))) + (selected-window (if (length> eshell-windows 1) + (cdr (assoc (completing-read "Select window to place the buffer in: " eshell-windows) eshell-windows)) + (car eshell-windows)))) + (if selected-window + (progn + (select-window selected-window) + (switch-to-buffer selected-buffer)) + (switch-to-buffer-other-window selected-buffer)))) + +(defun spl3g/open-eshell () + (interactive) + (let* ((project (project-current)) + (func (if project + 'project-eshell + 'eshell)) + (buffer-name (if project + (format "*%s-eshell*" (project-name project)) + "*eshell*"))) + (if (not (get-buffer buffer-name)) + (let ((buf (funcall func))) + (switch-to-buffer (other-buffer buf)) + (switch-to-buffer-other-window buf)) + (switch-to-buffer-other-window buffer-name)))) + +(keymap-global-set "C-c o s" 'spl3g/select-eshell) +(keymap-global-set "C-c o t" 'spl3g/open-eshell) + +;; LSP +(use-package lsp-mode + :custom + (lsp-completion-provider :none) + (lsp-enable-suggest-server-download nil) + (lsp-keymap-prefix "C-c s") + :init + (defun lsp-mode-setup-completion () + (setf (alist-get 'styles (alist-get 'lsp-capf completion-category-defaults)) + '(prescient))) + + :hook + (lsp-completion-mode . lsp-mode-setup-completion) + (nix-mode . lsp-mode) + (typescript-ts-mode . lsp-mode) + (go-ts-mode . lsp-mode) + (web-mode . lsp-mode)) + +(use-package lsp-ui + :hook (lsp-mode . lsp-ui-mode) + :custom + (lsp-ui-doc-enable nil)) + +(use-package flycheck + :init + (global-flycheck-mode) + :config + (add-to-list 'display-buffer-alist + '("\\*Flycheck" + (display-buffer-reuse-window display-buffer-at-bottom) + (reusable-frames . visible) + (window-height . 0.35)))) (use-package lsp-ui + :hook (lsp-mode . lsp-ui-mode) + :bind (:map lsp-ui-mode-map + ([remap xref-find-definitions] . lsp-ui-peek-find-definitions) + ([remap xref-find-references] . lsp-ui-peek-find-references)) + :custom + (lsp-ui-doc-enable nil)) + +;; Templates +(use-package tempel + :bind (:map tempel-map + ("M-TAB" . tempel-next)) + :custom + (tempel-trigger-prefix "<") + :init + (add-to-list 'completion-at-point-functions #'tempel-complete)) + +(use-package tempel-collection + :ensure t + :after tempel) + +;; Formatting +(use-package apheleia + :hook (prog-mode . apheleia-mode)) + +;; Direnv +(use-package direnv + :config + (direnv-mode)) + +;; Dired +(use-package dired :ensure nil + :ensure nil + :commands (dired dired-jump) + :custom + (dired-listing-switches "-hal --group-directories-first") + (dired-dwim-target t)) + +;; Calc +(use-package casual-calc + :bind (:map + calc-mode-map + ("C-o" . casual-calc-tmenu) + :map + calc-alg-map + ("C-o" . casual-calc-tmenu)) + :after (calc)) + +;; Magit +(use-package magit + :bind (("C-c o g" . magit))) + +;; Window switching +(use-package ace-window + :bind ("M-o" . ace-window)) + +(provide 'new) +;;; new.el ends here |
