Skip to content

Instantly share code, notes, and snippets.

@oblique63
Last active November 22, 2023 03:49
Show Gist options
  • Save oblique63/33607ae077e08374b611 to your computer and use it in GitHub Desktop.
Save oblique63/33607ae077e08374b611 to your computer and use it in GitHub Desktop.
Emacs Bootstrap
;; -*- lexical-binding: t; -*-
;;===[ PERFORMANCE ENHANCEMENTS ]===============================================
;; See:
;; https://github.com/hlissner/doom-emacs/wiki/FAQ#how-is-dooms-startup-so-fast
(defvar file-name-handler-alist-backup file-name-handler-alist)
(defvar gc-cons-threshold-backup gc-cons-threshold)
(defvar gc-cons-percentage-backup gc-cons-percentage)
(setq gc-cons-threshold 402653184
gc-cons-percentage 0.6
file-name-handler-alist nil)
(remove-hook 'find-file-hooks 'vc-find-file-hook)
(defun reset-performance ()
(setq gc-cons-threshold gc-cons-threshold-backup
gc-cons-percentage gc-cons-percentage-backup
file-name-handler-alist file-name-handler-alist-backup))
(defun compile-init-file ()
(interactive)
(byte-compile-file (file-truename user-init-file)))
(add-hook 'emacs-startup-hook #'reset-performance)
(add-hook 'kill-emacs-hook #'compile-init-file)
;;===[ PACKAGE MANAGER ]========================================================
;;---{ Package.el }-------------------------------
(setq load-prefer-newer t
package-enable-at-startup nil)
(setq package-archives
'(("melpa" . "https://stable.melpa.org/packages/")
("gnu" . "https://elpa.gnu.org/packages/")
("marmalade" . "https://marmalade-repo.org/packages/")
("tromey" . "https://tromey.com/elpa/")))
;;---{ Straight.el }------------------------------
;; See: https://github.com/raxod502/straight.el
(defvar bootstrap-version)
(let ((bootstrap-file
(expand-file-name "straight/repos/straight.el/bootstrap.el"
user-emacs-directory))
(bootstrap-version 5))
(unless (file-exists-p bootstrap-file)
(with-current-buffer
(url-retrieve-synchronously
"https://raw.githubusercontent.com/raxod502/straight.el/develop/install.el"
'silent
'inhibit-cookies)
(goto-char (point-max))
(eval-print-last-sexp)))
(load bootstrap-file nil 'nomessage))
(setq straight-use-package-by-default t)
;;===[ PACKAGES ]===============================================================
;; Repositories:
;; https://stable.melpa.org/
;; http://elpa.gnu.org/
;;---{ Emacs }-------------------------------------
;;... Help ...
;;(straight-use-package 'eshell-did-you-mean)
(straight-use-package 'helpful)
(straight-use-package 'info-colors)
(straight-use-package 'which-key)
;;... Editor ...
(straight-use-package 'beacon)
(straight-use-package 'color-identifiers-mode)
(straight-use-package 'comment-tags)
(straight-use-package 'company)
(straight-use-package 'company-quickhelp)
(straight-use-package 'diff-hl)
;;(straight-use-package 'embrace)
(straight-use-package 'eval-in-repl)
(straight-use-package 'expand-region)
(straight-use-package 'highlight-symbol)
(straight-use-package 'ialign)
(straight-use-package 'iedit)
(straight-use-package 'indent-guide)
;;(straight-use-package 'isend-mode)
(straight-use-package 'rainbow-blocks)
(straight-use-package 'rainbow-delimiters)
(straight-use-package 'rainbow-identifiers)
(straight-use-package 'rainbow-mode)
(straight-use-package 'swiper)
(straight-use-package 'whitespace-cleanup-mode)
;;... UI ...
(straight-use-package 'dashboard)
(straight-use-package 'diredfl)
(straight-use-package 'display-theme)
(straight-use-package 'eshell-prompt-extras)
;;(straight-use-package 'indicators)
;;(straight-use-package 'ipretty)
(straight-use-package 'olivetti)
;;(straight-use-package 'powerline)
(straight-use-package 'smart-mode-line)
;;(straight-use-package 'smooth-scrolling)
(straight-use-package 'stripe-buffer)
;;(straight-use-package 'sublimity)
(straight-use-package 'theme-looper)
(straight-use-package 'zoom)
;;... Workflow ...
(straight-use-package 'ace-window)
(straight-use-package 'avy)
(straight-use-package 'counsel)
(straight-use-package 'dired-single)
;;(straight-use-package 'epkg)
(straight-use-package 'eshell-z)
(straight-use-package 'eyebrowse)
(straight-use-package 'ibuffer-projectile)
(straight-use-package 'ibuffer-sidebar)
(straight-use-package 'ibuffer-vc)
;;(straight-use-package 'imenu-anywhere)
(straight-use-package 'imenu-list)
;;(straight-use-package 'imenus)
(straight-use-package 'ivy)
(straight-use-package 'neotree)
(straight-use-package 'no-littering)
;;(straight-use-package 'paradox)
(straight-use-package 'projectile)
(straight-use-package 'vlf)
(straight-use-package 'workgroups2)
;;---{ Languages }--------------------------------
;;... Lisps ...
;; > Emacs Lisp <
;;(straight-use-package 'buttercup)
;;(straight-use-package 'el-patch)
;;(straight-use-package 'elisp-lint)
;;(straight-use-package 'elisp-sandbox)
;;(straight-use-package 'elsa)
;;(straight-use-package 'erefactor)
;;(straight-use-package 'eros)
;; > Clojure <
;;(straight-use-package 'cider)
;;(straight-use-package 'typed-clojure-mode)
;; > Common Lisp <
;;(straight-use-package 'slime) ; Common Lisp
;;(straight-use-package 'slime-company)
;; > Racket <
(straight-use-package 'flymake-racket)
(straight-use-package 'racket-mode)
;; > Scheme <
;;(straight-use-package 'chicken-scheme)
;;(straight-use-package 'geiser)
;;(straight-use-package 'scheme-complete)
;; > Other Lisps <
;;(striaght-use-package 'fennel-mode)
;;(straight-use-package 'hy-mode)
;;(straight-use-package 'picolisp-mode)
;;(straight-use-package 'quack)
;; > Keyword Highlighting <
(straight-use-package 'highlight-defined)
(straight-use-package 'highlight-parentheses)
(straight-use-package 'highlight-quoted)
(straight-use-package 'lisp-extra-font-lock)
;;(straight-use-package 'morlock)
;; > S-Expression Editing <
;;(straight-use-package 'flylisp)
;;(straight-use-package 'flyparens)
;;(straight-use-package 'lispy)
;;(straight-use-package 'lispyville) ; Evil-mode
;;(straight-use-package 'on-parens)
;;(straight-use-package 'paredit)
;;(straight-use-package 'paren-face)
;;(straight-use-package 'parinfer)
;;(straight-use-package 'sexp-move)
(straight-use-package 'smartparens)
;;... Haskell ...
;;(straight-use-package 'dante)
;;(straight-use-package 'haskell-mode)
;;(straight-use-package 'hasky-extensions)
;;(straight-use-package 'shm)
;;... Scala ...
;;(straight-use-package 'ensime)
(straight-use-package 'sbt-mode)
(straight-use-package 'scala-mode)
;;... Python ...
;;(straight-use-package 'anaconda-mode)
;;(straight-use-package 'elpy)
;;(straight-use-package 'importmagic)
;;... Ruby ...
;;(straight-use-package 'inf-ruby)
;;(straight-use-package 'robe) ; Ruby
;;(straight-use-package 'rspec-mode) ; Ruby
;;(straight-use-package 'ruby-block)
;;(straight-use-package 'ruby-mode)
;;... PHP ...
;;(straight-use-package 'company-php)
;;(straight-use-package 'php-mode)
;;... Markup / Configuration ...
;;(straight-use-package 'adoc-mode)
;;(straight-use-package 'company-pollen)
;;(straight-use-package 'company-math)
;;(straight-use-package 'gitconfig-mode)
(straight-use-package 'gitignore-mode)
;;(straight-use-package 'graphviz-dot-mode)
;;(straight-use-package 'ini-mode)
(straight-use-package 'markdown-mode)
;;(straight-use-package 'pollen-mode)
;;(straight-use-package 'scribble-mode)
;;(straight-use-package 'ssh-config-mode)
(straight-use-package 'todotxt)
;;(straight-use-package 'toml-mode)
(straight-use-package 'yaml-mode)
;;... Org ...
;;(straight-use-package 'interleave)
(straight-use-package 'org-beautify-theme)
;;(straight-use-package 'org-bullets)
;;... Shells ...
;;(straight-use-package 'insert-shebang)
(when (executable-find "bash")
(straight-use-package 'bash-completion)
(straight-use-package 'company-shell)
(straight-use-package 'flymake-shell))
(when (executable-find "nix-env")
(straight-use-package 'nix-mode)
(straight-use-package 'nix-options))
;; (when (executable-find "powershell")
;; (straight-use-package 'powershell))
;;... Web ...
;; > HTML <
(straight-use-package 'ac-html)
(straight-use-package 'ac-html-bootstrap)
(straight-use-package 'ac-html-csswatcher)
(straight-use-package 'company-web)
(straight-use-package 'emmet-mode)
;;(straight-use-package 'tagedit)
(straight-use-package 'web-mode)
;; > Compile-to-JS/CSS <
;;(straight-use-package 'coffee-mode)
;;(straight-use-package 'dart-mode)
(straight-use-package 'elm-mode)
(straight-use-package 'flycheck-elm)
;;(straight-use-package 'purescript-mode)
(straight-use-package 'sourcemap)
;;(straight-use-package 'stylus-mode)
;;(straight-use-package 'tide) ; TypeScript
;; > JS <
;;(straight-use-package 'indium)
(straight-use-package 'js2-mode)
;;(straight-use-package 'js2-refactor)
;;(straight-use-package 'js-comint)
(straight-use-package 'json-mode)
(straight-use-package 'json-navigator)
;;(straight-use-package 'tern)
;; > Frameworks <
;;(straight-use-package 'easy-hugo)
(straight-use-package 'play-routes-mode)
;; > Tools <
(straight-use-package 'httprepl)
;;(straight-use-package 'impatient-mode)
;;(straight-use-package 'skewer-mode)
(straight-use-package 'web-beautify)
;;... Other Languages ...
(straight-use-package 'ada-mode)
(straight-use-package 'alchemist) ; Elixir
;;(straight-use-package 'csharp-mode)
(straight-use-package 'elixir-mode)
;;(straight-use-package 'ess) ; R
(straight-use-package 'flycheck-clojure)
(straight-use-package 'flycheck-mix)
(straight-use-package 'fsharp-mode)
;;(straight-use-package 'forth-mode)
;;(straight-use-package 'go-mode)
;;(straight-use-package 'idris-mode)
;;(straight-use-package 'jq-mode)
;;(straight-use-package 'julia-mode)
(straight-use-package 'modern-cpp-font-lock)
;;(straight-use-package 'nim-mode)
;;(straight-use-package 'omnisharp-emacs) ; C#
;;(straight-use-package 'pine-script-mode)
;;(straight-use-package 'proof-general) ; Coq
;;(straight-use-package 'rust-mode)
;;(straight-use-package 'sqlup-mode)
;;---{ Themes }-----------------------------------
;; Theme Previews:
;; https://peach-melpa.org/
;; https://emacsthemes.com/
;; > Theme Packs <
;;(straight-use-package 'base16-theme)
;;(straight-use-package 'doom-themes)
;;(straight-use-package 'sublime-themes)
;; > Individual Themes <
;;(straight-use-package 'abyss-theme)
(straight-use-package 'ample-zen-theme)
(straight-use-package 'atom-one-dark-theme)
;;(straight-use-package 'avk-emacs-themes)
(straight-use-package 'badger-theme)
(straight-use-package 'birds-of-paradise-plus-theme)
(straight-use-package 'blackboard-theme)
(straight-use-package 'boron-theme)
(straight-use-package 'busybee-theme)
(straight-use-package 'caroline-theme)
(straight-use-package 'challenger-deep-theme)
(straight-use-package 'cherry-blossom-theme)
(straight-use-package 'clues-theme)
(straight-use-package 'creamsody-theme)
(straight-use-package 'dark-krystal-theme)
(straight-use-package 'darkburn-theme)
;;(straight-use-package 'darkmine-theme)
(straight-use-package 'dakrone-theme)
(straight-use-package 'darktooth-theme)
;;(straight-use-package 'dracula-theme)
(straight-use-package 'exotica-theme)
(straight-use-package 'farmhouse-theme)
(straight-use-package 'firecode-theme)
(straight-use-package 'flatland-theme)
;;(straight-use-package 'flatland-black-theme)
;;(straight-use-package 'flatui-dark-theme)
(straight-use-package 'gotham-theme)
(straight-use-package 'grandshell-theme)
(straight-use-package 'gruvbox-theme)
(straight-use-package 'hamburg-theme)
(straight-use-package 'hc-zenburn-theme)
;;(straight-use-package 'inkpot-theme)
(straight-use-package 'jazz-theme)
(straight-use-package 'kaolin-themes)
(straight-use-package 'klere-theme)
;;(straight-use-package 'kooten-theme)
;;(straight-use-package 'liso-theme)
(straight-use-package 'lush-theme)
(straight-use-package 'madhat2r-theme)
(straight-use-package 'majapahit-theme)
;;(straight-use-package 'melancholy-theme)
(straight-use-package 'metalheart-theme)
(straight-use-package 'moe-theme)
(straight-use-package 'mustard-theme)
;;(straight-use-package 'mustang-theme)
(straight-use-package 'naquadah-theme)
(straight-use-package 'night-owl-theme)
(straight-use-package 'nimbus-theme)
(straight-use-package 'oceanic-theme)
(straight-use-package 'omtose-phellack-theme)
(straight-use-package 'one-themes)
(straight-use-package 'overcast-theme)
(straight-use-package 'paganini-theme)
(straight-use-package 'panda-theme)
(straight-use-package 'peacock-theme)
;;(straight-use-package 'poet-theme)
;;(straight-use-package 'railscasts-theme)
(straight-use-package 'reverse-theme)
(straight-use-package 'reykjavik-theme)
(straight-use-package 'seti-theme)
;;(straight-use-package 'snazzy-theme) ; Depends on base16-theme!
;;(straight-use-package 'solarized-theme)
(straight-use-package 'soothe-theme)
(straight-use-package 'smyx-theme)
;;(straight-use-package 'sourcerer-theme)
;;(straight-use-package 'spacemacs-theme)
;;(straight-use-package 'spacegray-theme)
(straight-use-package 'srcery-theme)
;;(straight-use-package 'subatomic256-theme)
(straight-use-package 'suscolors-theme)
;;(straight-use-package 'toxi-theme)
(straight-use-package 'twilight-anti-bright-theme)
(straight-use-package 'warm-night-theme)
(straight-use-package 'yoshi-theme)
(straight-use-package 'zeno-theme)
(straight-use-package 'zerodark-theme)
(straight-use-package 'zweilight-theme)
;;===[ HELPER FUNCTIONS ]=======================================================
(defun get-current-buffer-name ()
(if (buffer-file-name)
(abbreviate-file-name (buffer-file-name))
"%b"))
(defun compile-current-file ()
"Compile current elisp file"
(interactive)
(when (and (equal major-mode 'emacs-lisp-mode)
buffer-file-name)
(byte-compile-file buffer-file-name)))
;;===[ PREFERENCES ]============================================================
;;---{ Variables }--------------------------------
(defun set-global-variable-preferences ()
(setq-default
;;... Emacs ...
backup-by-copying t
backup-directory-alist '((".*" . "~/.emacs.d/backups/"))
custom-file (expand-file-name "~/.emacs.d/emacs-custom.el")
custom-safe-themes t
delete-old-versions t
dired-listing-switches "-ahl"
fast-but-imprecise-scrolling t
frame-title-format '(:eval (get-current-buffer-name))
indent-tabs-mode nil
ivy-use-virtual-buffers t
ivy-count-format "(%d/%d) "
kept-new-versions 4
scroll-step 10
version-control t
which-key-side-window-location '(right bottom)
;;... Markdown ...
markdown-hide-markup t
markdown-hide-urls t
;;markdown-enable-math t
;;... Neotree ...
neo-smart-open t
neo-window-position 'right
neo-show-hidden-files nil
projectile-switch-project-action 'neotree-projectile-action))
(defun set-package-customizations ()
(with-eval-after-load 'comment-tags
(add-to-list 'comment-tags-keywords "ANCHOR")
(add-to-list 'comment-tags-keywords "SECTION"))
(with-eval-after-load 'ensime
(setq-default ensime-startup-notification nil))
(with-eval-after-load 'imenu-list
(setq-default
imenu-list-auto-resize t
;;imenu-list-focus-after-activation t
))
(with-eval-after-load 'js2-mode
(js2-imenu-extras-setup))
(with-eval-after-load 'olivetti
(setq-default olivetti-body-width 80))
(with-eval-after-load 'smart-mode-line
(setq-default sml/shorten-modes t
sml/mode-width 'full
sml/theme 'respectful))
(with-eval-after-load 'web-mode
(setq-default
web-mode-enable-current-column-highlight t
web-mode-enable-current-element-highlight t
web-mode-markup-indent-offset 2))
(with-eval-after-load 'smartparens
(setq-default sp-use-subword t)
(sp-with-modes 'fsharp-mode
(sp-local-pair "(*" "*)"))
(sp-with-modes 'racket-mode
(sp-local-pair "#|" "|#"))
(sp-with-modes 'web-mode
(sp-local-pair "<" ">"))))
;;---{ Theme and Font }---------------------------
;; > Themes <
(defvar my/favorite-themes-list
'(atom-one-dark
challenger-deep
darktooth
exotica
farmhouse-dark
gruvbox-dark-hard
gotham
grandshell
hamburg
kaolin-bubblegum
kaolin-valley-dark
majaphit-dark
night-owl
one-dark
overcast
srcery
suscolors
twilight-anti-bright
zerodark
zweilight))
(defvar my/theme 'challenger-deep)
;; > Fonts <
;; Font Previews:
;; http://app.programmingfonts.org/
;; https://github.com/chrissimpkins/codeface
(defvar my/favorite-fonts-list
'("Input-12"
"CamingoCode-13"
"Edlo-12"
"Hack-12"
"Envy Code R-13"
"Sudo-16"
"Consola Mono-12"
"Fantasque Sans Mono-13"
"Monoid-12"
"Office Code Pro-13"
"Consolas-13"
"Oxygen Mono-11"
"Inconsolata-13"
"MonoOne-12"
"Metrickal-11"
"Mensch-12"
"Aurulent Sans Mono-11"
"Audimat Mono-13"
"Bront-14"
"Luculent-12"
"Hermit-12"
"Unispace-12"
"String Literal-10"
"Pointfree-13"))
(defvar my/proportional-fonts-list
'("B612-14"
"Lexia Readable-13"
"Vollkorn-13"
"Roboto-13"))
(defvar my/monospace-font "Input-12")
(defvar my/proportional-font "B612-14")
;; > Set Theme and Font <
(defun set-theme-and-font ()
(interactive)
;; Theme Settings
(setq-default kaolin-themes-comments-style 'alt)
;; Load Theme
(load-theme my/theme)
;; Set Fonts
(add-to-list 'default-frame-alist `(font . ,my/monospace-font))
(add-to-list 'initial-frame-alist `(font . ,my/monospace-font))
(set-face-font 'default my/monospace-font)
(set-face-font 'fixed-pitch my/monospace-font)
(set-face-font 'fixed-pitch-serif my/monospace-font)
(set-face-font 'variable-pitch my/proportional-font)
;; Set Faces
(with-eval-after-load 'hl-line
(set-face-background 'line-number-current-line
(face-background 'hl-line)))
(with-eval-after-load 'which-func
(set-face-foreground 'which-func
(face-foreground 'font-lock-function-name-face)))
(with-eval-after-load 'stripe-buffer
(set-face-background 'stripe-highlight
(face-background 'mode-line-inactive))
(set-face-background 'stripe-hl-line
(face-background 'cua-rectangle))
(set-face-foreground 'stripe-hl-line
(face-foreground 'cua-rectangle)))
;; Set Eshell Prompt Theme
(with-eval-after-load 'esh-opt
(autoload 'epe-theme-lambda "eshell-prompt-extras")
(setq-default
eshell-highlight-prompt nil
eshell-prompt-function 'epe-theme-lambda))
;; Set Window Size
(add-to-list 'default-frame-alist '(width . 95)))
;;---{ Global Modes }-----------------------------
(defun set-global-modes ()
(interactive)
(beacon-mode t)
(column-number-mode t)
(counsel-mode t)
(cua-selection-mode t)
(delete-selection-mode t)
(eyebrowse-mode t)
(eyebrowse-setup-opinionated-keys)
(global-display-theme-mode t)
(global-hl-line-mode t)
(global-subword-mode t)
(ivy-mode t)
(menu-bar-mode -1)
(projectile-mode t)
(scroll-bar-mode -1)
(show-paren-mode t)
(smart-mode-line-enable t)
(tool-bar-mode -1)
(which-function-mode t)
(which-key-mode t))
(defun setup-preferences ()
(set-global-variable-preferences)
(set-package-customizations)
(set-global-modes)
(set-theme-and-font))
(add-hook 'emacs-startup-hook #'setup-preferences)
;;---{ Dashboard }--------------------------------
(setq-default
dashboard-startup-banner 'logo
dashboard-items '((recents . 7)
(projects . 10)
(bookmarks . 5)))
(dashboard-setup-startup-hook)
;;===[ MODE HOOKS ]=============================================================
;;---{ Mode Setup Functions }---------------------
;;... Generic Preferences ...
(defun set-programming-preferences ()
;; > Variables <
(setq
display-line-numbers t
electric-pair-mode nil
line-spacing 2
show-trailing-whitespace t
tab-always-indent nil
;;whitespace-style '(face trailing tabs empty)
)
;; > Modes <
(auto-revert-mode t)
(comment-tags-mode t)
(company-mode t)
(company-quickhelp-mode t)
(diff-hl-mode t)
(highlight-parentheses-mode t)
(hs-minor-mode t)
(indent-guide-mode t)
(rainbow-delimiters-mode t)
(smartparens-mode t)
(visual-line-mode t)
(whitespace-cleanup-mode t))
(defun set-writing-preferences ()
;; >Variables <
(setq line-spacing 4)
;; > Modes <
(auto-revert-mode t)
(diff-hl-mode t)
(electric-pair-local-mode t)
;;(flyspell-mode t)
(highlight-parentheses-mode t)
(olivetti-mode t)
(variable-pitch-mode t)
(visual-line-mode t)
;; > Selective Modes <
;; Don't cleanup trailing whitespace in Markdown
(unless (or (equal major-mode 'markdown-mode)
(equal major-mode 'gfm-mode))
(whitespace-cleanup-mode t)))
;;... Specific Mode Preferences ...
(defun set-ibuffer-preferences ()
(ibuffer-auto-mode t)
(ibuffer-projectile-set-filter-groups)
;;(ibuffer-vc-set-filter-groups-by-vc-root)
(stripe-buffer-mode t)
(stripe-listify-buffer))
(defun set-lisp-preferences ()
;; > Modes <
(electric-pair-local-mode nil)
(highlight-quoted-mode t)
(lisp-extra-font-lock-mode t)
(smartparens-strict-mode t)
;; > Selective Modes <
(when (equal major-mode 'emacs-lisp-mode)
(highlight-defined-mode t))
;; > Smartparens Config <
;; Disable completion for single/back-quotes
(sp-local-pair major-mode "'" nil :actions nil)
(sp-local-pair major-mode "`" nil :actions nil))
(defun set-org-preferences ()
(setq-default
org-hide-emphasis-markers t
org-list-allow-alphabetical t
org-startup-indented t
org-startup-truncated nil
org-support-shift-select t)
(org-indent-mode t))
(defun set-package-listing-preferences ()
(stripe-buffer-mode t)
(stripe-listify-buffer))
;;---{ Hook Assignments }-------------------------
(add-hook 'dired-mode-hook #'diredfl-mode)
(add-hook 'ibuffer-mode-hook #'set-ibuffer-preferences)
(add-hook 'package-menu-mode-hook #'set-package-listing-preferences)
(add-hook 'prog-mode-hook #'set-programming-preferences)
(add-hook 'text-mode-hook #'set-writing-preferences)
;;... Language Specific ...
(add-hook 'c++-mode-hook #'modern-c++-font-lock-mode)
(add-hook 'clojure-mode-hook #'set-lisp-preferences)
(add-hook 'cider-mode-hook #'set-lisp-preferences)
(add-hook 'emacs-lisp-mode-hook #'set-lisp-preferences)
(add-hook 'eshell-mode-hook #'smartparens-mode)
(add-hook 'lisp-mode-hook #'set-lisp-preferences)
(add-hook 'org-mode-hook #'set-org-preferences)
(add-hook 'python-mode-hook #'anaconda-mode)
(add-hook 'python-mode-hook #'anaconda-eldoc-mode)
(add-hook 'racket-mode-hook #'set-lisp-preferences)
(add-hook 'racket-repl-mode-hook #'smartparens-mode)
(add-hook 'slime-lisp-mode-hook #'smartparens-mode)
(add-hook 'web-mode-hook #'smartparens-mode)
;;(add-hook 'eshell-preoutput-filter-functions #'ansi-color-apply)
;;---{ File Associations }------------------------
(add-to-list 'auto-mode-alist '("\\.eslintrc\\'" . json-mode))
(add-to-list 'auto-mode-alist '("\\.jshintrc\\'" . json-mode))
(add-to-list 'auto-mode-alist '("\\.dl\\'" . prolog-mode))
(add-to-list 'auto-mode-alist '("done\\.txt\\'" . todotxt-mode))
(add-to-list 'auto-mode-alist '("todo\\.txt\\'" . todotxt-mode))
(add-to-list 'auto-mode-alist '("\\.html?\\'" . web-mode))
(add-to-list 'auto-mode-alist '("\\.raml\\'" . yaml-mode))
;;===[ KEYBINDINGS ]============================================================
(defun set-global-keys ()
(global-set-key (kbd "C-=") #'er/expand-region)
(global-set-key (kbd "C-;") #'iedit-mode)
(global-set-key (kbd "C-c a") #'align-regexp)
(global-set-key (kbd "C-c c b") #'comment-box)
(global-set-key (kbd "C-c c l") #'comment-line)
(global-set-key (kbd "C-c c r") #'comment-region)
(global-set-key (kbd "C-c c u") #'uncomment-region)
(global-set-key (kbd "C-c d") #'delete-trailing-whitespace)
(global-set-key (kbd "C-c f") #'neotree-toggle)
(global-set-key (kbd "C-c F") #'counsel-faces)
(global-set-key (kbd "C-c g") #'glasses-mode)
(global-set-key (kbd "C-c m") #'counsel-imenu)
(global-set-key (kbd "C-c M") #'imenu-list-smart-toggle)
(global-set-key (kbd "C-c s s") #'eshell)
(global-set-key (kbd "C-c s t") #'ansi-term)
(global-set-key (kbd "C-c t") #'counsel-load-theme)
(global-set-key (kbd "C-c T") #'theme-looper-enable-next-theme)
(global-set-key (kbd "C-c w") #'ace-select-window)
(global-set-key (kbd "C-c z") #'eshell-z)
(global-set-key (kbd "C-c <tab>") #'switch-to-next-buffer)
(global-set-key (kbd "C-c <backtab>") #'switch-to-prev-buffer)
(global-set-key (kbd "C-c C-p") #'package-list-packages)
(global-set-key (kbd "C-c M-r") #'rename-buffer)
(global-set-key (kbd "C-h c") #'helpful-command)
(global-set-key (kbd "C-h f") #'helpful-callable)
(global-set-key (kbd "C-h F") #'helpful-function)
(global-set-key (kbd "C-h k") #'helpful-key)
(global-set-key (kbd "C-h v") #'helpful-variable)
(global-set-key (kbd "C-s") #'swiper)
(global-set-key (kbd "C-x +") #'zoom)
;;(global-set-key (kbd "C-x b") #'counsel-ibuffer)
(global-set-key (kbd "C-x B") #'ibuffer-sidebar-toggle-sidebar)
(global-set-key (kbd "C-x C-b") #'ibuffer)
(global-set-key (kbd "C-x C-f") #'counsel-find-file)
(global-set-key (kbd "M-x") #'counsel-M-x))
;;---{ Major Modes }------------------------------
(defun set-major-mode-keys ()
(with-eval-after-load 'css-mode
(defvar css-mode-map)
(define-key css-mode-map (kbd "C-c b") #'web-beautify-css)
(define-key css-mode-map (kbd "C-c S-c") #'counsel-colors-web))
(with-eval-after-load 'dired-mode
(defvar dired-mode-map)
(define-key dired-mode-map [return] #'dired-single-buffer)
(define-key dired-mode-map [mouse-1] #'dired-single-buffer))
;; Emacs Lisp Mode
(define-key emacs-lisp-mode-map (kbd "C-c S-c") #'counsel-colors-emacs)
(define-key emacs-lisp-mode-map (kbd "C-c C-b") #'eval-buffer)
(define-key emacs-lisp-mode-map (kbd "C-c C-r") #'eval-region)
(define-key emacs-lisp-mode-map (kbd "C-c C-c") #'compile-current-file)
(with-eval-after-load 'js2-mode
(defvar js2-mode-map)
(define-key js2-mode-map (kbd "C-c b") #'web-beautify-js))
(with-eval-after-load 'json-mode
(defvar json-mode-map)
(define-key json-mode-map (kbd "C-c b") #'web-beautify-js))
(with-eval-after-load 'sgml-mode
(defvar html-mode-map)
(define-key html-mode-map (kbd "C-c b") #'web-beautify-html))
(with-eval-after-load 'web-mode
(defvar web-mode-map)
(define-key web-mode-map (kbd "C-c b") #'web-beautify-html)))
;;---{ SmartParens }------------------------------
(defun set-smartparens-keys ()
;; Based on: https://ebzzry.io/en/emacs-pairs/
(with-eval-after-load 'smartparens
(sp-use-smartparens-bindings)
;;... Back/Forth ...
(define-key smartparens-mode-map (kbd "M-F") #'forward-word)
(define-key smartparens-mode-map (kbd "M-B") #'backward-word)
(define-key smartparens-mode-map (kbd "M-b") #'sp-backward-symbol)
(define-key smartparens-mode-map (kbd "M-f") #'sp-forward-symbol)
(define-key smartparens-mode-map (kbd "M-a") #'sp-beginning-of-sexp)
(define-key smartparens-mode-map (kbd "M-e") #'sp-end-of-sexp)
(define-key smartparens-mode-map (kbd "C-M-f") #'sp-forward-sexp)
(define-key smartparens-mode-map (kbd "C-M-b") #'sp-backward-sexp)
;;... S-Expression Movements ...
(define-key smartparens-mode-map (kbd "C-M-n") #'sp-next-sexp)
(define-key smartparens-mode-map (kbd "C-M-p") #'sp-previous-sexp)
(define-key smartparens-mode-map (kbd "C-<down>") #'sp-down-sexp)
(define-key smartparens-mode-map (kbd "C-<up>") #'sp-backward-up-sexp)
(define-key smartparens-mode-map (kbd "C-M-<down>") #'sp-backward-down-sexp)
(define-key smartparens-mode-map (kbd "C-M-<up>") #'sp-up-sexp)
;;... Wrapping/Unwrapping ...
(define-key smartparens-mode-map (kbd "C-c (") #'sp-wrap-round)
(define-key smartparens-mode-map (kbd "C-c [") #'sp-wrap-square)
(define-key smartparens-mode-map (kbd "C-c {") #'sp-wrap-curly)
(define-key smartparens-mode-map (kbd "M-[") #'sp-backward-unwrap-sexp)
(define-key smartparens-mode-map (kbd "M-]") #'sp-unwrap-sexp)
;;... Killing ...
(define-key smartparens-mode-map (kbd "M-D") #'kill-word)
(define-key smartparens-mode-map (kbd "M-d") #'sp-kill-word)
(define-key smartparens-mode-map (kbd "M-<backspace>") #'sp-backward-kill-word)
(define-key smartparens-mode-map (kbd "M-k") #'sp-kill-sexp)
(define-key smartparens-mode-map (kbd "M-K") #'sp-kill-hybrid-sexp)))
;;---{ Keybindings Hook }-------------------------
(defun set-custom-keybindings ()
(set-global-keys)
(set-major-mode-keys)
(set-smartparens-keys))
(add-hook 'emacs-startup-hook #'set-custom-keybindings)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment