474 lines
12 KiB
EmacsLisp
474 lines
12 KiB
EmacsLisp
;; performance enhancements
|
|
(setq gc-cons-threshold #x40000000)
|
|
|
|
(setq read-process-output-max (* 1024 1024 4))
|
|
|
|
;; EMACS ----------
|
|
(use-package emacs
|
|
:ensure nil
|
|
:custom
|
|
(column-number-mode t)
|
|
(auto-save-default nil)
|
|
(create-lockfiles nil)
|
|
(display-line-numbers-type 'relative)
|
|
(global-auto-revert-non-file-buffers t)
|
|
(history-length 25)
|
|
(inhibit-startup-message t)
|
|
(initial-scratch-message "")
|
|
(ispell-dictionary "en_US")
|
|
(make-backup-files nil)
|
|
(pixel-scroll-precision-mode t)
|
|
(pixel-scroll-precision-use-momentum nil)
|
|
(ring-bell-function 'ignore)
|
|
(split-width-threshold 300)
|
|
(switch-to-buffer-obey-display-actions t)
|
|
(tab-width 4)
|
|
(treesit-font-lock-level 4)
|
|
(truncate-lines t)
|
|
(use-dialog-box nil)
|
|
(use-short-answers t)
|
|
|
|
;; recommended from vertico
|
|
(context-menu-mode t)
|
|
(enable-recursive-minibuffers t)
|
|
(read-extended-command-predicate #'command-completion-default-include-p)
|
|
(minibuffer-prompt-properties
|
|
'(read-only t cursor-intangible t face minibuffer-prompt))
|
|
|
|
;; recommended from corfu
|
|
(tab-always-indent 'complete)
|
|
(text-mode-ispell-word-completion nil)
|
|
|
|
:hook
|
|
(prog-mode . display-line-numbers-mode)
|
|
|
|
:config
|
|
(set-face-attribute 'default nil :family "JetBrainsMono Nerd Font" :height 120)
|
|
|
|
:init
|
|
(tool-bar-mode -1)
|
|
(menu-bar-mode -1)
|
|
(scroll-bar-mode -1)
|
|
(global-hl-line-mode 1)
|
|
(global-auto-revert-mode 1)
|
|
(indent-tabs-mode -1)
|
|
(recentf-mode 1)
|
|
(savehist-mode 1)
|
|
(save-place-mode 1)
|
|
(winner-mode 1)
|
|
(xterm-mouse-mode 1)
|
|
(file-name-shadow-mode 1))
|
|
|
|
;; THEMES AND MODELINE ----------
|
|
(use-package modus-themes
|
|
:ensure t
|
|
:config
|
|
(load-theme 'modus-vivendi t))
|
|
|
|
(use-package doom-modeline
|
|
:ensure t
|
|
:config
|
|
(display-battery-mode t)
|
|
(display-time-mode t)
|
|
:config (doom-modeline-mode 1))
|
|
|
|
(use-package nerd-icons
|
|
:ensure t)
|
|
|
|
(use-package nerd-icons-dired
|
|
:ensure t
|
|
:hook
|
|
(dired-mode . nerd-icons-dired-mode))
|
|
|
|
;; EVIL MODE ----------
|
|
(use-package evil
|
|
:ensure t
|
|
:defer t
|
|
:hook
|
|
(after-init . evil-mode)
|
|
:init
|
|
(setq evil-want-integration t)
|
|
(setq evil-want-keybinding nil)
|
|
(setq evil-want-C-u-scroll t)
|
|
(setq evil-want-C-u-delete t)
|
|
:config
|
|
(evil-set-undo-system 'undo-tree)
|
|
(evil-set-leader 'normal (kbd "SPC"))
|
|
(evil-set-leader 'visual (kbd "SPC")))
|
|
|
|
(use-package evil-collection
|
|
:after evil
|
|
:ensure t
|
|
:config
|
|
(evil-collection-init))
|
|
|
|
(use-package evil-surround
|
|
:after evil
|
|
:ensure t
|
|
:config
|
|
(global-evil-surround-mode 1))
|
|
|
|
;; MINAD STACK -----------
|
|
(use-package vertico
|
|
:ensure t
|
|
:config
|
|
(setq vertico-cycle t)
|
|
(setq vertico-resize t)
|
|
(vertico-mode))
|
|
|
|
(use-package orderless
|
|
:ensure t
|
|
:config
|
|
(setq completion-styles '(orderless basic))
|
|
(setq completion-category-overrides '((file (styles partial-completion))))
|
|
(setq completion-category-defaults nil)
|
|
(setq completion-pcm-leading-wildcard t))
|
|
|
|
(use-package marginalia
|
|
:ensure t
|
|
:config
|
|
(marginalia-mode))
|
|
|
|
(use-package consult
|
|
:ensure t)
|
|
|
|
(use-package embark
|
|
:ensure t)
|
|
|
|
(use-package embark-consult
|
|
:ensure t
|
|
:hook
|
|
(embark-collect-mode . consult-preview-at-point-mode))
|
|
|
|
(use-package corfu
|
|
:ensure t
|
|
:config
|
|
(setq corfu-cycle t)
|
|
(setq corfu-quit-at-boundary nil)
|
|
(setq corfu-quit-no-match t)
|
|
(setq corfu-preselect 'prompt)
|
|
(setq corfu-on-exact-match nil)
|
|
(setq corfu-auto t)
|
|
(setq corfu-auto-prefix 2)
|
|
(setq corfu-popupinfo-delay 0.5)
|
|
(global-corfu-mode)
|
|
(corfu-history-mode)
|
|
(corfu-popupinfo-mode))
|
|
|
|
(use-package nerd-icons-corfu
|
|
:ensure t
|
|
:after corfu
|
|
:config (add-to-list 'corfu-margin-formatters #'nerd-icons-corfu-formatter))
|
|
|
|
(use-package cape
|
|
:ensure t
|
|
:bind ("C-c p" . cape-prefix-map)
|
|
:config
|
|
(add-hook 'completion-at-point-functions #'cape-abbrev)
|
|
(add-hook 'completion-at-point-functions #'cape-dict)
|
|
(add-hook 'completion-at-point-functions #'cape-file)
|
|
(add-hook 'completion-at-point-functions #'cape-elisp-block)
|
|
(add-hook 'completion-at-point-functions #'cape-keyword)
|
|
(add-hook 'completion-at-point-functions #'cape-tex))
|
|
|
|
(use-package tempel
|
|
:ensure t
|
|
:custom
|
|
(defun tempel-setup-capf ()
|
|
(setq-local completion-at-point-functions
|
|
(cons #'tempel-expand
|
|
completion-at-point-functions)))
|
|
(add-hook 'conf-mode-hook 'tempel-setup-capf)
|
|
(add-hook 'prog-mode-hook 'tempel-setup-capf)
|
|
(add-hook 'text-mode-hook 'tempel-setup-capf))
|
|
|
|
(use-package tempel-collection
|
|
:ensure t)
|
|
|
|
(use-package eldoc
|
|
:ensure nil
|
|
:init
|
|
(global-eldoc-mode))
|
|
|
|
;; LINTING ------------
|
|
(use-package flycheck
|
|
:ensure t
|
|
:config
|
|
(global-flycheck-mode))
|
|
|
|
(use-package consult-flycheck
|
|
:ensure t)
|
|
|
|
(use-package flycheck-eglot
|
|
:ensure t
|
|
:after (flycheck eglot)
|
|
:config
|
|
(global-flycheck-eglot-mode 1))
|
|
|
|
;; LANGUAGE MODES -------
|
|
(use-package treesit-auto
|
|
:ensure t
|
|
:config
|
|
(treesit-auto-add-to-auto-mode-alist 'all)
|
|
(global-treesit-auto-mode))
|
|
|
|
(use-package nix-ts-mode
|
|
:ensure t
|
|
:mode "\\.nix\\'")
|
|
|
|
;; LSP ---------
|
|
(use-package eglot
|
|
:ensure t
|
|
:defer t
|
|
:hook ((nix-ts-mode . eglot-ensure)
|
|
(go-ts-mode . eglot-ensure)
|
|
(typescript-ts-mode . eglot-ensure)))
|
|
|
|
(use-package eglot-booster
|
|
:ensure t
|
|
:after eglot
|
|
:config
|
|
(eglot-booster-mode))
|
|
|
|
(use-package markdown-mode
|
|
:ensure t)
|
|
|
|
;; TOOLS ---------
|
|
(use-package magit
|
|
:ensure t
|
|
:defer t)
|
|
|
|
(use-package vterm
|
|
:ensure t)
|
|
|
|
(use-package undo-tree
|
|
:ensure t
|
|
:config
|
|
(setq undo-tree-visualizer-timestamps t
|
|
undo-tree-visualizer-diff t
|
|
undo-limit 800000
|
|
undo-strong-limit 12000000
|
|
undo-outer-limit 120000000)
|
|
(setq undo-tree-history-directory-alist '(("." . "~/.config/emacs/.cache/undo")))
|
|
(global-undo-tree-mode))
|
|
|
|
|
|
;; PATH STUFF --------
|
|
(use-package exec-path-from-shell
|
|
:ensure t
|
|
:init
|
|
(exec-path-from-shell-initialize))
|
|
|
|
(use-package envrc
|
|
:ensure t
|
|
:init
|
|
(setq envrc-show-summary-in-minibuffer nil)
|
|
:hook
|
|
(after-init . envrc-global-mode))
|
|
|
|
;; ORG ----------
|
|
(use-package org
|
|
:ensure nil
|
|
:defer t
|
|
:custom
|
|
(org-tags-column 0)
|
|
(org-return-follows-link t)
|
|
(org-hide-emphasis-markers t)
|
|
(org-log-into-drawer t)
|
|
(org-log-done 'time)
|
|
(org-agenda-span 'day)
|
|
(org-todo-keywords
|
|
'((sequence "TODO(t)" "NEXT(n)" "PROG(p)" "INTR(i)" "WAIT(w)" "SOMEDAY(s)" "|" "DONE(d)" "CANCELLED(c)")))
|
|
(org-capture-templates
|
|
`(("i" "Inbox" entry (file+headline "todo.org" "Inbox")
|
|
,(concat "* TODO %?\n"
|
|
"%U"))
|
|
("j" "Journal" entry (file denote-journal-path-to-new-or-existing-entry)
|
|
"* %U %?\n%i\n%a"
|
|
:kill-buffer t
|
|
:empty-lines 1)
|
|
("@" "Inbox [email]" entry (file+headline "todo.org" "Inbox")
|
|
,(concat "* TODO Process \"%a\" %?\n"
|
|
"%U"))))
|
|
(org-refile-use-outline-path 'file)
|
|
(org-outline-path-complete-in-steps nil)
|
|
(org-refile-targets '((nil :maxlevel . 9)
|
|
(org-agenda-files :maxlevel . 9)))
|
|
(org-agenda-skip-scheduled-if-done t)
|
|
(org-agenda-skip-deadline-if-done t)
|
|
(org-agenda-include-deadlines t)
|
|
(org-agenda-include-diary t)
|
|
(org-agenda-block-separator nil)
|
|
(org-agenda-compact-blocks t)
|
|
(org-agenda-start-with-log-mode t)
|
|
:config
|
|
(setq org-directory "~/org")
|
|
(setq org-agenda-files (list "todo.org"))
|
|
:hook
|
|
(org-mode . org-indent-mode)
|
|
:init
|
|
(require 'org-tempo))
|
|
|
|
(use-package denote
|
|
:ensure t
|
|
:hook
|
|
((dired-mode . denote-dired-mode)
|
|
(text-mode . denote-fontify-links-mode))
|
|
:bind
|
|
(("C-c n n" . denote)
|
|
("C-c n r" . denote-rename-file)
|
|
("C-c n l" . denote-link)
|
|
("C-c n b" . denote-backlinks)
|
|
("C-c n d" . denote-dired))
|
|
:config
|
|
(setq denote-directory (expand-file-name "~/org/note"))
|
|
(denote-rename-buffer-mode 1))
|
|
|
|
(use-package consult-denote
|
|
:ensure t
|
|
:bind
|
|
(("C-c n f" . consult-denote-find)
|
|
("C-c n g" . consult-denote-grep))
|
|
:config
|
|
(consult-denote-mode 1))
|
|
|
|
(use-package denote-journal
|
|
:ensure t
|
|
:commands (denote-journal-new-entry
|
|
denote-journal-new-or-existing-entry
|
|
denote-journal-link-or-create-entry )
|
|
:hook (calendar-mode . denote-journal-calendar-mode)
|
|
:config
|
|
(setq denote-journal-directory
|
|
(expand-file-name "journal" denote-directory))
|
|
(setq denote-journal-keyword "journal")
|
|
(setq denote-journal-title-format 'day-date-month-year))
|
|
|
|
(use-package org-superstar
|
|
:ensure t
|
|
:hook
|
|
(org-mode . org-superstar-mode))
|
|
|
|
(use-package org-super-agenda
|
|
:ensure t
|
|
:custom
|
|
(org-super-agenda-groups
|
|
'(
|
|
(:name "Today"
|
|
:time-grid t
|
|
:date today
|
|
:todo "TODAY"
|
|
:scheduled today
|
|
:order 1)
|
|
(:name "Next Items"
|
|
:todo "NEXT"
|
|
:order 2)
|
|
(:name "Due Today"
|
|
:deadline today
|
|
:order 3)
|
|
(:name "Due Soon"
|
|
:deadline future
|
|
:order 4)
|
|
(:name "Overdue"
|
|
:deadline past
|
|
:order 5)
|
|
(:name "Scheduled Soon"
|
|
:scheduled future
|
|
:order 6)
|
|
(:name "Waiting"
|
|
:todo "WAIT"
|
|
:order 7)
|
|
(:habit t
|
|
:order 8)
|
|
(:name "Project"
|
|
:category "Project"
|
|
:order 9)
|
|
)))
|
|
|
|
;; KEYBINDS ---------
|
|
|
|
(use-package which-key
|
|
:ensure nil
|
|
:config
|
|
(which-key-mode))
|
|
|
|
(use-package general
|
|
:ensure t
|
|
:config
|
|
(general-evil-setup t)
|
|
|
|
(general-define-key
|
|
:states 'normal
|
|
"] d" '(next-error :wk "Goto next error")
|
|
"[ d" '(previous-error :wk "Goto prev error")
|
|
"] c" '(diff-hl-next-hunk :wk "Goto next hunk")
|
|
"[ c" '(diff-hl-previous-hunk :wk "Goto prev hunk")
|
|
"K" '(eldoc :wk "Describe"))
|
|
|
|
(general-create-definer my-leader-def
|
|
:states '(normal insert visual motion emacs)
|
|
:keymaps 'override
|
|
:prefix "SPC"
|
|
:global-prefix "C-SPC")
|
|
|
|
(my-leader-def
|
|
"f" '(:ignore t :wk "Find")
|
|
"f c" '((lambda () (interactive) (find-file "~/.config/emacs/init.el")) :wk "Edit emacs config")
|
|
"f r" '(consult-recent-file :wk "Recent files")
|
|
"f f" '(consult-find :wk "Find Files")
|
|
"f g" '(consult-ripgrep :wk "Ripgrep search in files")
|
|
"f l" '(consult-line :wk "Find line")
|
|
"f i" '(consult-imenu :wk "Imenu buffer locations"))
|
|
|
|
(my-leader-def
|
|
"c" '(:ignore t :wk "Code")
|
|
"c a" '(eglot-code-actions :wk "Code actions"))
|
|
|
|
(my-leader-def
|
|
"h" '(:ignore t :wk "Help")
|
|
"h v" '(describe-variable :wk "Describe variable")
|
|
"h f" '(describe-function :wk "Describe function")
|
|
"h k" '(describe-key :wk "Describe key"))
|
|
|
|
(my-leader-def
|
|
"p" '(:ignore t :wk "Project")
|
|
"p b" '(consult-project-buffer :wk "Project buffers")
|
|
"p p" '(project-switch-project :wk "Project switch")
|
|
"p f" '(project-find-file :wk "Project find file")
|
|
"p g" '(project-find-regexp :wk "Project grep file")
|
|
"p k" '(project-kill-buffers :wk "Project kill buffers")
|
|
"p d" '(project-dired :wk "Project dired"))
|
|
|
|
(my-leader-def
|
|
"x" '(:ignore t :wk "Flymake")
|
|
"x x" '(consult-flycheck :wk "Show diagnostics"))
|
|
|
|
(my-leader-def
|
|
"g" '(:ignore t :wk "Git")
|
|
"g g" '(magit-status :wk "Magit status")
|
|
"g l" '(magit-log-current :wk "Magit log"))
|
|
|
|
(my-leader-def
|
|
"u" '(undo-tree-visualize :wk "Undo-tree")))
|
|
|
|
(use-package diff-hl
|
|
:ensure t
|
|
:config
|
|
(global-diff-hl-mode))
|
|
|
|
(provide 'init)
|
|
(custom-set-variables
|
|
;; custom-set-variables 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.
|
|
'(custom-safe-themes
|
|
'("77f281064ea1c8b14938866e21c4e51e4168e05db98863bd7430f1352cab294a"
|
|
default)))
|
|
(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.
|
|
)
|