Spacemacs 사용환경 관리

Vim 과 Emacs의 장점을 결합한 만큼 별 고민없이 사용하게 해주면 좋겠지만 설정에 따라 빈번히 빡치게 하는 경우가 생긴다. spacemacs-layers 리스트에 레이어를 하나 넣을 때마다 몇 십개씩 추가로 설치되는 패키지 덕분에 이것 저것 넣다보면 200개는 우습고 300개 가까운 패키지가 로딩되어  결국 커서 하나 움직이기 힘들게 된다.

쌓여가는 설정의 어느 부분에서 문제를 만들어 내는지 찾아내는 것도 일이다. 에디터 주제에 운영체제 부팅하듯 시간 먹기 때문인데, 아무리 건드리지 않고 냅두고 냅둬도 어느때 보면 문제가 발생한다… 무료로 쓰게 해줘서 윽쑤로 고맙긴한데 부대비용이 만만찮네.  그치만 helm-swoop, isearch,  magit, org-mode 때문에 Spacemacs를 버릴수가 없다.  결국 날잡고 짱돌을 굴려 키맵핑과 기본 환경의 혜택은 누리되 아메바처럼 증식하는 패키지 사용을 막고  Spacemacs에 미리 정의된 layer를 가능한 쓰지 않으며 직접 리소스 관리를 하기위해  소스(~/.emacs.d/layers/*)와 설정파일(~/.spacemacs), 패키지(~/.emacs/elpa), 커스톰 설정을 분리해서 사용목적에 따라 필요한 환경을 스위칭을 할 수 있게 구성했다. 

 

조건에 따른 커스톰 설정파일 로드

Spacemacs 환경관리 패키지

 

nginx, apache, php 등의 패키지가 사용한 방법처럼, 설정을 그룹단위로 묶어 confs-available/ 폴더에 넣는다.

사용할 환경에 따라 최적화된 설정을 모아둔 각각의 confs-FEATURE 폴더에는 confs-available/ 파일로 심볼릭 링크를 건다. 

설정을 키고/끄는 과정을 쉽게 하기위해 bin/ 폴더아래 Bash 스크립트를 만들어 enable 002, disable 045 등과 같이 사용한다.

confs-available/ 폴더에는 모든 설정파일을 둔다
confs-available/ 폴더내의 Clojure 코딩에 필요한 설정파일을 confs-clojure/ 폴더로 링크건다

이제 ~/.spacemacs 내에서는 단순히 confs-enabled/ 라는  폴더내의 설정을 모두 읽어 들이면 된다.


;; in spacemacs/spacemacs-user-config()
(defun dotspacemacs/user-config ()

  ;; use symbolic linked start-up file
  (setq vc-follow-symlinks t)

  (defun andrwj/load-configurations (dir)
  (let 1load-it (lambda (f)
       (load-file (concat (file-name-as-directory dir) f)
     ))
	(mapc load-it (directory-files dir nil "\\.el$"))))
  (andrwj/load-configurations "~/Develops/Spacemacs/dot-spacemacs/confs-enabled")

  )
조건에 따라 ~/.emacs.d  브랜치를 바꾼다

Spacemacs와 Emacs 세계를 더 잘알게되면 아마 이렇게 까지 할 필요없을 것이다. 그러나 지금 내겐 이런 무식한 방법이라도 유용하다.

confs-clojure/, confs-base/, confs-javascript/ 등에 따라 bin/use Bash 스크립트로 필요한 패키지와 설정이 담긴 브랜치로 옮기게 했다. 

Spacemacs의 패키지 관리 부분을 뜯어고치기보단 이런 편이 더 쉽다.

구성에 따라 심볼릭 링크와 브랜치 전환을 스크립트가 해결해준다

추가 되면 좋을 법한 것들
  • 원격 패키지 저장소보다 로컬에 복사된 Melpa/GNU/Org/Marmalade repository를 사용하게 하기
  • 불필요한 패키지를 솎아내서 조금이라도 가볍게 하기

 

 

지금으로썬 희망사항일 뿐이다.

References   [ + ]

1. load-it (lambda (f) (load-file (concat (file-name-as-directory dir) f