da6527073ae60e00ce95035bbca6577da94f2243
- Add README org mode file with configuration in src blocks - Add org mode packages and configuration - Fix some typos - Whitespace changes
Personal Emacs Configuration
Sravan Balaji's Emacs Configuration
My personal configuration of Emacs, written as an Org Mode document.
Configuration
UI Changes
Disable Unnecessary Visual Elements
Disable some visual elements that are not necessary like startup message, scrollbar, toolbar, tooltips, menu bar, etc. Turn on the visual bell and add some breathing room.
(setq inhibit-startup-message t) ; Disable startup message
(scroll-bar-mode -1) ; Disable visible scrollbar
(tool-bar-mode -1) ; Disable the toolbar
(tooltip-mode -1) ; Disable tooltips
(set-fringe-mode 10) ; Give some breathing room
(menu-bar-mode -1) ; Disable the menu bar
(setq visible-bell t) ; Set up the visible bell
Modeline
;; Doom Modeline
(use-package doom-modeline
:ensure t
:init (doom-modeline-mode 1)
:custom (doom-modeline-height 15)
)
Theme
;; ;; Doom Themes
;; (use-package doom-themes
;; :init (load-theme 'doom-dracula t)
;; )
;; Dracula Pro Theme
(add-to-list 'custom-theme-load-path "~/.config/emacs/themes")
(load-theme 'dracula-pro t)
Line Numbers
;; Line Numbers
(column-number-mode)
(global-display-line-numbers-mode t)
;; Disable line numbers for some modes
(dolist (mode '(
org-mode-hook
term-mode-hook
shell-mode-hook
eshell-mode-hook
)
)
(add-hook mode (lambda () (display-line-numbers-mode 0))))
Rainbow Delimeters
;; Rainbow Delimiters
(use-package rainbow-delimiters
:hook (prog-mode . rainbow-delimiters-mode))
Fonts
Setup FiraCode font with specified size.
NOTE: The first time you load your configuration on a new machine, you'll need to run the following command interactively so that mode line icons display correctly:
M-X all-the-icons-install-fonts
;; Font setup
(set-face-attribute 'default nil :font "FiraCode Nerd Font" :height 120)
;; Icon Fonts
(use-package all-the-icons)
Keybindings
Evil mode keybindings.
General
;; Make ESC quit prompts
(global-set-key (kbd "<escape>") 'keyboard-escape-quit)
;; General (for easy keybindings)
(use-package general
:config
(general-create-definer sb/leader-keys
:keymaps '(normal insert visual emacs)
:prefix "SPC"
:global-prefix "C-SPC")
(sb/leader-keys
"t" '(:ignore t :which-key "toggles")
"tc" '(comment-line :which-key "toggle comment")
"s" '(:ignore s :which-key "settings")
"st" '(counsel-load-theme :which-key "choose theme")
"ss" '(hydra-text-scale/body :which-key "scale text")
)
)
(general-define-key
"C-M-j" 'counsel-switch-buffer
)
Evil Keybindings
;; Evil Keybindings
(use-package evil
:init
(setq evil-want-integration t)
(setq evil-want-keybinding nil)
(setq evil-want-C-u-scroll t)
(setq evil-want-C-i-jump nil)
:config
(evil-mode 1)
(define-key evil-insert-state-map (kbd "C-g") 'evil-normal-state)
(define-key evil-insert-state-map (kbd "C-h") 'evil-delete-backward-char-and-join)
;; Use visual line motoins even outside of visual-line-mode buffers
(evil-global-set-key 'motion "j" 'evil-next-visual-line)
(evil-global-set-key 'motion "k" 'evil-previous-visual-line)
(evil-set-initial-state 'messages-buffer-mode 'normal)
(evil-set-initial-state 'dashboard-mode 'normal)
)
(use-package evil-collection
:after evil
:config
(evil-collection-init)
)
Hydra
;; Hydra
(use-package hydra)
(defhydra hydra-text-scale (:timeout 4)
"scale text"
("j" text-scale-increase "in")
("k" text-scale-decrease "out")
("f" nil "finished" :exit t)
)
Package Sources
Package sources and initialization.
;; Initialize package sources
(require 'package)
(setq package-archives
'(("melpa" . "https://melpa.org/packages/")
("org" . "https://orgmode.org/elpa/")
("elpa" . "https://elpa.gnu.org/packages/")
)
)
(package-initialize)
(unless package-archive-contents
(package-refresh-contents))
;; Initialize use-package on non-Linux platforms
(unless (package-installed-p 'use-package)
(package-install 'use-package))
(require 'use-package)
(setq use-package-always-ensure t)
Autocompletion
;; Ivy Autocompletion
(use-package ivy
:diminish
:bind (("C-s" . swiper)
:map ivy-minibuffer-map
("TAB" . ivy-alt-done)
("C-l" . ivy-alt-done)
("C-j" . ivy-next-line)
("C-k" . ivy-previous-line)
:map ivy-switch-buffer-map
("C-k" . ivy-previous-line)
("C-l" . ivy-done)
("C-d" . ivy-switch-buffer-kill)
:map ivy-reverse-i-search-map
("C-k" . ivy-previous-line)
("C-d" . ivy-reverse-i-search-kill))
:config
(ivy-mode 1)
)
;; Ivy Rich
(use-package ivy-rich
:init
(ivy-rich-mode 1))
;; Counsel
(use-package counsel
:bind (("M-x" . counsel-M-x)
("C-x b" . counsel-ibuffer)
("C-x C-f" . counsel-find-file)
:map minibuffer-local-map
("C-r" . 'counsel-minibuffer-history)))
;; Helpful
(use-package helpful
:custom
(counsel-describe-function-function #'helpful-callable)
(counsel-describe-variable-function #'helpful-variable)
:bind
([remap describe-function] . counsel-describe-function)
([remap describe-command] . helpful-command)
([remap describe-variable] . counsel-describe-variable)
([remap describe-key] . helpful-key))
Projectile
;; Projectile
(use-package projectile
:diminish projectile-mode
:config (projectile-mode)
:custom ((projectile-completion-system 'ivy))
:bind-keymap
("C-c p" . projectile-command-map)
:init
(when (file-directory-p "~/Projects")
(setq projectile-project-search-path '("~/Projects/Personal" "~/Projects/UMICH"))
)
(when (file-directory-p "~/.config")
(setq projectile-project-search-path '("~/.config"))
)
(setq projectile-switch-project-action #'projectile-dired)
)
(use-package counsel-projectile
:config (counsel-projectile-mode)
)
Git Integration
Magit
;; Magit
(use-package magit
;; :commands (magit-status magit-get-current-branch)
:custom
(magit-display-buffer-function #'magit-display-buffer-same-window-except-diff-v1)
)
;; NOTE: evil-magit was removed from MELPA and now a part of evil-collection
;; (use-package evil-magit
;; :after magit
;; )
Forge
;; OPTIONAL: This will add GitHub integration to magit, but requires some token setup
;; (use-package forge)
Org Mode
(defun sb/org-mode-setup ()
(org-indent-mode)
;; (variable-pitch-mode 1)
(auto-fill-mode 0)
(visual-line-mode 1)
(setq evil-auto-indent nil)
)
;; Replace list hyphen with dot
(font-lock-add-keywords 'org-mode
'(("^ *\\([-]\\) "
(0 (prog1 () (compose-region (match-beginning 1) (match-end 1) "•"))))))
;; ;; Set faces for heading levels
;; (dolist (face '((org-level-1 . 1.2)
;; (org-level-2 . 1.1)
;; (org-level-3 . 1.05)
;; (org-level-4 . 1.0)
;; (org-level-5 . 1.1)
;; (org-level-6 . 1.1)
;; (org-level-7 . 1.1)
;; (org-level-8 . 1.1)))
;; (set-face-attribute (car face) nil :font "Cantarell" :weight 'regular :height (cdr face)))
(use-package org
:hook (org-mode . sb/org-mode-setup)
:config
(setq org-ellipsis " ")
(sb/org-font-setup)
)
(use-package org-bullets
:after org
:hook (org-mode . org-bullets-mode)
:custom
(org-bullets-bullet-list '("◉" "○" "●" "○" "●" "○" "●"))
)
;; ;; Add visual fill (padding)
;; (defun sb/org-mode-visual-fill ()
;; (setq visual-fill-column-width 100
;; visual-fill-column-center-text t)
;; (visual-fill-column-mode 1)
;; )
;; (use-package visual-fill-column
;; :hook (org-mode . sb/org-mode-visual-fill)
;; )
Description
Languages
Emacs Lisp
100%