/my_spacemacs_config

My Personal Spacemacs Configuration

Primary LanguageEmacs Lisp

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