Skip to content

Instantly share code, notes, and snippets.

@mrprofessor
Last active August 8, 2022 23:18
Show Gist options
  • Select an option

  • Save mrprofessor/10fc1bc8b2718b90b5ee3e18feefe013 to your computer and use it in GitHub Desktop.

Select an option

Save mrprofessor/10fc1bc8b2718b90b5ee3e18feefe013 to your computer and use it in GitHub Desktop.

Literate Config

Initialization

Basics

  • Menu and toobars
;;(require 'org)
;;(org-babel-load-file (expand-file-name "~/.emacs.d/settings.org"))
(scroll-bar-mode -1)                                           ; Disable visible scrollbar
;; (tool-bar-mode -1)                                          ; Disable tool bar
;; (tooltip-mode -1)                                           ; Disable tooltip
;; (set-fringe-mode 80)                                        ; Give some breathing room?
;; (menu-bar-mode -1)                                          ; Go full spartan
  • Scroll Emacs
(setq scroll-step    1
    scroll-conservatively 10000)
  • Set up the visible bell
(setq visible-bell t)
  • Set Fonts
(set-face-attribute 'default nil :font "Cascadia code" :height 120)
  • Set Emacs Theme
(load-theme 'adwaita)
  • Display line numbers
(global-display-line-numbers-mode t)

;; We don't want line numbers everywhere, e.g shell
(dolist (mode '(org-hook-mode
                term-mode-hook
                eshell-mode-hook
                shell-mode-hook))
  (add-hook mode(lambda() (display-line-numbers-mode 0))))
  • Truncate long lines in certain modes
(add-hook 'org-mode-hook (lambda() (setq truncate-lines nil)))

Intialize packages

  • Initialize Melpa
(require 'package)
(setq package-archives '(("melpa"  . "https://melpa.org/packages/")
                         ("melpa-stable" . "https://stable.melpa.org/packages/")
                         ("org" . "https://orgmode.org/elpa/")))

(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)

Evil Mode

  • Since I have been using VI for quite sometime now, I don’t want to train myself to learn Emacs
;; package: evil
;; First thing first. Be EVIL!
(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 motions 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))


;; package: evil-collection
;; Now be EVIL on every mode
;; TODO: Doesn't work
(use-package evil-collection
  :after evil
  :ensure t
  :config
  (evil-collection-init))
(setq inhibit-startup-message t)

;; (scroll-bar-mode -1)                 ; Disable visible scrollbar
;; (tool-bar-mode -1)                   ; Disable visible scrollbar
;; (tooltip-mode -1)                    ; Disable tooltips
;; (set-fringe-mode 10)                 ; Give some breathing room?
;; (menu-bar-mode -1)                   ; Go full spartan


;; Set up the visible bell
(setq visible-bell t)

;; Scroll emacs
(setq scroll-step            1
      scroll-conservatively  10000)

;; Set font-face
(set-face-attribute 'default nil :font "Cascadia code" :height 120)


;; Set emacs theme
(load-theme 'adwaita)


;; Display line numbers
(global-display-line-numbers-mode t)
;; We don't want line numbers in a shell right?
;; Disable line numbers for certain modes
(dolist (mode '(org-hook-mode
		term-mode-hook
		eshell-mode-hook
		shell-mode-hook))
  (add-hook mode(lambda() (display-line-numbers-mode 0))))

;; Truncate long lines in certain modes
(add-hook 'org-mode-hook (lambda() (setq truncate-lines nil)))



;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Initialize package sources
;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(require 'package)

(setq package-archives '(("melpa" . "https://melpa.org/packages/")
                         ("melpa-stable" . "https://stable.melpa.org/packages/")
                         ("org" . "https://orgmode.org/elpa/")))

(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)



;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Packages
;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


;; package: evil
;; First thing first. Be EVIL!
(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 motions 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))


;; package: evil-collection
;; Now be EVIL on every mode
;; TODO: Doesn't work
(use-package evil-collection
  :after evil
  :ensure t
  :config
  (evil-collection-init))

;; package: hydra
(use-package hydra)

(defhydra hydra-text-scale (:timeout 4)
  "scale text"
  ("j" text-scale-increase "in")
  ("k" text-scale-decrease "out")
  ("0" text-scale-set "set")
  ("f" nil "finished" :exit t))


;; package: general.el
;; Global keybinding for modes
(use-package general
  :config
  (general-create-definer rune/leader-keys
    :keymaps '(normal insert visual emacs)
    :prefix "SPC"
    :global-prefic "C-SPC"))

(rune/leader-keys
  "t" '(:ignore t :which-key "toggles")
  "tt" '(counsel-load-theme :which-key "choose theme")
  "ts" '(hydra-text-scale/body :which-key "scale-text"))


;; package 
;; package: all-the-icons
;; Icons for doom-modeline and treemacs
(use-package all-the-icons)


;; package: doom-modeline
;; Doom modeline: The beauty.
;; https://github.com/seagle0128/doom-modeline
(use-package doom-modeline
  :init (doom-modeline-mode 1)
  :custom ((doom-modeline-height 30)))

;; package: doom-themes
;; This package has a bunch of famous themes.
(use-package doom-themes)


;; package: command-log-mode
;; Command log mode shows the key presses and their respective emacs
;; and their respective emacs functions in a buffer.
;; Usage:
;; Enable variable: M-x command-log-mode or M-x global-command-log-mode
;; Show buffer: MX clm/toggle-command-log-buffer
(use-package command-log-mode)


;; package: ivy/counsel/swiper
;; Set up Ivy for better completions
;; Installing counsel will install ivy and swiper.
(use-package counsel
  :diminish
  :bind (("C-s" . swiper)
	 ;; Counsel stuff
	 ("M-x" . counsel-M-x)
	 ("C-x b" . counsel-ibuffer)
	 ("C-x C-f" . counsel-find-file)
	 :map minibuffer-local-map
	 ("C-x C-r" . 'counsel-minibuffer-history)
	 :map ivy-minibuffer-map
	 ("TAB" . ivy-alt-done)
	 ("C-f" . 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))
  :init
  (ivy-mode 1))


;; package: ivy-rich
;; More friendly interface (display transformer) for ivy.
(use-package ivy-rich
  :init
  (ivy-rich-mode 1))


;; package:  rainbow-delimiters
;; For any buffer that represents a programming mode, we
;; will enable rainbow-delimiters-mode.
;; This mode matches the parenthesis with same color for
;; better visibility.
(use-package rainbow-delimiters
  :hook (prog-mode . rainbow-delimiters-mode))


;; package: emacs-which-key
;; This package displays available keybindings in popup.
;; config:
;; 1. Set the pop up delay to 1 seconds.
;; 2. It should popup in the minibuffer.
(use-package which-key
  :init (which-key-mode)
  :diminish which-key-mode
  :config
  (setq which-key-idle-delay 1)
  (setq which-key-popup-type 'minibuffer))


;; package: 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))


;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Key binding madness
;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


;; Make ESC quit prompts
(global-set-key  (kbd "<escape>") 'keyboard-escape-quit)

;; Switch buffer
(global-set-key (kbd "C-M-j") 'counsel-switch-buffer)

(define-key emacs-lisp-mode-map (kbd "C-x M-t") 'counsel-load-theme)

Literate Config

Initialization

Basics

  • Menu and toobars
  (scroll-bar-mode -1)                                         ; Disable visible scrollbar
;; (tool-bar-mode -1)                                          ; Disable tool bar
;; (tooltip-mode -1)                                           ; Disable tooltip
;; (set-fringe-mode 80)                                        ; Give some breathing room?
;; (menu-bar-mode -1)                                          ; Go full spartan
  • Scroll Emacs
(setq scroll-step    1
    scroll-conservatively 10000)
  • Set up the visible bell
(setq visible-bell t)
  • Set Fonts
(set-face-attribute 'default nil :font "Cascadia mono" :height 160)
  • Display line numbers
(global-display-line-numbers-mode t)

;; We don't want line numbers everywhere, e.g shell
(dolist (mode '(org-hook-mode
                term-mode-hook
                eshell-mode-hook
                shell-mode-hook))
  (add-hook mode(lambda() (display-line-numbers-mode 0))))
  • Truncate long lines in certain modes
(add-hook 'org-mode-hook (lambda() (setq truncate-lines nil)))

Packages

Intialize packages

  • Initialize Melpa
(require 'package)
(setq package-archives '(("melpa"  . "https://melpa.org/packages/")
                         ("melpa-stable" . "https://stable.melpa.org/packages/")
                         ("org" . "https://orgmode.org/elpa/")))

(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)

Evil Mode

  • Since I have been using VI for quite sometime now, I don’t want to train myself to learn Emacs
;; package: evil
;; First thing first. Be EVIL!
(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 motions 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))


;; package: evil-collection
;; Now be EVIL on every mode
;; TODO: Doesn't work
(use-package evil-collection
  :after evil
  :ensure t
  :config
  (evil-collection-init))

Org Mode

Org mode is probably the best thing happened to the mankind. j/k By default Org mode doesn’t look very nice, at least not as a word processor. Our goal is to make it look like one.

(setq org-hide-emphasis-markers t)

(font-lock-add-keywords 'org-mode
			  '(("^ *\\([-]\\) "
			     (0 (prog1 () (compose-region (match-beginning 1) (match-end 1) ""))))))

(use-package org-bullets
 :config
  (add-hook 'org-mode-hook (lambda () (org-bullets-mode 1))))

Install a Bunch of themes

Doom Emacs has consolidated a bunch of nice looking themes, we would like to get them all.

(use-package doom-themes
:ensure t
:config
;; Global settings (defaults)
(setq doom-themes-enable-bold t    ; if nil, bold is universally disabled
      doom-themes-enable-italic t) ; if nil, italics is universally disabled
(load-theme 'doom-solarized-light t)

;; Enable flashing mode-line on errors
(doom-themes-visual-bell-config)
;; Enable custom neotree theme (all-the-icons must be installed!)
(doom-themes-neotree-config)
;; or for treemacs users
(setq doom-themes-treemacs-theme "doom-solarized-light") ; use "doom-colors" for less minimal icon theme
(doom-themes-treemacs-config)
;; Corrects (and improves) org-mode's native fontification.
(doom-themes-org-config))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment