Create a gist now

Instantly share code, notes, and snippets.

@huytd /emacs.md
Last active Jul 18, 2018

Embed
What would you like to do?
My minimal Emacs config

Screenshot:

Font: Iosevka-11

;; Package configs
(require 'package)
(setq package-enable-at-startup nil)
(setq package-archives '(("org" . "http://orgmode.org/elpa/")
("gnu" . "http://elpa.gnu.org/packages/")
("melpa" . "https://melpa.org/packages/")))
(package-initialize)
;; Bootstrap `use-package`
(unless (package-installed-p 'use-package)
(package-refresh-contents)
(package-install 'use-package))
(require 'use-package)
;; PATH
(let ((path (shell-command-to-string ". ~/.bash_profile; echo -n $PATH")))
(setenv "PATH" path)
(setq exec-path
(append
(split-string-and-unquote path ":")
exec-path)))
;; Some term enhancement
(defadvice term-sentinel (around my-advice-term-sentinel (proc msg))
(if (memq (process-status proc) '(signal exit))
(let ((buffer (process-buffer proc)))
ad-do-it
(kill-buffer buffer))
ad-do-it))
(ad-activate 'term-sentinel)
(defadvice ansi-term (before force-bash)
(interactive (list "/bin/zsh")))
(ad-activate 'ansi-term)
;; Other configs
(setq make-backup-files nil)
(setq auto-save-default nil)
;; Splash Screen
(setq inhibit-startup-screen t)
(setq initial-scratch-message ";; Happy Hacking")
;; Show matching parens
(setq show-paren-delay 0)
(show-paren-mode 1)
;; Paragraph movement
(global-set-key (kbd "s-j") 'forward-paragraph)
(global-set-key (kbd "s-k") 'backward-paragraph)
;; Keybinding for term mode
(add-hook 'term-mode
(lambda () (global-set-key (kbd "s-v") 'term-paste)))
;; OrgMode Configs
(setq org-html-validation-link nil)
(setq org-todo-keywords
'((sequence "TODO" "WORKING" "HOLD" "|" "DONE")))
(setq org-todo-keyword-faces
'(("TODO" . "blue")
("WORKING" . "yellow")
("HOLD" . "red")
("DONE" . "green")))
;; UI configurations
(scroll-bar-mode -1)
(tool-bar-mode -1)
(tooltip-mode -1)
(menu-bar-mode -1)
(global-linum-mode 1)
(add-to-list 'default-frame-alist '(font . "Iosevka-11"))
(add-to-list 'default-frame-alist '(height . 24))
(add-to-list 'default-frame-alist '(width . 80))
;; Vim mode
(use-package evil
:ensure t
:config
(evil-mode 1))
(use-package evil-escape
:ensure t
:init
(setq-default evil-escape-key-sequence "jk")
:config
(evil-escape-mode 1))
;; Anzu for search matching
(use-package anzu
:ensure t
:config
(global-anzu-mode 1)
(global-set-key [remap query-replace-regexp] 'anzu-query-replace-regexp)
(global-set-key [remap query-replace] 'anzu-query-replace))
;; Theme
(use-package doom-themes
:ensure t
:config
(load-theme 'doom-one t))
;; Helm
(use-package helm
:ensure t
:init
(setq helm-M-x-fuzzy-match t
helm-mode-fuzzy-match t
helm-buffers-fuzzy-matching t
helm-recentf-fuzzy-match t
helm-locate-fuzzy-match t
helm-semantic-fuzzy-match t
helm-imenu-fuzzy-match t
helm-completion-in-region-fuzzy-match t
helm-candidate-number-list 80
helm-split-window-in-side-p t
helm-move-to-line-cycle-in-source t
helm-echo-input-in-header-line t
helm-autoresize-max-height 0
helm-autoresize-min-height 20)
:config
(helm-mode 1))
;; RipGrep
(use-package helm-rg :ensure t)
;; Projectile
(use-package projectile
:ensure t
:init
(setq projectile-require-project-root nil)
:config
(projectile-mode 1))
;; Helm Projectile
(use-package helm-projectile
:ensure t
:init
(setq helm-projectile-fuzzy-match t)
:config
(helm-projectile-on))
;; All The Icons
(use-package all-the-icons :ensure t)
;; NeoTree
(use-package neotree
:ensure t
:init
(setq neo-theme (if (display-graphic-p) 'icons 'arrow)))
;; Which Key
(use-package which-key
:ensure t
:init
(setq which-key-separator " ")
(setq which-key-prefix-prefix "+")
:config
(which-key-mode))
;; Custom keybinding
(use-package general
:ensure t
:config (general-define-key
:states '(normal visual insert emacs)
:prefix "SPC"
:non-normal-prefix "M-SPC"
"/" '(helm-projectile-rg :which-key "ripgrep")
"TAB" '(switch-to-prev-buffer :which-key "previous buffer")
"SPC" '(helm-M-x :which-key "M-x")
"pf" '(helm-projectile-find-file :which-key "find files")
"pp" '(helm-projectile-switch-project :which-key "switch project")
"pb" '(helm-projectile-switch-to-buffer :which-key "switch buffer")
"pr" '(helm-show-kill-ring :which-key "show kill ring")
;; Buffers
"bb" '(helm-mini :which-key "buffers list")
;; Window
"wl" '(windmove-right :which-key "move right")
"wh" '(windmove-left :which-key "move left")
"wk" '(windmove-up :which-key "move up")
"wj" '(windmove-down :which-key "move bottom")
"w/" '(split-window-right :which-key "split right")
"w-" '(split-window-below :which-key "split bottom")
"wx" '(delete-window :which-key "delete window")
"qz" '(delete-frame :which-key "delete frame")
"qq" '(kill-emacs :which-key "quit")
;; NeoTree
"ft" '(neotree-toggle :which-key "toggle neotree")
;; Others
"at" '(ansi-term :which-key "open terminal")
))
;; Fancy titlebar for MacOS
(add-to-list 'default-frame-alist '(ns-transparent-titlebar . t))
(add-to-list 'default-frame-alist '(ns-appearance . dark))
(setq ns-use-proxy-icon nil)
(setq frame-title-format nil)
(custom-set-variables
;; Flycheck
(use-package flycheck
:ensure t
:init (global-flycheck-mode))
;; LSP
(use-package lsp-mode
:ensure t
:init
(add-hook 'prog-major-mode #'lsp-prog-major-mode-enable))
(use-package lsp-ui
:ensure t
:init
(add-hook 'lsp-mode-hook 'lsp-ui-mode))
;; Company mode
(use-package company
:ensure t
:config
(global-company-mode 1))
;; Powerline
(use-package spaceline
:ensure t
:init
(setq powerline-default-separator 'slant)
:config
(spaceline-emacs-theme)
(spaceline-toggle-minor-modes-off)
(spaceline-toggle-buffer-size-off)
(spaceline-toggle-evil-state-on))
;;;;;;;;;;;;;;;;;;;;;;;
;; Language Supports ;;
;;;;;;;;;;;;;;;;;;;;;;;
;; JavaScript
(use-package js2-mode
:ensure t
:init
(add-to-list 'auto-mode-alist '("\\.js\\'" . js2-mode)))
(use-package tern :ensure t)
;; Rust
(use-package rust-mode
:ensure t
:init
(add-to-list 'auto-mode-alist '("\\.rs\\'" . rust-mode)))
(use-package lsp-rust
:ensure t
:init
(setq lsp-rust-rls-command '("rustup" "run" "nightly" "rls"))
(add-hook 'rust-mode-hook #'lsp-rust-enable)
(add-hook 'rust-mode-hook #'flycheck-mode))
;; Typescript
(use-package typescript-mode
:ensure t
:init
(add-to-list 'auto-mode-alist '("\\.ts\\'" . typescript-mode)))
(use-package tide
:ensure t
:after (typescript-mode company flycheck)
:hook ((typescript-mode . tide-setup)
(typescript-mode . tide-hl-identifier-mode)))
;; Auto-generated
;; custom-set-variables was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
'(package-selected-packages
(quote
(general which-key helm doom-themes evil use-package))))
(custom-set-faces
;; custom-set-faces was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
)
@curtisault

This comment has been minimized.

Show comment
Hide comment
@curtisault

curtisault Jul 2, 2018

"pf" '(helm-find-file :which-key "find files") did not work for me.
"pf" '(helm-find-files :which-key "find files") did.

Albeit, I've changed mine to "ff".

"pf" '(helm-find-file :which-key "find files") did not work for me.
"pf" '(helm-find-files :which-key "find files") did.

Albeit, I've changed mine to "ff".

@huytd

This comment has been minimized.

Show comment
Hide comment
@huytd

huytd Jul 2, 2018

Yeah, it should be files not file, my bad :D I also switched to helm-projectile-find-file already.

Owner

huytd commented Jul 2, 2018

Yeah, it should be files not file, my bad :D I also switched to helm-projectile-find-file already.

@curtisault

This comment has been minimized.

Show comment
Hide comment
@curtisault

curtisault Jul 2, 2018

Last night I found out how to increase/decrease font size so i added the following:

"ti"  '(text-scale-increase :which-key "text scale increase")
"td"  '(text-scale-decrease :which-key "text scale decrease")

curtisault commented Jul 2, 2018

Last night I found out how to increase/decrease font size so i added the following:

"ti"  '(text-scale-increase :which-key "text scale increase")
"td"  '(text-scale-decrease :which-key "text scale decrease")
@dogayuksel

This comment has been minimized.

Show comment
Hide comment
@dogayuksel

dogayuksel Jul 5, 2018

which build of emacs is this?
Version 26.1-2 from emacsformacosx doesn't have ns-use-proxy-icon variable.
And setting frame-title-format nil doesn't work consistently.

dogayuksel commented Jul 5, 2018

which build of emacs is this?
Version 26.1-2 from emacsformacosx doesn't have ns-use-proxy-icon variable.
And setting frame-title-format nil doesn't work consistently.

@huytd

This comment has been minimized.

Show comment
Hide comment
@huytd

huytd Jul 5, 2018

I use the latest version on brew. Or you can use railwaycat's emacmacport.

Owner

huytd commented Jul 5, 2018

I use the latest version on brew. Or you can use railwaycat's emacmacport.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment