ohmyzsh/.emacs
2015-04-24 15:40:42 -07:00

186 lines
6.6 KiB
Text

; list the packages you want
(setq package-list '(auctex expand-region gist magit magithub markdown-mode paredit projectile
python sass-mode rainbow-mode scss-mode solarized-theme anything
volatile-highlights evil evil-leader scala-mode2 sbt-mode flx-ido
js2-refactor tern tern-auto-complete yasnippet auto-complete
helm helm-ls-git dtrt-indent highlight-chars))
; list the repositories containing them
(setq package-archives '(("elpa" . "http://tromey.com/elpa/")
("gnu" . "http://elpa.gnu.org/packages/")
("marmalade" . "http://marmalade-repo.org/packages/")
("melpa" . "http://melpa.milkbox.net/packages/")))
; activate all the packages (in particular autoloads)
(package-initialize)
(unless package-archive-contents
(package-refresh-contents))
; install the missing packages
(dolist (package package-list)
(unless (package-installed-p package)
(package-install package)))
; Solarized Theme
(load-theme 'solarized-dark)
; Detect Indentation
(require 'dtrt-indent)
(dtrt-indent-mode t)
;; Use spaces instead of tabs
(setq-default indent-tabs-mode nil)
;; ;; Set tab to display as 4 spaces
(setq-default tab-width 4)
;; ;; Set stop-tabs to be 4 written as spaces
(setq-default tab-stop-list (number-sequence 4 120 4))
;; highlight tabs and trailing whitespace
(require 'highlight-chars)
(add-hook 'font-lock-mode-hook 'hc-highlight-tabs)
;(add-hook 'font-lock-mode-hook 'hc-highlight-trailing-whitespace)
; Enable VIM Mode
(global-evil-leader-mode)
(evil-mode 1)
(evil-leader/set-leader ",")
; Use evil-leader in magit and gnus mode
(setq evil-leader/no-prefix-mode-rx '("magit-.*-mode" "gnus-.*-mode"))
(evil-leader/set-key "t" 'helm-browse-project)
; Map escape to exit all modes
(define-key evil-normal-state-map [escape] 'keyboard-quit)
(define-key evil-visual-state-map [escape] 'keyboard-quit)
(define-key minibuffer-local-map [escape] 'minibuffer-keyboard-quit)
(define-key minibuffer-local-ns-map [escape] 'minibuffer-keyboard-quit)
(define-key minibuffer-local-completion-map [escape] 'minibuffer-keyboard-quit)
(define-key minibuffer-local-must-match-map [escape] 'minibuffer-keyboard-quit)
(define-key minibuffer-local-isearch-map [escape] 'minibuffer-keyboard-quit)
; Disable line wrapping
(setq-default truncate-lines t)
; UI Tweaks
(tool-bar-mode -1)
(scroll-bar-mode -1)
; Helm
(helm-mode 1)
(require 'helm-ls-git)
;; Ido
;(require 'flx-ido)
;(ido-mode 1)
;(ido-everywhere 1)
;(flx-ido-mode 1)
;;; disable ido faces to see flx highlights.
;(setq ido-enable-flex-matching t)
;(setq ido-use-faces nil)
;(setq projectile-enable-caching t)
;; Special GC Setting
;(setq gc-cons-threshold 20000000)
; Scala
; Load the ensime lisp code...
(add-to-list 'load-path "~/.emacs.d/ensime/elisp")
(require 'ensime)
(setq exec-path (append exec-path '("~/Work/universe/sbt")))
;; This step causes the ensime-mode to be started whenever
;; scala-mode is started for a buffer. You may have to customize this step
;; if you're not using the standard scala mode.
(add-hook 'scala-mode-hook 'ensime-scala-mode-hook)
; Javascript
; https://github.com/mooz/js2-mode.git
(add-to-list 'load-path "~/.emacs.d/js2-mode")
(require 'js2-mode)
(add-hook 'js-mode-hook 'js2-minor-mode)
(add-hook 'js2-mode-hook 'ac-js2-mode)
(setq js2-highlight-level 3)
(add-to-list 'auto-mode-alist '("\\.json$" . js-mode))
(setq js2-missing-semi-one-line-override t)
(setq js-indent-level 2)
(setq js2-basic-offset 1) ; 2 spaces for indentation (if you prefer 2 spaces instead of default 4 spaces for tab)
(setq c-basic-offset 2)
;; add from jslint global variable declarations to js2-mode globals list
;; modified from one in http://www.emacswiki.org/emacs/Js2Mode
(defun my-add-jslint-declarations ()
(when (> (buffer-size) 0)
(let ((btext (replace-regexp-in-string
(rx ":" (* " ") "true") " "
(replace-regexp-in-string
(rx (+ (char "\n\t\r "))) " "
;; only scans first 1000 characters
(save-restriction (widen) (buffer-substring-no-properties (point-min) (min (1+ 1000) (point-max)))) t t))))
(mapc (apply-partially 'add-to-list 'js2-additional-externs)
(split-string
(if (string-match (rx "/*" (* " ") "global" (* " ") (group (*? nonl)) (* " ") "*/") btext)
(match-string-no-properties 1 btext) "")
(rx (* " ") "," (* " ")) t))
)))
(add-hook 'js2-post-parse-callbacks 'my-add-jslint-declarations)
;;; yasnippet
;;; should be loaded before auto complete so that they can work together
(require 'yasnippet)
(yas-global-mode 1)
;;; auto complete mod
;;; should be loaded after yasnippet so that they can work together
(require 'auto-complete-config)
(add-to-list 'ac-dictionary-directories "~/.emacs.d/ac-dict")
(ac-config-default)
;;; set the trigger key so that it can work together with yasnippet on tab key,
;;; if the word exists in yasnippet, pressing tab will cause yasnippet to
;;; activate, otherwise, auto-complete will
(ac-set-trigger-key "TAB")
(ac-set-trigger-key "<tab>")
; Tern auto completion, install tern
; sudo npm install -g tern
(add-hook 'js-mode-hook (lambda () (tern-mode t)))
(eval-after-load 'tern
'(progn
(require 'tern-auto-complete)
(tern-ac-setup)))
; Gpicker
; git clone https://github.com/emacsmirror/gpicker.git 1 ↵ ✭
;(add-to-list 'load-path "~/.emacs.d/gpicker")
;(require 'gpicker)
;(setq exec-path (append exec-path '("~/.emacs.d/gpicker")))
; Powerline
; https://github.com/Dewdrops/powerline.git
(add-to-list 'load-path "~/.emacs.d/powerline")
(require 'powerline)
(powerline-center-evil-theme)
; Projectile Project Management
;(projectile-global-mode)
; Debug
;(setq debug-on-error t)
; Disable Stupid Bell
(setq ring-bell-function #'ignore)
(custom-set-variables
;; 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.
'(custom-safe-themes (quote ("8aebf25556399b58091e533e455dd50a6a9cba958cc4ebb0aab175863c25b9a4" default)))
'(tool-bar-mode nil))
(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.
'(default ((t (:family "Menlo" :foundry "nil" :slant normal :weight normal :height 110 :width normal)))))