466 lines
16 KiB
EmacsLisp
466 lines
16 KiB
EmacsLisp
;;; EMACS init file -*- lexical-binding:t -*-
|
|
|
|
(require 'package)
|
|
(add-to-list 'package-archives
|
|
'("melpa" . "https://melpa.org/packages/"))
|
|
(package-initialize)
|
|
|
|
(setq use-package-always-ensure t
|
|
use-package-always-defer t
|
|
use-package-expand-minimally t)
|
|
(require 'use-package)
|
|
|
|
(let ((emacs-tmp-dir (expand-file-name (format "emacs%d" (user-uid))
|
|
temporary-file-directory)))
|
|
(setq auto-save-file-name-transforms `((".*" ,emacs-tmp-dir t))
|
|
auto-save-list-file-prefix emacs-tmp-dir
|
|
backup-directory-alist (setq undo-tree-history-directory-alist
|
|
`((".*" . ,emacs-tmp-dir)))
|
|
org-preview-latex-image-directory (expand-file-name "ltximg" emacs-tmp-dir)))
|
|
|
|
(setq backup-by-copying t
|
|
inhibit-splash-screen t
|
|
custom-file (expand-file-name "custom.el" temporary-file-directory))
|
|
|
|
(use-package auto-package-update
|
|
:custom
|
|
(auto-package-update-prompt-before-update t)
|
|
(auto-package-update-show-preview t)
|
|
(auto-package-update-delete-old-versions t)
|
|
:config
|
|
(auto-package-update-at-time "05:00"))
|
|
|
|
(use-package undo-fu
|
|
:demand t
|
|
:config
|
|
(global-unset-key (kbd "C-z"))
|
|
(global-set-key (kbd "C-z") #'undo-fu-only-undo)
|
|
(global-set-key (kbd "C-S-z") #'undo-fu-only-redo))
|
|
|
|
(defun my-meow-undo (arg)
|
|
"Same as meow-undo, but uses undo-fu to redo if negative prefix"
|
|
(interactive "P")
|
|
(when (region-active-p)
|
|
(meow--cancel-selection))
|
|
(let ((numeric-prefix (prefix-numeric-value arg)))
|
|
(if (meow--with-negative-argument-p arg)
|
|
(undo-fu-only-redo (abs numeric-prefix))
|
|
(undo-fu-only-undo numeric-prefix))))
|
|
(use-package meow
|
|
:demand t
|
|
:config
|
|
(setq meow-cheatsheet-layout meow-cheatsheet-layout-qwerty)
|
|
(meow-motion-overwrite-define-key '("j" . meow-next)
|
|
'("k" . meow-prev)
|
|
'("<escape>" . ignore))
|
|
(meow-leader-define-key '("j" . "H-j")
|
|
'("k" . "H-k")
|
|
'("1" . meow-digit-argument)
|
|
'("2" . meow-digit-argument)
|
|
'("3" . meow-digit-argument)
|
|
'("4" . meow-digit-argument)
|
|
'("5" . meow-digit-argument)
|
|
'("6" . meow-digit-argument)
|
|
'("7" . meow-digit-argument)
|
|
'("8" . meow-digit-argument)
|
|
'("9" . meow-digit-argument)
|
|
'("0" . meow-digit-argument)
|
|
'("/" . meow-keypad-describe-key)
|
|
'("?" . meow-cheatsheet))
|
|
(meow-normal-define-key '("0" . meow-expand-0)
|
|
'("9" . meow-expand-9)
|
|
'("8" . meow-expand-8)
|
|
'("7" . meow-expand-7)
|
|
'("6" . meow-expand-6)
|
|
'("5" . meow-expand-5)
|
|
'("4" . meow-expand-4)
|
|
'("3" . meow-expand-3)
|
|
'("2" . meow-expand-2)
|
|
'("1" . meow-expand-1)
|
|
'("-" . negative-argument)
|
|
'(";" . meow-reverse)
|
|
'("," . meow-inner-of-thing)
|
|
'("." . meow-bounds-of-thing)
|
|
'("[" . meow-beginning-of-thing)
|
|
'("]" . meow-end-of-thing)
|
|
'("a" . meow-append)
|
|
'("A" . meow-open-below)
|
|
'("b" . meow-back-word)
|
|
'("B" . meow-back-symbol)
|
|
'("c" . meow-change)
|
|
'("d" . meow-delete)
|
|
'("D" . meow-backward-delete)
|
|
'("e" . meow-next-word)
|
|
'("E" . meow-next-symbol)
|
|
'("f" . meow-find)
|
|
'("g" . meow-cancel-selection)
|
|
'("G" . meow-grab)
|
|
'("h" . meow-left)
|
|
'("H" . meow-left-expand)
|
|
'("i" . meow-insert)
|
|
'("I" . meow-open-above)
|
|
'("j" . meow-next)
|
|
'("J" . meow-next-expand)
|
|
'("k" . meow-prev)
|
|
'("K" . meow-prev-expand)
|
|
'("l" . meow-right)
|
|
'("L" . meow-right-expand)
|
|
'("m" . meow-join)
|
|
'("n" . meow-search)
|
|
'("N" . meow-pop-search)
|
|
'("o" . meow-block)
|
|
'("O" . meow-to-block)
|
|
'("p" . meow-yank)
|
|
'("q" . meow-quit)
|
|
'("Q" . meow-goto-line)
|
|
'("r" . meow-replace)
|
|
'("R" . meow-swap-grab)
|
|
'("s" . meow-kill)
|
|
'("t" . meow-till)
|
|
'("u" . my-meow-undo)
|
|
'("U" . meow-undo-in-selection)
|
|
'("v" . meow-visit)
|
|
'("w" . meow-mark-word)
|
|
'("W" . meow-mark-symbol)
|
|
'("x" . meow-line)
|
|
'("X" . meow-goto-line)
|
|
'("y" . meow-save)
|
|
'("Y" . meow-sync-grab)
|
|
'("z" . meow-pop-selection)
|
|
'("'" . repeat)
|
|
'("<escape>" . ignore))
|
|
(meow-global-mode))
|
|
|
|
(use-package treesit
|
|
:ensure nil
|
|
:init
|
|
(add-to-list 'major-mode-remap-alist '(sh-mode . bash-ts-mode))
|
|
(add-to-list 'major-mode-remap-alist '(css-mode . css-ts-mode))
|
|
(add-to-list 'major-mode-remap-alist '(c-mode . c-ts-mode))
|
|
(add-to-list 'major-mode-remap-alist '(c++-mode . c++-ts-mode))
|
|
(add-to-list 'major-mode-remap-alist '(csharp-mode . csharp-ts-mode))
|
|
(add-to-list 'major-mode-remap-alist '(java-mode . java-ts-mode))
|
|
(add-to-list 'major-mode-remap-alist '(python-mode . python-ts-mode))
|
|
(add-to-list 'major-mode-remap-alist '(ruby-mode . ruby-ts-mode))
|
|
(add-to-list 'major-mode-remap-alist '(js-mode . js-ts-mode))
|
|
(add-to-list 'major-mode-remap-alist '(js-json-mode . json-ts-mode))
|
|
:custom
|
|
(treesit-extra-load-path `(,(expand-file-name "tree-sitter-module/dist/"
|
|
user-emacs-directory))))
|
|
|
|
(use-package dtrt-indent
|
|
:demand t
|
|
:config
|
|
(dtrt-indent-global-mode))
|
|
|
|
(use-package aggressive-indent
|
|
:hook (lispyville-mode
|
|
nix-mode
|
|
org-mode))
|
|
|
|
(use-package rainbow-delimiters
|
|
:hook prog-mode)
|
|
|
|
(use-package which-key
|
|
:demand t
|
|
:custom
|
|
(which-key-idle-delay 0.2)
|
|
:config
|
|
(which-key-mode))
|
|
|
|
(use-package orderless
|
|
:demand t
|
|
:custom
|
|
(completion-styles '(orderless basic))
|
|
(completion-category-defaults nil)
|
|
(completion-category-overrides '((file (styles partial-completion)))))
|
|
|
|
(use-package marginalia
|
|
:demand t
|
|
:after vertico
|
|
:bind (:map minibuffer-local-map
|
|
("M-a" . marginalia-cycle))
|
|
:config
|
|
(marginalia-mode))
|
|
|
|
(use-package vertico
|
|
:demand t
|
|
:config
|
|
(vertico-mode)
|
|
(vertico-mouse-mode))
|
|
|
|
(use-package yasnippet)
|
|
(use-package yasnippet-snippets)
|
|
|
|
(use-package all-the-icons
|
|
:demand t)
|
|
|
|
(use-package all-the-icons-completion
|
|
:after (marginalia all-the-icons)
|
|
:hook (marginalia-mode . all-the-icons-completion-marginalia-setup)
|
|
:init
|
|
(all-the-icons-completion-mode))
|
|
|
|
(use-package treemacs
|
|
:commands treemacs)
|
|
(use-package treemacs-all-the-icons
|
|
:demand t
|
|
:after treemacs
|
|
:config
|
|
(treemacs-load-theme 'all-the-icons))
|
|
|
|
(use-package doom-modeline
|
|
:disabled t
|
|
:demand t
|
|
:custom
|
|
(doom-modeline-fn-alist (--map
|
|
(cons (remove-pos-from-symbol (car it)) (cdr it))
|
|
doom-modeline-fn-alist))
|
|
:config
|
|
(doom-modeline-mode))
|
|
|
|
(use-package dirvish
|
|
:after dired
|
|
:custom
|
|
(dirvish-attributes '(all-the-icons))
|
|
:config
|
|
(dirvish-override-dired-mode))
|
|
|
|
(use-package pdf-tools
|
|
:mode ("\\.pdf\\'" . pdf-view-mode)
|
|
:config
|
|
(pdf-tools-install))
|
|
|
|
(defun set-text-modes-font ()
|
|
(interactive)
|
|
(setq buffer-face-mode-face '(:family "DejaVu Sans Mono" :height 105)
|
|
line-spacing 0.4)
|
|
(buffer-face-mode))
|
|
|
|
(use-package org
|
|
:mode ("\\.org$" . org-mode)
|
|
:hook ((org-mode . org-indent-mode)
|
|
(org-mode . flyspell-mode)
|
|
(org-mode . auto-fill-mode)
|
|
(org-mode . set-text-modes-font))
|
|
:custom
|
|
(org-list-allow-alphabetical t)
|
|
(org-hide-emphasis-markers t)
|
|
(org-pretty-entities t)
|
|
:config
|
|
(setq org-format-latex-options (plist-put org-format-latex-options :scale 1.1)))
|
|
|
|
(use-package org-superstar
|
|
:custom
|
|
(org-superstar-leading-bullet ?\s)
|
|
:hook org-mode)
|
|
|
|
(use-package org-pdftools
|
|
:hook (org-mode . org-pdftools-setup-link))
|
|
|
|
(use-package editorconfig
|
|
:demand t
|
|
:config
|
|
(editorconfig-mode))
|
|
|
|
(use-package nix-mode
|
|
:mode "\\.nix'")
|
|
|
|
(use-package markdown-mode
|
|
:mode ("README\\.md\\'" . gfm-mode)
|
|
:custom
|
|
(markdown-command '("pandoc" "--from=markdown" "--to=html5")))
|
|
|
|
(use-package minimap
|
|
:commands minimap-mode
|
|
:custom-face
|
|
(minimap-active-region-background ((t (:background nil :inherit hl-line))))
|
|
:hook (minimap-sb-mode . turn-on-solaire-mode))
|
|
|
|
(use-package magit
|
|
:hook ((git-commit-setup . git-commit-turn-on-flyspell)
|
|
(git-commit-setup . git-commit-turn-on-auto-fill)))
|
|
|
|
(use-package tramp
|
|
:custom
|
|
(remote-file-name-inhibit-cache nil)
|
|
(tramp-verbose 1)
|
|
:config
|
|
(setq vc-ignore-dir-regexp (format "%s\\|%s"
|
|
vc-ignore-dir-regexp
|
|
tramp-file-name-regexp)))
|
|
|
|
(use-package vterm
|
|
:hook (vterm-mode . my-inhibit-hl-line-mode)
|
|
:config
|
|
(with-eval-after-load 'meow
|
|
(defvar meow-vterm-normal-mode-map
|
|
(let ((map (make-sparse-keymap)))
|
|
(define-key map (kbd "RET") #'vterm-send-return) map))
|
|
(setq vterm-keymap-exceptions '("C-c"))
|
|
(define-key vterm-mode-map (kbd "C-c ESC") #'vterm-send-escape)
|
|
(dolist (c '((yank . vterm-yank)
|
|
(xterm-paste . vterm-xterm-paste)
|
|
(yank-pop . vterm-yank-pop)
|
|
(mouse-yank-primary . vterm-yank-primary)
|
|
(self-insert-command . vterm--self-insert)
|
|
(beginning-of-defun . vterm-previous-prompt)
|
|
(end-of-defun . vterm-next-prompt)))
|
|
(define-key meow-vterm-normal-mode-map (vector 'remap (car c)) (cdr c)))
|
|
(add-hook 'vterm-mode-hook
|
|
(lambda ()
|
|
(add-hook 'meow-insert-enter-hook
|
|
(lambda ()
|
|
(use-local-map vterm-mode-map)
|
|
(vterm-goto-char (point)))
|
|
nil t)
|
|
(add-hook 'meow-insert-exit-hook
|
|
(lambda ()
|
|
(use-local-map meow-vterm-normal-mode-map))
|
|
nil t)))
|
|
(add-to-list 'meow-mode-state-list '(vterm-mode . insert))))
|
|
|
|
(use-package elfeed
|
|
:commands (elfeed elfeed-update)
|
|
:custom
|
|
(elfeed-feeds '(("https://archlinux.org/feeds/news/" arch-linux))))
|
|
|
|
(use-package xkcd
|
|
:commands xkcd)
|
|
|
|
(use-package ligature
|
|
:hook (prog-mode
|
|
(ligature-mode . prettify-symbols-mode))
|
|
:custom
|
|
(prettify-symbols-unprettify-at-point t)
|
|
:config
|
|
(ligature-set-ligatures 'prog-mode '("|||>" "<|||" "<==>" "<!--" "####" "~~>" "***" "||=" "||>"
|
|
":::" "::=" "=:=" "===" "==>" "=!=" "=>>" "=<<" "=/=" "!=="
|
|
"!!." ">=>" ">>=" ">>>" ">>-" ">->" "->>" "-->" "---" "-<<"
|
|
"<~~" "<~>" "<*>" "<||" "<|>" "<$>" "<==" "<=>" "<=<" "<->"
|
|
"<--" "<-<" "<<=" "<<-" "<<<" "<+>" "</>" "###" "#_(" "..<"
|
|
"..." "+++" "/==" "///" "_|_" "www" "&&" "^=" "~~" "~@" "~="
|
|
"~>" "~-" "**" "*>" "*/" "||" "|}" "|]" "|=" "|>" "|-" "{|"
|
|
"[|" "]#" "::" ":=" ":>" ":<" "$>" "==" "=>" "!=" "!!" ">:"
|
|
">=" ">>" ">-" "-~" "-|" "->" "--" "-<" "<~" "<*" "<|" "<:"
|
|
"<$" "<=" "<>" "<-" "<<" "<+" "</" "#{" "#[" "#:" "#=" "#!"
|
|
"##" "#(" "#?" "#_" "%%" ".=" ".-" ".." ".?" "+>" "++" "?:"
|
|
"?=" "?." "??" ";;" "/*" "/=" "/>" "//" "__" "~~" "(*" "*)"
|
|
"\\\\" "://")))
|
|
|
|
(use-package gruvbox-theme)
|
|
(use-package catppuccin-theme
|
|
:custom-face
|
|
;; surface2
|
|
(region ((t (:background "#5b6078")))))
|
|
|
|
(defun load-theme-with-solaire ()
|
|
(load-theme 'catppuccin-macchiato t)
|
|
(solaire-global-mode)
|
|
(when (daemonp)
|
|
(remove-hook 'server-after-make-frame-hook #'load-theme-with-solaire)))
|
|
|
|
(use-package solaire-mode
|
|
:demand t
|
|
:custom
|
|
(solaire-mode-real-buffer-fn (lambda ()
|
|
(and (solaire-mode-real-buffer-p)
|
|
(or (custom-theme-enabled-p 'gruvbox)
|
|
(not (member 'minimap-sb-mode
|
|
local-minor-modes))))))
|
|
:config
|
|
(if (daemonp)
|
|
(add-hook 'server-after-make-frame-hook #'load-theme-with-solaire)
|
|
(load-theme-with-solaire)))
|
|
|
|
(use-package emacs-everywhere
|
|
:load-path "~/emacs-everywhere"
|
|
:commands emacs-everywhere)
|
|
|
|
(use-package tool-bar
|
|
:ensure nil
|
|
:config
|
|
(tool-bar-mode 0))
|
|
(use-package menu-bar
|
|
:ensure nil
|
|
:config
|
|
(menu-bar-mode 0))
|
|
(use-package scroll-bar
|
|
:ensure nil
|
|
:config
|
|
(scroll-bar-mode 0))
|
|
|
|
(setq pixel-scroll-precision-large-scroll-height 40)
|
|
(pixel-scroll-precision-mode)
|
|
|
|
(setcar mouse-wheel-scroll-amount 3)
|
|
|
|
(setq server-client-instructions nil
|
|
scroll-step 1
|
|
scroll-margin 3
|
|
scroll-conservatively 9999
|
|
python-indent-guess-indent-offset nil
|
|
read-file-name-completion-ignore-case t
|
|
read-buffer-completion-ignore-case t
|
|
completion-ignore-case t
|
|
sentence-end-double-space nil)
|
|
|
|
(setq-default c-basic-offset 4
|
|
tab-width 4
|
|
fill-column 80)
|
|
(add-hook 'python-mode-hook (lambda () (setq tab-width 4)))
|
|
|
|
(global-hl-line-mode)
|
|
(defun my-inhibit-hl-line-mode ()
|
|
(setq-local global-hl-line-mode nil))
|
|
|
|
(defun my-relative-linenum ()
|
|
(setq display-line-numbers 'relative))
|
|
(dolist (hook '(prog-mode-hook
|
|
text-mode-hook
|
|
conf-mode-hook
|
|
org-mode-hook))
|
|
(add-hook hook #'my-relative-linenum))
|
|
|
|
(defun my-use-spaces-for-indent ()
|
|
(setq indent-tabs-mode nil))
|
|
(dolist (hook '(emacs-lisp-mode-hook
|
|
lisp-mode-hook
|
|
scheme-mode-hook
|
|
clojure-mode-hook))
|
|
(add-hook hook #'my-use-spaces-for-indent))
|
|
|
|
(defun scroll-down-3 ()
|
|
"Scrolls down by 3"
|
|
(interactive)
|
|
(scroll-down 3))
|
|
|
|
(defun scroll-up-3 ()
|
|
"Scrolls up by 3"
|
|
(interactive)
|
|
(scroll-up 3))
|
|
|
|
(defun frame-make-detect-term (frame)
|
|
"Check when frames are made in order to make terminal-only configurations"
|
|
(unless (display-graphic-p frame)
|
|
(xterm-mouse-mode)
|
|
(global-set-key (kbd "<mouse-4>") #'scroll-down-3)
|
|
(global-set-key (kbd "<mouse-5>") #'scroll-up-3)
|
|
(setq after-make-frame-functions
|
|
(remove 'frame-make-detect-term after-make-frame-functions))))
|
|
|
|
(add-to-list 'after-make-frame-functions #'frame-make-detect-term)
|
|
|
|
(defun my-sudo-edit ()
|
|
"Edit current file as root."
|
|
(interactive)
|
|
(unless (and buffer-file-name
|
|
(file-writable-p buffer-file-name))
|
|
(find-alternate-file (concat "/sudo:root@localhost:" buffer-file-name))))
|
|
|
|
(add-to-list 'auto-mode-alist '("\\.yuck\\'" . lisp-mode))
|
|
(add-to-list 'auto-mode-alist '("flake\\.lock\\'" . js-json-mode))
|
|
|
|
(with-current-buffer "*scratch*"
|
|
(cd "~/"))
|