feat: initial unpolished/unfinished version
This commit is contained in:
758
init.el
Normal file
758
init.el
Normal file
@@ -0,0 +1,758 @@
|
||||
;;; init.el --- Emacs-Kicks --- A feature rich Emacs config for (neo)vi(m)mers -*- lexical-binding: t; -*-
|
||||
|
||||
;;; Commentary:
|
||||
;; - [ ] Ask for permission on official kickstarter.nvim
|
||||
;; - [ ] Intro doc
|
||||
;; - [ ] Assumption that user already knows vim
|
||||
;; - [ ] Document init.el
|
||||
;; - [ ] Create README.org
|
||||
;; - [ ] Create optional nerd fonts option
|
||||
;; - [ ] Decide either nerdtree or treemacs or nothing (just dired)...
|
||||
|
||||
|
||||
;; =====================================================================
|
||||
;; ==================== READ THIS BEFORE CONTINUING ====================
|
||||
;; =====================================================================
|
||||
;; ======== .-----. ========
|
||||
;; ======== .----------------------. | === | ========
|
||||
;; ======== |.-""""""""""""""""""-.| |-----| ========
|
||||
;; ======== || || | === | ========
|
||||
;; ======== || EMACS KICK || |-----| ========
|
||||
;; ======== || || | === | ========
|
||||
;; ======== || || |-----| ========
|
||||
;; ======== ||M-x || |:::::| ========
|
||||
;; ======== |'-..................-'| |____o| ========
|
||||
;; ======== `"")----------------(""` ___________ ========
|
||||
;; ======== /::::::::::| |::::::::::\ \ no mouse \ ========
|
||||
;; ======== /:::========| |==hjkl==:::\ \ required \ ========
|
||||
;; ======== '""""""""""""' '""""""""""""' '""""""""""' ========
|
||||
;; ======== ========
|
||||
;; =====================================================================
|
||||
;; =====================================================================
|
||||
|
||||
;; What is Emacs Kick?
|
||||
;;
|
||||
;; Emacs Kick is *not* a distribution.
|
||||
;;
|
||||
;; Emacs Kick is a starting point for your own configuration.
|
||||
;; The goal is that you can read every line of code, top-to-bottom, understand
|
||||
;; what your configuration is doing, and modify it to suit your needs.
|
||||
;;
|
||||
;; Once you've done that, you can start exploring, configuring and tinkering to
|
||||
;; make Neovim your own! That might mean leaving Emacs Kick just the way it is for a while
|
||||
;; or immediately breaking it into modular pieces. It's up to you!
|
||||
;;
|
||||
;; If you don't know anything about Lua, I recommend taking some time to read through
|
||||
;; a guide. One possible example which will only take 10-15 minutes:
|
||||
;; - https://learnxinyminutes.com/docs/lua/
|
||||
;;
|
||||
;; After understanding a bit more about Lua, you can use `:help lua-guide` as a
|
||||
;; reference for how Neovim integrates Lua.
|
||||
;; - :help lua-guide
|
||||
;; - (or HTML version): https://neovim.io/doc/user/lua-guide.html
|
||||
;;
|
||||
;; Emacs Kick Guide:
|
||||
;;
|
||||
;; TODO: The very first thing you should do is to run the command `:Tutor` in Neovim.
|
||||
;;
|
||||
;; If you don't know what this means, type the following:
|
||||
;; - <escape key>
|
||||
;; - :
|
||||
;; - Tutor
|
||||
;; - <enter key>
|
||||
;;
|
||||
;; (If you already know the Neovim basics, you can skip this step.)
|
||||
;;
|
||||
;; Once you've completed that, you can continue working through **AND READING** the rest
|
||||
;; of the kickstart init.lua.
|
||||
;;
|
||||
;; Next, run AND READ `:help`.
|
||||
;; This will open up a help window with some basic information
|
||||
;; about reading, navigating and searching the builtin help documentation.
|
||||
;;
|
||||
;; This should be the first place you go to look when you're stuck or confused
|
||||
;; with something. It's one of my favorite Neovim features.
|
||||
;;
|
||||
;; MOST IMPORTANTLY, we provide a keymap "<space>sh" to [s]earch the [h]elp documentation,
|
||||
;; which is very useful when you're not exactly sure of what you're looking for.
|
||||
;;
|
||||
;; I have left several `:help X` comments throughout the init.lua
|
||||
;; These are hints about where to find more information about the relevant settings,
|
||||
;; plugins or Neovim features used in Emacs Kick.
|
||||
;;
|
||||
;; NOTE: Look for lines like this
|
||||
;;
|
||||
;; Throughout the file. These are for you, the reader, to help you understand what is happening.
|
||||
;; Feel free to delete them once you know what you're doing, but they should serve as a guide
|
||||
;; for when you are first encountering a few different constructs in your Neovim config.
|
||||
;;
|
||||
;; If you experience any errors while trying to install kickstart, run `:checkhealth` for more info.
|
||||
;;
|
||||
;; I hope you enjoy your Neovim journey,
|
||||
;; - TJ
|
||||
;;
|
||||
;; P.S. You can delete this when you're done too. It's your config now! :)
|
||||
|
||||
|
||||
;;; Code:
|
||||
|
||||
;; Some performance Hacks
|
||||
(setq gc-cons-threshold #x40000000)
|
||||
(setq read-process-output-max (* 1024 1024 4))
|
||||
|
||||
|
||||
;; Adding the MELPA packages repository
|
||||
(require 'package)
|
||||
(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t)
|
||||
(package-initialize)
|
||||
|
||||
(defcustom ek-use-nerd-fonts t
|
||||
"Configuration for using Nerd Fonts Symbols."
|
||||
:type 'boolean
|
||||
:group 'appearance)
|
||||
|
||||
;;; EMACS
|
||||
(use-package emacs
|
||||
:ensure nil
|
||||
:bind
|
||||
(("M-o" . other-window)
|
||||
("C-x C-b" . ibuffer))
|
||||
:custom
|
||||
(column-number-mode t)
|
||||
(auto-save-default nil)
|
||||
(create-lockfiles nil)
|
||||
(delete-by-moving-to-trash t)
|
||||
(delete-selection-mode 1)
|
||||
(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)
|
||||
(switch-to-prev-buffer-skip-regexp "\*[^*]+\*")
|
||||
(switch-to-next-buffer-skip-regexp "\*[^*]+\*")
|
||||
(tab-always-indent 'complete) ;; TAB serves as M-TAB to completion
|
||||
(tab-width 4)
|
||||
(treesit-font-lock-level 4)
|
||||
(truncate-lines t)
|
||||
(use-dialog-box nil)
|
||||
(use-short-answers t)
|
||||
(warning-minimum-level :emergency)
|
||||
:hook
|
||||
(prog-mode . display-line-numbers-mode)
|
||||
:config
|
||||
|
||||
;; TODO: themessss
|
||||
(load-theme 'modus-vivendi-tinted)
|
||||
|
||||
;; TODO: explain transparency
|
||||
(defun on-after-init ()
|
||||
(unless (display-graphic-p (selected-frame))
|
||||
(set-face-background 'default "unspecified-bg" (selected-frame))))
|
||||
(add-hook 'window-setup-hook 'on-after-init)
|
||||
|
||||
;; Configure fonts per OS
|
||||
;; Explain GUI
|
||||
(set-face-attribute 'default nil :height 100)
|
||||
(when (eq system-type 'darwin)
|
||||
(setq mac-command-modifier 'meta)
|
||||
(set-face-attribute 'default nil :height 140))
|
||||
|
||||
;; Save manual customizations to other file than init.el
|
||||
(setq custom-file (locate-user-emacs-file "custom-vars.el"))
|
||||
(load custom-file 'noerror 'nomessage)
|
||||
|
||||
:init
|
||||
(tool-bar-mode -1)
|
||||
(menu-bar-mode -1)
|
||||
(when scroll-bar-mode
|
||||
(scroll-bar-mode -1))
|
||||
|
||||
(global-auto-revert-mode 1)
|
||||
(indent-tabs-mode -1)
|
||||
(recentf-mode 1)
|
||||
(savehist-mode 1)
|
||||
(save-place-mode 1)
|
||||
(winner-mode)
|
||||
(xterm-mouse-mode 1)
|
||||
(file-name-shadow-mode 1)
|
||||
|
||||
(modify-coding-system-alist 'file "" 'utf-8)
|
||||
|
||||
(select-frame-set-input-focus (selected-frame))
|
||||
(toggle-frame-maximized)
|
||||
|
||||
(add-hook 'after-init-hook
|
||||
(lambda ()
|
||||
(message "Emacs has fully loaded. This code runs after startup.")
|
||||
|
||||
(with-current-buffer (get-buffer-create "*scratch*")
|
||||
(insert (format "
|
||||
;; Loading time : %s
|
||||
;; Packages : %s
|
||||
"
|
||||
(emacs-init-time)
|
||||
(number-to-string (length package-activated-list)))))))
|
||||
|
||||
)
|
||||
|
||||
;;; WINDOW
|
||||
(use-package window
|
||||
:ensure nil
|
||||
:custom
|
||||
(display-buffer-alist
|
||||
'(
|
||||
;; ("\\*.*e?shell\\*"
|
||||
;; (display-buffer-in-side-window)
|
||||
;; (window-height . 0.25)
|
||||
;; (side . bottom)
|
||||
;; (slot . -1))
|
||||
|
||||
;; ("\\*\\(Backtrace\\|Warnings\\|Compile-Log\\|[Hh]elp\\|Messages\\|Bookmark List\\|Ibuffer\\|Occur\\|eldoc.*\\)\\*"
|
||||
;; (display-buffer-in-side-window)
|
||||
;; (window-height . 0.25)
|
||||
;; (side . bottom)
|
||||
;; (slot . 0))
|
||||
|
||||
("\\*\\(lsp-help\\)\\*"
|
||||
(display-buffer-in-side-window)
|
||||
(window-height . 0.25)
|
||||
(side . bottom)
|
||||
(slot . 0))
|
||||
|
||||
("\\*\\(Flymake diagnostics\\|xref\\|ivy\\|Swiper\\|Completions\\)"
|
||||
(display-buffer-in-side-window)
|
||||
(window-height . 0.25)
|
||||
(side . bottom)
|
||||
(slot . 1))
|
||||
)))
|
||||
|
||||
;;; DIRED
|
||||
(use-package dired
|
||||
:ensure nil
|
||||
:custom
|
||||
(dired-listing-switches "-lah --group-directories-first")
|
||||
(dired-dwim-target t)
|
||||
(dired-guess-shell-alist-user
|
||||
'(("\\.\\(png\\|jpe?g\\|tiff\\)" "feh" "xdg-open" "open")
|
||||
("\\.\\(mp[34]\\|m4a\\|ogg\\|flac\\|webm\\|mkv\\)" "mpv" "xdg-open" "open")
|
||||
(".*" "open" "xdg-open")))
|
||||
(dired-kill-when-opening-new-dired-buffer t)
|
||||
:config
|
||||
(when (eq system-type 'darwin)
|
||||
(let ((gls (executable-find "gls")))
|
||||
(when gls
|
||||
(setq insert-directory-program gls)))))
|
||||
|
||||
|
||||
;;; ERC
|
||||
(use-package erc
|
||||
:defer t
|
||||
:custom
|
||||
(erc-join-buffer 'window)
|
||||
;; (erc-interactive-display ...) ;; this option will be available on next ERC release (5.6)
|
||||
(erc-hide-list '("JOIN" "PART" "QUIT"))
|
||||
(erc-timestamp-format "[%H:%M]")
|
||||
(erc-autojoin-channels-alist '((".*\\.libera\\.chat" "#emacs"))))
|
||||
|
||||
|
||||
;; ISEARCH
|
||||
(use-package isearch
|
||||
:config
|
||||
(setq isearch-lazy-count t)
|
||||
(setq lazy-count-prefix-format "(%s/%s) ")
|
||||
(setq lazy-count-suffix-format nil)
|
||||
(setq search-whitespace-regexp ".*?"))
|
||||
|
||||
|
||||
;;; VC
|
||||
;; Notes about why this is here and why magit is better for git...
|
||||
(use-package vc
|
||||
;; This is not needed, but it is left here as a reminder of some of the keybindings
|
||||
:defer t
|
||||
:bind
|
||||
(("C-x v d" . vc-dir)
|
||||
("C-x v =" . vc-diff)
|
||||
("C-x v D" . vc-root-diff)
|
||||
("C-x v v" . vc-next-action)))
|
||||
|
||||
|
||||
;;; SMERGE
|
||||
(use-package smerge-mode
|
||||
:defer t
|
||||
:bind (:map smerge-mode-map
|
||||
("C-c ^ u" . smerge-keep-upper)
|
||||
("C-c ^ l" . smerge-keep-lower)
|
||||
("C-c ^ n" . smerge-next)
|
||||
("C-c ^ p" . smerge-previous)))
|
||||
|
||||
|
||||
;;; ELDOC
|
||||
(use-package eldoc
|
||||
:init
|
||||
(global-eldoc-mode))
|
||||
|
||||
|
||||
;;; FLYMAKE
|
||||
(use-package flymake
|
||||
:defer t
|
||||
:hook (prog-mode . flymake-mode)
|
||||
:bind (:map flymake-mode-map
|
||||
("C-c ! n" . flymake-goto-next-error)
|
||||
("C-c ! p" . flymake-goto-prev-error)
|
||||
("C-c ! l" . flymake-show-buffer-diagnostics)))
|
||||
|
||||
|
||||
;;; ORG-MODE
|
||||
(use-package org
|
||||
:defer t)
|
||||
|
||||
|
||||
;;; --------------- External packages
|
||||
(use-package vertico
|
||||
:ensure t
|
||||
:hook
|
||||
(after-init . vertico-mode)
|
||||
:custom
|
||||
(vertico-count 10) ; Number of candidates to display
|
||||
(vertico-resize nil)
|
||||
(vertico-cycle nil) ; Go from last to first candidate and first to last (cycle)?
|
||||
:config
|
||||
;; Prefix the current candidate with “» ”. From
|
||||
;; https://github.com/minad/vertico/wiki#prefix-current-candidate-with-arrow
|
||||
(advice-add #'vertico--format-candidate :around
|
||||
(lambda (orig cand prefix suffix index _start)
|
||||
(setq cand (funcall orig cand prefix suffix index _start))
|
||||
(concat
|
||||
(if (= vertico--index index)
|
||||
(propertize "» " 'face '(:foreground "#80adf0" :weight bold))
|
||||
" ")
|
||||
cand))))
|
||||
|
||||
|
||||
(use-package orderless
|
||||
:ensure t
|
||||
:defer t
|
||||
:after vertico
|
||||
:init
|
||||
(setq completion-styles '(orderless basic)
|
||||
completion-category-defaults nil
|
||||
completion-category-overrides '((file (styles partial-completion)))))
|
||||
|
||||
|
||||
(use-package marginalia
|
||||
:ensure t
|
||||
:hook
|
||||
(after-init . marginalia-mode))
|
||||
|
||||
|
||||
(use-package consult
|
||||
:ensure t
|
||||
:defer t
|
||||
:init
|
||||
;; Optionally tweak the register preview window.
|
||||
;; This adds thin lines, sorting and hides the mode line of the window.
|
||||
(advice-add #'register-preview :override #'consult-register-window)
|
||||
|
||||
;; Use Consult to select xref locations with preview
|
||||
(setq xref-show-xrefs-function #'consult-xref
|
||||
xref-show-definitions-function #'consult-xref))
|
||||
|
||||
|
||||
;; EMBARK
|
||||
(use-package embark
|
||||
:ensure t
|
||||
:defer t)
|
||||
|
||||
|
||||
(use-package embark-consult
|
||||
:ensure t ; only need to install it, embark loads it after consult if found
|
||||
:hook
|
||||
(embark-collect-mode . consult-preview-at-point-mode))
|
||||
|
||||
|
||||
;; TreeSitter Grammars
|
||||
(use-package treesit-auto
|
||||
:ensure t
|
||||
:after emacs
|
||||
:custom
|
||||
(treesit-auto-install 'prompt)
|
||||
:config
|
||||
(treesit-auto-add-to-auto-mode-alist 'all)
|
||||
(global-treesit-auto-mode t))
|
||||
|
||||
|
||||
;; Markdown Mode
|
||||
(use-package markdown-mode
|
||||
:defer t
|
||||
:ensure t
|
||||
:mode ("README\\.md\\'" . gfm-mode)
|
||||
:init (setq markdown-command "multimarkdown"))
|
||||
|
||||
|
||||
;; Company
|
||||
(use-package company
|
||||
:defer t
|
||||
:ensure t
|
||||
:custom
|
||||
(company-tooltip-align-annotations t)
|
||||
:config
|
||||
(define-key company-active-map (kbd "C-y") (lambda () (interactive) (company-show-doc-buffer t)))
|
||||
(define-key company-active-map [tab] 'company-complete-selection)
|
||||
(define-key company-active-map (kbd "TAB") 'company-complete-selection)
|
||||
(define-key company-active-map [ret] 'company-complete-selection)
|
||||
(define-key company-active-map (kbd "RET") 'company-complete-selection)
|
||||
:hook
|
||||
(after-init . global-company-mode))
|
||||
|
||||
|
||||
;; LSP
|
||||
(use-package lsp-mode
|
||||
:ensure t
|
||||
:defer t
|
||||
:hook (;; replace XXX-mode with concrete major-mode(e. g. python-mode)
|
||||
(bash-ts-mode . lsp)
|
||||
(typescript-ts-mode . lsp)
|
||||
(tsx-ts-mode . lsp)
|
||||
(js-mode . lsp)
|
||||
(js-ts-mode . lsp)
|
||||
(lsp-mode . lsp-enable-which-key-integration))
|
||||
:commands lsp
|
||||
:custom
|
||||
(lsp-keymap-prefix "C-c l")
|
||||
(lsp-inlay-hint-enable t)
|
||||
(lsp-completion-provider :none)
|
||||
(lsp-session-file (locate-user-emacs-file ".lsp-session"))
|
||||
(lsp-log-io nil) ;; for speed
|
||||
(lsp-idle-delay 0) ;; debouncing, if needed 0.5
|
||||
(lsp-keep-workspace-alive nil)
|
||||
;; core
|
||||
(lsp-enable-xref t)
|
||||
(lsp-auto-configure t)
|
||||
(lsp-enable-links nil)
|
||||
(lsp-eldoc-enable-hover t)
|
||||
(lsp-enable-dap-auto-configure t)
|
||||
(lsp-enable-file-watchers nil)
|
||||
(lsp-enable-folding nil)
|
||||
(lsp-enable-imenu t)
|
||||
(lsp-enable-indentation nil)
|
||||
(lsp-enable-on-type-formatting nil)
|
||||
(lsp-enable-suggest-server-download t)
|
||||
(lsp-enable-symbol-highlighting t)
|
||||
(lsp-enable-text-document-color nil)
|
||||
;; modeline
|
||||
(lsp-modeline-code-actions-enable nil) ; Modeline should be relatively clean
|
||||
(lsp-modeline-diagnostics-enable nil) ; Already supported through `flycheck'/ `flymake'
|
||||
(lsp-modeline-workspace-status-enable t) ; Modeline displays "LSP" when lsp-mode is enabled
|
||||
(lsp-signature-doc-lines 1) ; Don't raise the echo area. It's distracting
|
||||
(lsp-eldoc-render-all t)
|
||||
;; completion
|
||||
(lsp-completion-enable t)
|
||||
(lsp-completion-enable-additional-text-edit t) ; Ex: auto-insert an import for a completion candidate
|
||||
(lsp-enable-snippet nil) ; Important to provide full JSX completion
|
||||
(lsp-completion-show-kind t) ; Optional
|
||||
;; lens
|
||||
(lsp-lens-enable t)
|
||||
;; headerline
|
||||
(lsp-headerline-breadcrumb-enable-symbol-numbers t)
|
||||
(lsp-headerline-arrow "▶")
|
||||
(lsp-headerline-breadcrumb-enable-diagnostics nil)
|
||||
(lsp-headerline-breadcrumb-icons-enable nil)
|
||||
;; semantic
|
||||
(lsp-semantic-tokens-enable nil))
|
||||
|
||||
|
||||
;; LSP aditional servers
|
||||
(use-package lsp-tailwindcss
|
||||
:ensure t
|
||||
:defer t
|
||||
:config
|
||||
(add-to-list 'lsp-language-id-configuration '(".*\\.erb$" . "html"))
|
||||
:init
|
||||
(setq lsp-tailwindcss-add-on-mode t))
|
||||
|
||||
|
||||
;; Diff-HL
|
||||
(use-package diff-hl
|
||||
:defer t
|
||||
:ensure t
|
||||
:hook
|
||||
(find-file . (lambda ()
|
||||
(global-diff-hl-mode)
|
||||
(diff-hl-flydiff-mode)
|
||||
(diff-hl-margin-mode)))
|
||||
:custom
|
||||
(diff-hl-side 'left)
|
||||
:bind
|
||||
(("M-9" . 'diff-hl-previous-hunk)
|
||||
("M-0" . 'diff-hl-next-hunk)))
|
||||
|
||||
|
||||
;; Magit
|
||||
(use-package magit
|
||||
:ensure t
|
||||
:defer t)
|
||||
|
||||
|
||||
;; Minions
|
||||
(use-package minions
|
||||
:defer t
|
||||
:ensure t
|
||||
:hook
|
||||
(after-init . minions-mode)
|
||||
:config
|
||||
;; Set the icon or text shown for hidden minor modes
|
||||
(setq minions-mode-line-lighter "λ") ;; You can change this to any icon or text
|
||||
|
||||
;; List of modes to display directly in the modeline
|
||||
(setq minions-prominent-modes
|
||||
'(flymake-mode
|
||||
lsp-mode)))
|
||||
|
||||
|
||||
;; Which-Key
|
||||
(use-package which-key
|
||||
:ensure t
|
||||
:defer t
|
||||
:hook
|
||||
(after-init . which-key-mode))
|
||||
|
||||
|
||||
;; XCLIP
|
||||
(use-package xclip
|
||||
:ensure t
|
||||
:defer t
|
||||
:hook
|
||||
(after-init . xclip-mode))
|
||||
|
||||
|
||||
(use-package indent-guide
|
||||
:defer t
|
||||
:ensure t
|
||||
:hook
|
||||
(prog-mode . indent-guide-mode)
|
||||
:config
|
||||
(setq indent-guide-char "│"))
|
||||
|
||||
|
||||
;; Add-Node-Modules-Path
|
||||
(use-package add-node-modules-path
|
||||
:ensure t
|
||||
:defer t
|
||||
:custom
|
||||
;; Makes sure you are using the local bin for your
|
||||
;; node project. Local eslint, typescript server...
|
||||
(eval-after-load 'typescript-ts-mode
|
||||
'(add-hook 'typescript-ts-mode-hook #'add-node-modules-path))
|
||||
(eval-after-load 'tsx-ts-mode
|
||||
'(add-hook 'tsx-ts-mode-hook #'add-node-modules-path))
|
||||
(eval-after-load 'typescriptreact-mode
|
||||
'(add-hook 'typescriptreact-mode-hook #'add-node-modules-path))
|
||||
(eval-after-load 'js-mode
|
||||
'(add-hook 'js-mode-hook #'add-node-modules-path)))
|
||||
|
||||
|
||||
;; EVIL
|
||||
(use-package evil
|
||||
:ensure t
|
||||
:defer t
|
||||
:hook
|
||||
(after-init . evil-mode)
|
||||
:init
|
||||
(setq evil-want-integration t) ;; This is optional since it's already set to t by default.
|
||||
(setq evil-want-keybinding nil)
|
||||
:config
|
||||
;; Set the leader key to space
|
||||
(setq evil-want-leader t)
|
||||
(setq evil-leader/in-all-states t)
|
||||
(setq evil-undo-system 'undo-tree)
|
||||
(evil-set-leader 'normal (kbd "SPC"))
|
||||
(evil-set-leader 'visual (kbd "SPC"))
|
||||
|
||||
;; Define leader key bindings
|
||||
(evil-define-key 'normal 'global (kbd "C-d") 'scroll-up)
|
||||
(evil-define-key 'normal 'global (kbd "C-u") 'scroll-down)
|
||||
(evil-define-key 'normal 'global (kbd "<leader> s f") 'consult-find)
|
||||
(evil-define-key 'normal 'global (kbd "<leader> s g") 'consult-grep)
|
||||
(evil-define-key 'normal 'global (kbd "<leader> s G") 'consult-git-grep)
|
||||
(evil-define-key 'normal 'global (kbd "<leader> s r") 'consult-ripgrep)
|
||||
(evil-define-key 'normal 'global (kbd "<leader> s h") 'consult-info)
|
||||
(evil-define-key 'normal 'global (kbd "<leader> /") 'consult-line)
|
||||
|
||||
(evil-define-key 'normal 'global (kbd "<leader> x x") 'consult-flymake)
|
||||
(evil-define-key 'normal 'global (kbd "] d") 'flymake-goto-next-error)
|
||||
(evil-define-key 'normal 'global (kbd "[ d") 'flymake-goto-prev-error)
|
||||
|
||||
(evil-define-key 'normal 'global (kbd "] c") 'diff-hl-next-hunk)
|
||||
(evil-define-key 'normal 'global (kbd "[ c") 'diff-hl-previous-hunk)
|
||||
|
||||
(evil-define-key 'normal 'global (kbd "<leader> e e") 'neotree-toggle)
|
||||
|
||||
(evil-define-key 'normal 'global (kbd "<leader> g g") 'magit-status)
|
||||
(evil-define-key 'normal 'global (kbd "<leader> g l") 'magit-log-current)
|
||||
(evil-define-key 'normal 'global (kbd "<leader> g d") 'magit-diff-buffer-file)
|
||||
|
||||
(evil-define-key 'normal 'global (kbd "] b") 'switch-to-next-buffer)
|
||||
(evil-define-key 'normal 'global (kbd "[ b") 'switch-to-prev-buffer)
|
||||
(evil-define-key 'normal 'global (kbd "<leader> b i") 'consult-buffer)
|
||||
(evil-define-key 'normal 'global (kbd "<leader> b d") 'kill-current-buffer)
|
||||
(evil-define-key 'normal 'global (kbd "<leader> b k") 'kill-current-buffer)
|
||||
(evil-define-key 'normal 'global (kbd "<leader> b x") 'kill-current-buffer)
|
||||
(evil-define-key 'normal 'global (kbd "<leader> b s") 'save-buffer)
|
||||
(evil-define-key 'normal 'global (kbd "<leader> b l") 'consult-buffer)
|
||||
(evil-define-key 'normal 'global (kbd "<leader>SPC") 'consult-buffer)
|
||||
|
||||
(evil-define-key 'normal 'global (kbd "<leader> p b") 'consult-project-buffer)
|
||||
(evil-define-key 'normal 'global (kbd "<leader> p p") 'project-switch-project)
|
||||
(evil-define-key 'normal 'global (kbd "<leader> p f") 'project-find-file)
|
||||
(evil-define-key 'normal 'global (kbd "<leader> p g") 'project-find-regexp)
|
||||
(evil-define-key 'normal 'global (kbd "<leader> p k") 'project-kill-buffers)
|
||||
(evil-define-key 'normal 'global (kbd "<leader> p D") 'project-dired)
|
||||
|
||||
(evil-define-key 'normal 'global (kbd "P") 'consult-yank-from-kill-ring)
|
||||
|
||||
(evil-define-key 'normal 'global (kbd "<leader> .") 'embark-act)
|
||||
|
||||
(evil-define-key 'normal 'global (kbd "<leader> u") 'undo-tree-visualize)
|
||||
|
||||
(evil-define-key 'normal 'global (kbd "<leader> h m") 'describe-mode)
|
||||
(evil-define-key 'normal 'global (kbd "<leader> h f") 'describe-function)
|
||||
(evil-define-key 'normal 'global (kbd "<leader> h v") 'describe-variable)
|
||||
(evil-define-key 'normal 'global (kbd "<leader> h k") 'describe-key)
|
||||
|
||||
(evil-define-key 'normal 'global (kbd "] t") 'tab-next)
|
||||
(evil-define-key 'normal 'global (kbd "[ t") 'tab-previous)
|
||||
|
||||
(evil-define-key 'normal 'global (kbd "<leader> m p") (lambda ()
|
||||
(interactive)
|
||||
(shell-command (concat "prettier --write " (shell-quote-argument (buffer-file-name))))
|
||||
(revert-buffer t t t)))
|
||||
|
||||
(evil-define-key 'normal lsp-mode-map
|
||||
;; (kbd "gd") 'lsp-find-definition ;; Emacs already provides a better gd
|
||||
;; (kbd "gr") 'lsp-find-references ;; Emacs already provides a better gr
|
||||
(kbd "K") 'lsp-describe-thing-at-point ;; Show hover documentation
|
||||
(kbd "<leader> c a") 'lsp-describe-thing-at-point ;; Show hover documentation
|
||||
(kbd "<leader> r n") 'lsp-rename ;; Rename symbol
|
||||
(kbd "gI") 'lsp-find-implementation ;; Find implementation
|
||||
(kbd "<leader> l f") 'lsp-format-buffer) ;; Format buffer via lsp
|
||||
|
||||
|
||||
|
||||
|
||||
(evil-define-key 'normal 'global (kbd "gcc")
|
||||
(lambda ()
|
||||
(interactive)
|
||||
(if (not (use-region-p))
|
||||
(comment-or-uncomment-region (line-beginning-position) (line-end-position)))))
|
||||
(evil-define-key 'visual 'global (kbd "gc")
|
||||
(lambda ()
|
||||
(interactive)
|
||||
(if (use-region-p)
|
||||
(comment-or-uncomment-region (region-beginning) (region-end)))))
|
||||
|
||||
(evil-mode 1))
|
||||
|
||||
|
||||
;; EVIL COLLECTION
|
||||
(use-package evil-collection
|
||||
:after evil
|
||||
:defer t
|
||||
:ensure t
|
||||
:hook
|
||||
(evil-mode . evil-collection-init)
|
||||
:config)
|
||||
|
||||
(use-package undo-tree
|
||||
:defer t
|
||||
:ensure t
|
||||
:hook
|
||||
(after-init . global-undo-tree-mode)
|
||||
:config
|
||||
(setq undo-tree-history-directory-alist '(("." . "~/.emacs.d/.cache/undo"))))
|
||||
|
||||
;; RAINBOWN DELIMITERS
|
||||
(use-package rainbow-delimiters
|
||||
:defer t
|
||||
:ensure t
|
||||
:hook
|
||||
(prog-mode . rainbow-delimiters-mode)
|
||||
:config)
|
||||
|
||||
|
||||
(use-package doom-modeline
|
||||
:ensure t
|
||||
:defer t
|
||||
:custom
|
||||
(doom-modeline-buffer-file-name-style 'buffer-name)
|
||||
(doom-modeline-project-detection 'project)
|
||||
(doom-modeline-buffer-name t)
|
||||
(doom-modeline-vcs-max-length 25)
|
||||
:config
|
||||
(if ek-use-nerd-fonts
|
||||
(setq doom-modeline-icon t)
|
||||
(setq doom-modeline-icon nil))
|
||||
:hook
|
||||
(after-init . doom-modeline-mode))
|
||||
|
||||
|
||||
(use-package neotree
|
||||
:ensure t
|
||||
:custom
|
||||
(neo-theme 'nerd)
|
||||
(neo-vc-integration '(face char))
|
||||
:defer t
|
||||
:config
|
||||
(if ek-use-nerd-fonts
|
||||
(setq neo-theme 'nerd-icons)
|
||||
(setq neo-theme 'nerd)))
|
||||
|
||||
|
||||
(use-package nerd-icons
|
||||
:if ek-use-nerd-fonts
|
||||
:ensure t
|
||||
:defer t)
|
||||
|
||||
(use-package nerd-icons-dired
|
||||
:if ek-use-nerd-fonts
|
||||
:ensure t
|
||||
:defer t
|
||||
:hook
|
||||
(dired-mode . nerd-icons-dired-mode))
|
||||
|
||||
|
||||
|
||||
;; Utilitary function to install Emacs-Kicks
|
||||
(defun ek/first-install ()
|
||||
"Install tree-sitter grammars and compile packages on first run..."
|
||||
(interactive)
|
||||
(switch-to-buffer "*Messages*")
|
||||
|
||||
(message ">>> All required packages installed.")
|
||||
(message ">>> Configuring LEmacs...")
|
||||
|
||||
(message ">>> Configuring Tree Sitter parsers...")
|
||||
(require 'treesit-auto)
|
||||
(treesit-auto-install-all)
|
||||
|
||||
(message ">>> Native compile 3rd-party packages...\n")
|
||||
(require 'comp)
|
||||
(native-compile-prune-cache)
|
||||
(dolist (dir (directory-files package-user-dir t "^[^.]" t))
|
||||
(when (file-directory-p dir)
|
||||
(byte-recompile-directory dir 0 t)
|
||||
(native-compile-async dir 'recursively)))
|
||||
|
||||
(message ">>> Emacs-Kicks installed!!! Presss any key to close the installer and open Emacs normally.")
|
||||
(read-key)
|
||||
(kill-emacs))
|
||||
|
||||
|
||||
(provide 'init)
|
||||
;;; init.el ends here
|
||||
Reference in New Issue
Block a user