.emacs.d/init.el
2022-12-24 15:52:45 -08:00

497 lines
14 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)
(use-package gcmh
:demand t
:config
(gcmh-mode))
(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" user-emacs-directory)
custom-file (expand-file-name "custom.el" temporary-file-directory))
;; (when (file-readable-p custom-file)
;; (load custom-file))
(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-tree
:hook (evil-local-mode . turn-on-undo-tree-mode))
(use-package evil
:demand t
:custom
(select-enable-clipboard nil "Disable automatic clipboard=unnamedplus")
(evil-want-keybinding nil "Necessary for evil-collection")
(evil-want-Y-yank-to-eol t "Make Y behave like it should")
(evil-want-C-u-scroll t "Scroll with C-u")
(evil-want-C-h-delete t "Delete with C-h")
(evil-want-C-w-in-emacs-state t "Allow C-w movement in Emacs windows")
(evil-undo-system 'undo-tree "Undo with undo-tree")
:config
(evil-mode)
(evil-select-search-module 'evil-search-module 'evil-search)
(defadvice evil-force-normal-state (after evil-search-remove-hl activate)
(evil-ex-nohighlight))
(evil-global-set-key 'insert (kbd "C-S-h") #'help-command))
(use-package evil-collection
:demand t
:after evil
:custom
(evil-collection-setup-minibuffer t)
:config
(evil-collection-init))
(use-package evil-leader
:demand t
:after evil
:config
(evil-leader/set-leader "<SPC>")
(evil-leader/set-key
"u" #'universal-argument
"bb" #'switch-to-buffer
"bd" #'evil-delete-buffer
"fd" #'dirvish-dwim
"fq" #'dirvish-quit
"ff" #'find-file
"ft" #'treemacs
"fs" #'evil-write
"f'" #'bookmark-jump
"gg" #'magit-status
"mm" #'minimap-mode
"ps" (lambda ()
(interactive)
(package-refresh-contents)
(auto-package-update-now-async))
"qq" #'evil-quit
"qk" #'kill-emacs)
(global-evil-leader-mode))
(use-package evil-surround
:demand t
:after evil
:config
(global-evil-surround-mode))
(use-package evil-commentary
:demand t
:after evil
:config
(evil-commentary-mode))
(use-package evil-numbers
:demand t
:after evil
:config
(evil-define-key '(normal visual) 'global "g+" #'evil-numbers/inc-at-pt)
(evil-define-key '(normal visual) 'global "g-" #'evil-numbers/dec-at-pt)
(evil-define-key '(normal visual) 'global "g=+" #'evil-numbers/inc-at-pt-incremental)
(evil-define-key '(normal visual) 'global "g=-" #'evil-numbers/inc-at-pt-incremental))
(use-package evil-replace-with-register
:demand t
:after evil
:custom
(evil-replace-with-register-indent t)
:config
(evil-replace-with-register-install))
(use-package evil-org
:after evil
:hook org-mode
:config
(require 'evil-org-agenda)
(evil-org-agenda-set-keys))
(use-package evil-goggles
:demand t
:after evil
:custom
(evil-goggles-duration 0.12 "Decrease the duration a tiny bit")
(evil-goggles-pulse t)
:config
(evil-goggles-use-diff-faces)
(evil-goggles-mode))
(use-package evil-terminal-cursor-changer)
(use-package hydra
:config
(defhydra hydra-evil-c-w (evil-normal-state-map "C-w")
"C-w"
("h" #'evil-window-left "left")
("j" #'evil-window-down "down")
("k" #'evil-window-up "up")
("l" #'evil-window-right "right")
("C-w" #'evil-window-next "next")
("+" #'evil-window-increase-height "+height")
("-" #'evil-window-decrease-height "-height")
(">" #'evil-window-increase-width "+width")
("<" #'evil-window-decrease-width "-width")))
(use-package lispy)
(use-package lispyville
:hook (emacs-lisp-mode
eval-expression-minibuffer-setup
ielm-mode
lisp-mode
lisp-interaction-mode
scheme-mode
clojure-mode)
:config
(lispyville-set-key-theme
'(operators
c-w
slurp/barf-cp
commentary
text-objects
additional
additional-insert
mark
(prettify insert)
(escape insert emacs)
(additional-movement normal visual motion)))
(evil-define-key 'normal lispyville-mode-map (kbd "C-v") nil)
(evil-define-key 'insert lispyville-mode-map (kbd "DEL") #'lispy-delete-backward)
(evil-define-key 'insert lispyville-mode-map (kbd "C-h") #'lispy-delete-backward)
(evil-define-key 'insert lispyville-mode-map "(" #'lispy-parens)
(evil-define-key 'insert lispyville-mode-map ")" #'lispy-right-nostring)
(evil-define-key 'insert lispyville-mode-map "\"" #'lispy-quotes)
(evil-define-key 'normal lispyville-mode-map ";" nil)
(evil-define-key 'normal lispyville-mode-map (kbd "C-;") #'lispy-comment)
(evil-define-key 'visual lispyville-mode-map "iF" #'special-lispy-flow))
(use-package treesit
:ensure nil
: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 (prog-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
(evil-define-key 'insert minibuffer-local-map (kbd "C-j") #'vertico-next)
(evil-define-key 'insert minibuffer-local-map (kbd "C-k") #'vertico-previous)
(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-evil
:demand t
:after treemacs)
(use-package treemacs-all-the-icons
:demand t
:after treemacs
:config
(treemacs-load-theme 'all-the-icons))
(use-package doom-modeline
: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.5)
(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)
:config
;; (setq org-format-latex-options (plist-put org-format-latex-options :scale 2.0))
(defhydra hydra-org-evil-shiftmove (org-mode-map "C-c")
"S+arrows"
("h" #'org-shiftleft "left")
("j" #'org-shiftdown "down")
("k" #'org-shiftup "up")
("l" #'org-shiftright "right")))
(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 json-mode
:mode "\\.js\\(?:on\\|[hl]int\\(?:rc\\)?\\)\\'")
(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 . evil-emacs-state)
(minimap-sb-mode . turn-on-solaire-mode))
:config
(with-eval-after-load 'evil
(defadvice evil-quit (after evil-quit-remove-minimap activate)
(let ((windows (window-list nil 0)))
(when (and (eq (length windows) 1)
(with-current-buffer (window-buffer (car windows))
(member 'minimap-sb-mode local-minor-modes)))
(if (daemonp)
(delete-frame)
(kill-emacs)))))))
(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
(evil-define-key 'insert vterm-mode-map (kbd "C-h") #'vterm--self-insert)
(evil-define-key 'insert vterm-mode-map (kbd "C-S-h") #'help-command))
(use-package elfeed
:commands (elfeed elfeed-update)
:custom
(elfeed-feeds '(("https://archlinux.org/feeds/news/" arch-linux))))
(use-package xkcd
:commands xkcd
:config
(evil-set-initial-state 'xkcd-mode 'emacs))
(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)
(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)
(add-to-list 'default-frame-alist '(font . "JetbrainsMono Nerd Font-10.5"))
(setcar mouse-wheel-scroll-amount 3)
(setq server-client-instructions nil
scroll-step 1
scroll-margin 3
scroll-conservatively 9999
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)
(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)
(etcc-on)
(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)
(add-to-list 'auto-mode-alist '("\\.yuck\\'" . lisp-mode))
(add-to-list 'default-frame-alist '(alpha-background . 0.94))
(with-current-buffer "*scratch*"
(cd "~/"))