mirror of
https://github.com/elkowar/dots-of-war.git
synced 2024-11-06 19:32:24 +00:00
461 lines
9.1 KiB
Org Mode
461 lines
9.1 KiB
Org Mode
#+TITLE: Emacs Config
|
|
|
|
* General Settings
|
|
|
|
Typing =:ensure t= everywhere is very bothersome so I'd rather *not* do that.
|
|
|
|
#+BEGIN_SRC emacs-lisp
|
|
(require 'use-package-ensure)
|
|
(setq use-package-always-ensure t)
|
|
#+END_SRC
|
|
|
|
Don't create all the custom things.
|
|
|
|
#+BEGIN_SRC emacs-lisp
|
|
(defconst custom-file "/dev/null")
|
|
#+END_SRC
|
|
|
|
I don't want my Emacs to create loads of backup files, swap files, etc.
|
|
|
|
#+BEGIN_SRC emacs-lisp
|
|
(setq make-backup-files nil)
|
|
(setq auto-save-default nil)
|
|
#+END_SRC
|
|
|
|
Nor do I need all the (Windows 2000-esque) UI.
|
|
|
|
#+BEGIN_SRC emacs-lisp
|
|
(scroll-bar-mode -1)
|
|
(tool-bar-mode -1)
|
|
(tooltip-mode -1)
|
|
(menu-bar-mode -1)
|
|
#+END_SRC
|
|
|
|
When I fire up Emacs I want to be greeted with an empty =*scratch*= buffer, not the weird GNU screen.
|
|
|
|
#+BEGIN_SRC emacs-lisp
|
|
(setq inhibit-splash-screen t
|
|
initial-scratch-message "")
|
|
#+END_SRC
|
|
|
|
The whole yes or no prompt takes too much time to type out. y and n is much better.
|
|
|
|
#+BEGIN_SRC emacs-lisp
|
|
(defalias 'yes-or-no-p 'y-or-n-p)
|
|
#+END_SRC
|
|
|
|
UTF-8 is good and should be the default for everything.
|
|
|
|
#+BEGIN_SRC emacs-lisp
|
|
(setq locale-coding-system 'utf-8)
|
|
(set-terminal-coding-system 'utf-8)
|
|
(set-keyboard-coding-system 'utf-8)
|
|
(set-selection-coding-system 'utf-8)
|
|
(prefer-coding-system 'utf-8)
|
|
#+END_SRC
|
|
|
|
Which key makes Emacs self documenting.
|
|
|
|
#+BEGIN_SRC emacs-lisp
|
|
(use-package which-key
|
|
:config
|
|
(setq which-key-idle-delay 0.25)
|
|
(which-key-mode 1))
|
|
#+END_SRC
|
|
|
|
|
|
** Restart emacs
|
|
|
|
Restarting emacs from within emacs!
|
|
|
|
#+BEGIN_SRC emacs-lisp
|
|
(use-package restart-emacs
|
|
:config
|
|
(setq restart-emacs-restore-frames t))
|
|
#+END_SRC
|
|
|
|
** disable clipboard whatever
|
|
|
|
|
|
Clipboard shit is fucked, so this is necessary to unfuck.
|
|
|
|
#+BEGIN_SRC emacs-lisp
|
|
(setq x-select-enable-clipboard-manager nil)
|
|
#+END_SRC
|
|
|
|
** Store recent files
|
|
|
|
#+BEGIN_SRC emacs-lisp
|
|
(recentf-mode 1)
|
|
(setq recentf-max-menu-items 25)
|
|
(setq recentf-max-saved-items 25)
|
|
;; (run-at-time nil (* 5 60) 'recentf-save-list)
|
|
#+END_SRC
|
|
|
|
** VTerm
|
|
|
|
#+begin_src emacs-lisp
|
|
(use-package vterm)
|
|
#+end_src
|
|
|
|
* Looks
|
|
** tab width
|
|
|
|
#+BEGIN_SRC emacs-lisp
|
|
(setq-default tab-width 4)
|
|
#+END_SRC
|
|
|
|
** Font
|
|
|
|
I prefer Source Code Pro for now.
|
|
|
|
#+BEGIN_SRC emacs-lisp
|
|
(add-to-list 'default-frame-alist
|
|
'(font . "xos4 Terminus"))
|
|
#+END_SRC
|
|
|
|
** COMMENT Line numbers
|
|
|
|
#+BEGIN_SRC emacs-lisp
|
|
(use-package linum-relative
|
|
:config
|
|
(setq linum-relative-backend 'display-line-numbers-mode)
|
|
(linum-relative-global-mode 1))
|
|
#+END_SRC
|
|
|
|
** Color Theme
|
|
|
|
#+BEGIN_SRC emacs-lisp
|
|
(use-package gruvbox-theme
|
|
:config
|
|
(load-theme 'gruvbox-dark-medium t))
|
|
#+END_SRC
|
|
|
|
** Beacon
|
|
|
|
Highlights the cursor each time I switch windows.
|
|
|
|
#+BEGIN_SRC emacs-lisp
|
|
(use-package beacon
|
|
:config
|
|
(beacon-mode 1))
|
|
#+END_SRC
|
|
|
|
** Fringe
|
|
|
|
Ugly.
|
|
|
|
#+BEGIN_SRC emacs-lisp
|
|
(fringe-mode '(10 . 10))
|
|
#+END_SRC
|
|
|
|
** COMMENT Mode-line
|
|
|
|
#+begin_src emacs-lisp
|
|
|
|
(use-package telephone-line
|
|
:config
|
|
(setq telephone-line-lhs
|
|
'((evil . (telephone-line-evil-tag-segment))
|
|
(blue . (telephone-line-vc-segment
|
|
telephone-line-process-segment))
|
|
(nil . (telephone-line-buffer-segment))))
|
|
(setq telephone-line-rhs
|
|
'((nil . (telephone-line-misc-info-segment))
|
|
(accent . (telephone-line-major-mode-segment))
|
|
(evil . (telephone-line-airline-position-segment))))
|
|
(setq telephone-line-primary-left-separator 'telephone-line-cubed-left
|
|
telephone-line-secondary-left-separator 'telephone-line-cubed-hollow-left
|
|
telephone-line-primary-right-separator 'telephone-line-cubed-right
|
|
telephone-line-secondary-right-separator 'telephone-line-cubed-hollow-right)
|
|
(setq telephone-line-height 24
|
|
telephone-line-evil-use-short-tag t)
|
|
(telephone-line-mode t))
|
|
#+end_src
|
|
|
|
** doom-modeline
|
|
|
|
#+begin_src emacs-lisp
|
|
|
|
(use-package doom-modeline
|
|
:config
|
|
(setq doom-modeline-icon (display-graphic-p))
|
|
(setq doom-modeline-env-version t)
|
|
(setq doom-modeline-project-detection 'project)
|
|
(setq doom-modeline-height 0)
|
|
(doom-modeline-mode t))
|
|
#+end_src
|
|
|
|
* TODO NAME THIS
|
|
|
|
** Ivy
|
|
|
|
Ivy for completing stuff, etc. is huge.
|
|
|
|
#+BEGIN_SRC emacs-lisp
|
|
(use-package counsel
|
|
:config
|
|
(ivy-mode)
|
|
(setq ivy-re-builders-alist '((t . ivy--regex-fuzzy)))
|
|
(setq ivy-initial-inputs-alist nil)
|
|
|
|
:bind
|
|
("C-s" . swiper)
|
|
("M-x". counsel-M-x))
|
|
#+END_SRC
|
|
|
|
** flx
|
|
|
|
Flx does fancy fuzzy matching with good sorting
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp
|
|
(use-package flx
|
|
:config
|
|
)
|
|
#+END_SRC
|
|
|
|
* Projectile
|
|
|
|
|
|
#+begin_src emacs-lisp
|
|
(use-package projectile
|
|
:config
|
|
(projectile-mode t))
|
|
(use-package counsel-projectile
|
|
:after projectile counsel
|
|
:config)
|
|
#+end_src
|
|
|
|
|
|
fix the naming for which-key
|
|
|
|
#+begin_src emacs-lisp
|
|
(add-to-list 'which-key-replacement-alist
|
|
'((nil . "projectile-\\([[:alnum:]-]+\\)") . (nil . "\\1")))
|
|
#+end_src
|
|
|
|
* general.el
|
|
|
|
#+BEGIN_SRC emacs-lisp
|
|
(use-package general
|
|
:config
|
|
(general-evil-setup)
|
|
(general-def
|
|
:states '(normal motion)
|
|
"SPC" nil)
|
|
|
|
(general-create-definer elk-noleader-def
|
|
:states '(normal motion)
|
|
:keymaps 'override)
|
|
(general-create-definer elk-leader-def
|
|
:prefix "SPC"
|
|
:states '(normal motion)
|
|
:keymaps 'override)
|
|
(general-create-definer elk-local-leader-def
|
|
:prefix "SPC m"
|
|
:states '(normal motion)
|
|
:keymaps 'local)
|
|
|
|
(elk-leader-def
|
|
"a" 'org-agenda
|
|
"s" 'org-store-link
|
|
"t" '((lambda () (interactive) (org-capture nil "t")) :wk "org-capture whatever")
|
|
"f" '(counsel-find-file :wk "open a file")
|
|
"1" 'delete-other-windows
|
|
"0" 'delete-window
|
|
"p" '(:keymap projectile-command-map :wk "Project")
|
|
)
|
|
|
|
(which-key-add-key-based-replacements "SPC y" "Emacs stuff")
|
|
(elk-leader-def
|
|
:prefix "SPC y"
|
|
"c" '((lambda () (interactive) (find-file "~/.emacs.d/config.org")) :wk "open config.org")
|
|
"r" '((lambda () (interactive) (load-file "~/.emacs.d/init.el")) :wk "reload config.org")))
|
|
#+END_SRC
|
|
|
|
|
|
* Window management
|
|
|
|
#+BEGIN_SRC emacs-lisp
|
|
(which-key-add-key-based-replacements "SPC b" "Window management")
|
|
(elk-leader-def
|
|
:prefix "SPC b"
|
|
"c" '(delete-window :wk "close window")
|
|
"f" '(counsel-buffer-or-recentf :wk "Switch to file")
|
|
"b" '(counsel-switch-buffer :wk "Switch buffer")
|
|
"o" '(counsel-switch-buffer-other-window :wk "Switch buffer in other window")
|
|
"d" '(kill-buffer :wk "close buffer")
|
|
"s" '(split-window-below :wk "h-split")
|
|
"v" '(split-window-right :wk "v-split"))
|
|
#+END_SRC
|
|
|
|
* Editing
|
|
|
|
** =evil-mode=
|
|
|
|
Emacs is lacks a good editor.
|
|
|
|
#+BEGIN_SRC emacs-lisp
|
|
(use-package evil
|
|
:init
|
|
(setq evil-want-keybinding nil)
|
|
(setq evil-want-C-u-scroll t)
|
|
(setq evil-want-fine-undo 'fine)
|
|
(setq evil-undo-system 'undo-tree)
|
|
:config
|
|
(evil-mode 1))
|
|
#+END_SRC
|
|
|
|
|
|
*** evil-org-mode
|
|
|
|
#+BEGIN_SRC emacs-lisp
|
|
(use-package evil-org
|
|
:after org
|
|
:config
|
|
(add-hook 'org-mode-hook 'evil-org-mode)
|
|
(add-hook 'evil-org-mode-hook
|
|
(lambda ()
|
|
(evil-org-set-key-theme)))
|
|
(require 'evil-org-agenda)
|
|
(evil-org-agenda-set-keys))
|
|
#+END_SRC
|
|
|
|
|
|
*** evil-collection
|
|
|
|
Keybinds for common modes.
|
|
Makes evil work everywhere.
|
|
|
|
#+BEGIN_SRC emacs-lisp
|
|
(use-package evil-collection
|
|
:after evil
|
|
:config
|
|
(evil-collection-init))
|
|
#+END_SRC
|
|
|
|
*** evil-surround
|
|
|
|
#+BEGIN_SRC emacs-lisp
|
|
(use-package evil-surround
|
|
:ensure t
|
|
:after evil
|
|
:config
|
|
(global-evil-surround-mode t))
|
|
#+END_SRC
|
|
|
|
|
|
|
|
** Undo-tree
|
|
|
|
Undo tree is based.
|
|
|
|
#+BEGIN_SRC emacs-lisp
|
|
(use-package undo-tree
|
|
:init
|
|
:config
|
|
(global-undo-tree-mode t)
|
|
(setq undo-tree-auto-save-history t))
|
|
#+END_SRC
|
|
|
|
|
|
** ace-jump
|
|
|
|
#+BEGIN_SRC emacs-lisp
|
|
(use-package ace-jump-mode)
|
|
(elk-leader-def "x" 'ace-jump-mode)
|
|
#+END_SRC
|
|
|
|
** Multicursor
|
|
|
|
Install the package
|
|
|
|
#+begin_src emacs-lisp
|
|
(use-package evil-mc
|
|
:config
|
|
(evil-mc-mode 1))
|
|
#+end_src
|
|
|
|
|
|
And set up some keybinds!
|
|
|
|
#+begin_src emacs-lisp
|
|
(which-key-add-key-based-replacements "SPC d" "Multicursor")
|
|
(elk-leader-def
|
|
:prefix "SPC d"
|
|
"j" '(evil-mc-make-cursor-move-next-line :wk "cursor below")
|
|
"u" '(evil-mc-undo-last-added-cursor :wk "undo cursor")
|
|
"d" '(evil-mc-undo-all-cursors :wk "remove all cursors")
|
|
"n" '(evil-mc-make-and-goto-next-match :wk "next match")
|
|
"m" '(evil-mc-skip-and-goto-next-match :wk "skip and next match")
|
|
"s" '(evil-mc-make-cursor-in-visual-selection-beg :wk "cursor at selection"))
|
|
#+end_src
|
|
|
|
* Code stuff
|
|
|
|
** Rainbow everything!
|
|
|
|
because rainbows are fancy!
|
|
|
|
#+BEGIN_SRC emacs-lisp
|
|
(use-package rainbow-delimiters
|
|
:init
|
|
:config
|
|
(rainbow-delimiters-mode t))
|
|
|
|
(use-package rainbow-blocks
|
|
:init
|
|
:config
|
|
(rainbow-blocks-mode t))
|
|
#+END_SRC
|
|
|
|
|
|
|
|
|
|
|
|
|
|
** Nerdcommenter
|
|
|
|
#+BEGIN_SRC emacs-lisp
|
|
(use-package evil-nerd-commenter)
|
|
(which-key-add-key-based-replacements "SPC c" "Commenting")
|
|
(elk-leader-def
|
|
:prefix "SPC c"
|
|
"SPC" '(evilnc-comment-or-uncomment-lines :wk "toggle comment")
|
|
"c" '(evilnc-copy-and-comment-lines :wk "copy and comment"))
|
|
#+END_SRC
|
|
|
|
|
|
* Git integration
|
|
|
|
** Diff-hl gitgutter
|
|
#+BEGIN_SRC emacs-lisp
|
|
(use-package diff-hl
|
|
:init
|
|
:config
|
|
(diff-hl-mode t))
|
|
#+END_SRC
|
|
|
|
|
|
** Magit
|
|
|
|
#+BEGIN_SRC emacs-lisp
|
|
(use-package magit
|
|
:init
|
|
:config
|
|
(rainbow-delimiters-mode t))
|
|
(use-package evil-magit
|
|
:init
|
|
:config
|
|
(rainbow-delimiters-mode t))
|
|
|
|
(which-key-add-key-based-replacements "SPC g" "Git shit")
|
|
(elk-leader-def
|
|
:prefix "SPC g"
|
|
"s" '(magit-status :wk "status"))
|
|
#+END_SRC
|
|
|
|
|
|
|
|
|