Sravan Balaji da6527073a Emacs from Scratch #5 - Org Mode Basics
- Add README org mode file with configuration in src blocks
- Add org mode packages and configuration
- Fix some typos
- Whitespace changes
2021-04-28 11:50:53 -04:00
2021-04-28 10:24:24 -04:00
2021-04-26 09:08:04 -04:00

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
Personal build of emacs
Readme 149 KiB
Languages
Emacs Lisp 100%