My Spacemacs Configuration
Auto Completion
(auto-completion :variables
auto-completion-front-end 'company
auto-completion-tab-key-behavior 'cycle
auto-completion-complete-with-key-sequence-delay 0
auto-completion-enable-snippets-in-popup t
auto-completion-usr-company-box t
auto-completion-enable-sort-by-usage t)
;; auto-completion-enable-tabnine t)
Typescript / Javascript
(javascript :variables
javascript-indent-level 2
javascript-backend 'lsp)
(typescript :variables
typescript-indent-level 2
typescript-backend 'lsp
typescript-linter 'eslint
typescript-fmt-tool 'prettier)
ORG Mode
(org :variables
org-enable-github-support t
org-enable-bootstrap-support t
org-projectile-file "TODOs.org"
org-enable-epub-support t)
Frontend Vue.js
(vue :variables
web-mode-markup-indent-offset 2
web-mode-css-indent-offset 2
web-mode-code-indent-offset 2
web-mode-attr-indent-offset 2
vue-backend 'lsp)
Wakatime
API-KEY는 노출을 막기위해 별도의 파일로 관리한다.
(wakatime :variables
;; use the actual wakatime path
wakatime-cli-path "/usr/local/bin/wakatime")
Extra Packages
dotspacemacs-additional-packages '(
nyan-mode
drag-stuff
magit-delta
evil-smartparens
beacon
helm-icons
rg
carbon-now-sh
dimmer
)
Custom Function
Edit Shell init file
(defun er-find-shell-init-file ()
"Edit the shell init file in another window"
(interactive)
(let* ((shell (car (reverse (split-string (getenv "SHELL") "/"))))
(shell-init-file (cond
((string-equal "zsh" shell) ".zshrc")
((string-equal "bash" shell) ".bashrc")
(t (error "Unkown shell")))))
(find-file-other-window (expand-file-name shell-init-file (getenv "HOME")))))
Save/Load Previous Emacs Window Position
;; save/read windows layout
;; 구글링을 한 끝에 찾아낸 유용한 함수들
;; 이하의 함수들은 이맥스가 시작하고 종료될때 훅으로 실행되도록
;; general.el파일에 설정이 들어가 있다.
(defun save-framegeometry ()
"Gets the current frame's geometry and saves to ~/.emacs.d/framegeometry."
(let (
(framegeometry-left (frame-parameter (selected-frame) 'left))
(framegeometry-top (frame-parameter (selected-frame) 'top))
(framegeometry-width (frame-parameter (selected-frame) 'width))
(framegeometry-height (frame-parameter (selected-frame) 'height))
(framegeometry-file (expand-file-name "~/.emacs.d/framegeometry"))
)
(when (not (number-or-marker-p framegeometry-left))
(setq framegeometry-left 0))
(when (not (number-or-marker-p framegeometry-top))
(setq framegeometry-top 0))
(when (not (number-or-marker-p framegeometry-width))
(setq framegeometry-width 0))
(when (not (number-or-marker-p framegeometry-height))
(setq framegeometry-height 0))
(with-temp-buffer
(insert
";;; This is the previous emacs frame's geometry.\n"
";;; Last generated " (current-time-string) ".\n"
"(setq initial-frame-alist\n"
" '(\n"
(format " (top . %d)\n" (max framegeometry-top 0))
(format " (left . %d)\n" (max framegeometry-left 0))
(format " (width . %d)\n" (max framegeometry-width 0))
(format " (height . %d)))\n" (max framegeometry-height 0)))
(when (file-writable-p framegeometry-file)
(write-file framegeometry-file))))
)
(defun load-framegeometry ()
(let ((framegeometry-file (expand-file-name "~/.emacs.d/framegeometry")))
(when (file-readable-p framegeometry-file)
(load-file framegeometry-file)))
)
Custom Setqs
Fine Tune for Performance
(setq echo-keystrokes 0.001)
;; 이맥스를 맥에서 쓰다보면 스크롤이 엄청 느려지는 경우가 있다.
;; 여러 이슈들을 확인한 결과 어쩔수 없다 함.
;; 해당 현상을 완화하는데 조금이나마 도움이 된다하여서
;; 구글링을 통해 찾은 각종 튜닝들을 여기다가 넣어 놓았다.
(setq scroll-conservatively 101)
(add-to-list 'default-frame-alist '(inhibit-double-buffering . t))
;; setup lsp fine tune
(setq gc-cons-threshold 100000000)
(setq read-process-output-max (* 1024 1024)) ;; 1mb
(setq lsp-completion-provider :capf)
(setq lsp-idle-delay 0.500)
Make Spaceline more simple
(with-eval-after-load 'spaceline-segments
(spaceline-toggle-minor-modes-off)
(spaceline-toggle-buffer-size-off))
Magit
;; vc, magit config
(setq vc-follow-symlinks t)
(setq find-file-visit-truename t)
(setq magit-refresh-status-buffer 'switch-to-buffer)
(setq magit-rewrite-inclusive 'ask)
(setq magit-save-some-buffers t)
(setq magit-set-upstream-on-push 'askifnotset)
Rg
;; rg setup
(setq rg-group-result t)
(setq rg-hide-command t)
(setq rg-show-columns nil)
(setq rg-show-header t)
(setq rg-custom-type-aliases nil)
(setq rg-default-alias-fallback "all")
Custom Bindings
Surrond
;; surround binding
(evil-define-key 'visual evil-surround-mode-map "s" 'evil-substitute)
(evil-define-key 'visual evil-surround-mode-map "S" 'evil-surround-region)
Line or Block Move Up/Down
;; line move binding
(global-set-key (kbd "C-S-k") 'drag-stuff-up)
(global-set-key (kbd "C-S-j") 'drag-stuff-down)
Move to Head / End of Line faster
(evil-global-set-key 'normal "H" 'evil-first-non-blank)
(evil-global-set-key 'visual "H" 'evil-first-non-blank)
(evil-global-set-key 'motion "H" 'evil-first-non-blank)
(evil-global-set-key 'normal "L" (lambda () (interactive) (evil-end-of-line)))
(evil-global-set-key 'visual "L" (lambda () (interactive) (evil-end-of-line)))
(evil-global-set-key 'motion "L" (lambda () (interactive) (evil-end-of-line)))
Jump Line or 2 Char Faster
(define-key evil-motion-state-map "gl" 'evil-avy-goto-line)
(define-key evil-normal-state-map "gl" 'evil-avy-goto-line)
(define-key evil-motion-state-map "gw" 'evil-avy-goto-char-2)
(define-key evil-normal-state-map "gw" 'evil-avy-goto-char-2)
Doom Emacs style Buffer list
(spacemacs/set-leader-keys "," 'helm-projectile-switch-to-buffer)
Custom Faces
Helm Selection more Readable
(helm-selection ((t (:extend t :background "VioletRed4" :foreground "gray100" :inverse-video nil))))