update
This commit is contained in:
473
modules/home-manager/emacs/init.el
Normal file
473
modules/home-manager/emacs/init.el
Normal file
@@ -0,0 +1,473 @@
|
||||
;; 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.
|
||||
)
|
||||
Reference in New Issue
Block a user