Created
April 4, 2017 17:37
-
-
Save lefthandedgoat/6d63f9f3cbe9f84ea077d67779a038e5 to your computer and use it in GitHub Desktop.
my emacs config
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;; require package managers, but we'll avoid them if at all possible | |
(require 'package) | |
(push '("melpa" . "http://melpa.milkbox.net/packages/") | |
package-archives) | |
;;===================================== | |
;;plugins | |
;;===================================== | |
(setq package-list '( | |
exec-path-from-shell | |
evil | |
evil-leader | |
color-theme | |
key-chord | |
ido-vertical-mode | |
flx-ido | |
osx-clipboard | |
expand-region | |
ace-jump-mode | |
full-ack | |
web-mode | |
helm | |
go-mode | |
fsharp-mode | |
ag | |
auto-complete | |
;;js2-mode | |
;;flycheck | |
;;monokai-theme | |
;;color-theme-sanityinc-solarized | |
;;color-theme-sanityinc-tomorrow | |
hipster-theme | |
projectile)) | |
(package-initialize) | |
(unless package-archive-contents | |
(package-refresh-contents)) | |
(dolist (package package-list) | |
(unless (package-installed-p package) | |
(package-install package))) | |
(require 'ido) | |
(require 'exec-path-from-shell) | |
(require 'evil) | |
(require 'evil-leader) | |
(require 'color-theme) | |
(require 'key-chord) | |
(require 'projectile) | |
(require 'ido-vertical-mode) | |
(require 'flx-ido) | |
(require 'osx-clipboard) | |
(require 'expand-region) | |
(require 'ace-jump-mode) | |
(require 'helm) | |
(require 'go-mode) | |
(require 'fsharp-mode) | |
(require 'auto-complete) | |
(require 'full-ack) | |
(require 'web-mode) | |
;;(require 'js2-mode) | |
;;(require 'flycheck) | |
;;===================================== | |
;;general configuration | |
;;===================================== | |
(menu-bar-mode -1) ;;remove menu bar | |
(define-key global-map (kbd "RET") 'newline-and-indent) ;;auto indent on new line | |
(setq-default truncate-lines t) | |
(setq js-indent-level 4) | |
(setq default-tab-width 4) | |
;;===================================== | |
;;evil leader | |
;;===================================== | |
(defun amir/touch () | |
"Run touch command on current file." | |
(interactive) | |
(when buffer-file-name | |
(shell-command (concat "touch " (shell-quote-argument buffer-file-name))) | |
(clear-visited-file-modtime))) | |
(defun amir/tab-space-four () | |
"Sets javascript and default tab space to four spaces." | |
(interactive) | |
(setq js-indent-level 4) | |
(setq default-tab-width 4)) | |
(global-evil-leader-mode) | |
(evil-leader/set-leader ",") | |
(evil-leader/set-key | |
"r" 'fsharp-eval-region | |
"e" 'fsharp-eval-phrase | |
"j" 'ace-jump-line-mode | |
"w" 'ace-jump-char-mode | |
"m" 'evil-window-vnew | |
"g" 'projectile-find-file | |
"f" 'next-error | |
"d" 'previous-error | |
"c" 'compile | |
"b" 'fsharp-ac/gotodefn-at-point | |
"t" 'fsharp-ac/show-tooltip-at-point | |
"q" 'fsharp-ac/stop-process | |
"p" 'fsharp-ac/load-project | |
"4" 'amir/tab-space-four | |
"-" 'ido-dired | |
"i" 'install-packages) | |
;;===================================== | |
;; evil configuration | |
;;===================================== | |
(evil-mode 1) | |
(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) | |
(add-hook 'fsharp-mode-hook | |
(lambda () | |
(define-key fsharp-mode-map (kbd "M-RET") 'fsharp-eval-region) | |
(define-key fsharp-mode-map (kbd "C-SPC") 'fsharp-ac/complete-at-point))) | |
;; Remap org-mode meta keys for convenience | |
(mapcar (lambda (state) | |
(evil-declare-key state org-mode-map | |
(kbd "M-l") 'org-metaright | |
(kbd "M-h") 'org-metaleft | |
(kbd "M-k") 'org-metaup | |
(kbd "M-j") 'org-metadown | |
(kbd "M-L") 'org-shiftmetaright | |
(kbd "M-H") 'org-shiftmetaleft | |
(kbd "M-K") 'org-shiftmetaup | |
(kbd "M-J") 'org-shiftmetadown)) | |
'(normal insert)) | |
(defun evil-send-string-to-terminal (string) | |
(unless (display-graphic-p) (send-string-to-terminal string))) | |
(defun evil-terminal-cursor-change () | |
(when (string= (getenv "TERM_PROGRAM") "iTerm.app") | |
(add-hook 'evil-insert-state-entry-hook (lambda () (evil-send-string-to-terminal "\e]50;CursorShape=1\x7"))) | |
(add-hook 'evil-insert-state-exit-hook (lambda () (evil-send-string-to-terminal "\e]50;CursorShape=0\x7")))) | |
(when (and (getenv "TMUX") (string= (getenv "TERM_PROGRAM") "iTerm.app")) | |
(add-hook 'evil-insert-state-entry-hook (lambda () (evil-send-string-to-terminal "\ePtmux;\e\e]50;CursorShape=1\x7\e\\"))) | |
(add-hook 'evil-insert-state-exit-hook (lambda () (evil-send-string-to-terminal "\ePtmux;\e\e]50;CursorShape=0\x7\e\\"))))) | |
(evil-terminal-cursor-change) | |
;;===================================== | |
;;key chord | |
;;===================================== | |
(key-chord-mode 1) | |
(key-chord-define evil-insert-state-map "jk" 'evil-normal-state) | |
(key-chord-define evil-insert-state-map "kj" 'evil-normal-state) | |
;;===================================== | |
;;color theme configuration | |
;;===================================== | |
(color-theme-initialize) | |
;;(load "~/.emacs.d/railscasts/railscasts-theme.el") | |
;;(load "~/.emacs.d/color-theme-sons-of-obsidian.el") | |
;;(load "~/.emacs.d/obsidian-theme.el") | |
;;(load "~/.emacs.d/evil-tmux-navigator/navigate.el") | |
;;(require 'navigate) | |
;;(require 'color-theme-sons-of-obsidian) | |
;;(eval-after-load "color-theme" | |
;; '(progn | |
;; (color-theme-initialize) | |
;; (color-theme-sons-of-obsidian))) | |
;;(require 'monokai-theme) | |
(require 'hipster-theme) | |
;;(require 'color-theme-sanityinc-solarized) | |
;;(require 'color-theme-sanityinc-tomorrow) | |
;;(eval-after-load "color-theme" | |
;; '(progn | |
;; (interactive) | |
;; (color-theme-sanityinc-tomorrow 'bright))) | |
;;===================================== | |
;;projectile mode | |
;;===================================== | |
(projectile-global-mode) | |
;;(setq projectile-require-project-root nil) | |
;;===================================== | |
;;projectile vertical | |
;;===================================== | |
(ido-mode 1) | |
(ido-vertical-mode 1) | |
(add-hook 'ido-setup-hook 'vim-like-ido-keys) | |
(defun vim-like-ido-keys () | |
"Add vim like keybindings for ido." | |
(define-key ido-completion-map (kbd "J") 'ido-next-match) | |
(define-key ido-completion-map (kbd "K") 'ido-prev-match) | |
) | |
;;===================================== | |
;;flx fuzzy matching | |
;;===================================== | |
(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) | |
;;===================================== | |
;;osx clipboard | |
;;===================================== | |
(osx-clipboard-mode 1) | |
;;===================================== | |
;;whitespace | |
;;===================================== | |
(defun amir/turn-on-show-trailing-whitespace () | |
(interactive) | |
(setq show-trailing-whitespace t)) | |
(add-hook 'before-save-hook 'delete-trailing-whitespace) | |
(add-hook 'prog-mode-hook 'amir/turn-on-show-trailing-whitespace) | |
(setq-default indent-tabs-mode nil | |
tab-width 2) | |
(setq css-indent-offset 2) | |
;;===================================== | |
;;ensime for scala development | |
;;===================================== | |
;(add-hook 'scala-mode-hook 'ensime-scala-mode-hook) | |
;(setenv "PATH" (concat "/usr/local/bin/sbt:" (getenv "PATH"))) | |
;(setenv "PATH" (concat "/usr/local/bin/scala:" (getenv "PATH"))) | |
; | |
;(when (memq window-system '(mac ns)) | |
; (exec-path-from-shell-initialize)) | |
(defun amir/ruby-words () | |
(interactive) | |
(modify-syntax-entry ?_ "w")) | |
(add-hook 'ruby-mode-hook 'amir/ruby-words) | |
;;===================================== | |
;; Tmux splits | |
;;===================================== | |
(defun amir/emacs-or-tmux (dir tmux-cmd) | |
(interactive) | |
(unless (ignore-errors (funcall (intern (concat "windmove-" dir)))) | |
(shell-command tmux-cmd))) | |
(global-set-key (kbd "C-j") | |
'evil-window-down) | |
(global-set-key (kbd "C-k") | |
'evil-window-up) | |
(global-set-key (kbd "C-l") | |
'evil-window-right) | |
(global-set-key (kbd "C-h") | |
'evil-window-left) | |
;;===================================== | |
;; tab width 2 | |
;;===================================== | |
(setq js-indent-level 2) | |
;;===================================== | |
;; auto complete | |
;;===================================== | |
(global-auto-complete-mode 1) | |
(setq ac-auto-show-menu 0.1) | |
(ac-config-default) | |
;;===================================== | |
;; shell lines out | |
;;===================================== | |
(defun amir/foo-inline(cmd) | |
(interactive) | |
(shell-command-on-region (point) (mark) cmd nil t)) | |
(defun amir/foo-above(cmd) | |
(interactive) | |
(let* ((buffer (generate-new-buffer "*shell-command*")) | |
(output (progn | |
(shell-command-on-region (point) (mark) cmd buffer) | |
(with-current-buffer buffer | |
(buffer-string))))) | |
(save-excursion | |
(goto-char (min (point) (mark))) | |
(insert output)))) | |
(defun amir/foo-kill-ring(cmd) | |
(interactive) | |
(kill-new | |
(let ((buffer (generate-new-buffer "*shell-command*"))) | |
(shell-command-on-region (point) (mark) cmd buffer) | |
(with-current-buffer buffer | |
(buffer-string)))) | |
(message "Output copied to kill ring")) | |
;;===================================== | |
;; search highlight and cursors | |
;;===================================== | |
(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. | |
'(col-highlight ((t (:background "color-233")))) | |
'(font-lock-string-face ((t (:foreground "color-166")))) | |
'(font-lock-variable-name-face ((t (:foreground "cyan")))) | |
'(hl-line ((t (:background "color-233")))) | |
'(lazy-highlight ((t (:background "black" :foreground "white" :underline t))))) | |
;;===================================== | |
;;change auto save directory | |
;;===================================== | |
(setq backup-directory-alist | |
`((".*" . ,temporary-file-directory))) | |
(setq auto-save-file-name-transforms | |
`((".*" ,temporary-file-directory t))) | |
(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. | |
) | |
;;======================================== | |
;;auto mode list for different file types | |
;;======================================== | |
;;(add-to-list 'auto-mode-alist '("\\.js\\'" . js2-mode)) | |
;;========================================= | |
;;jsx linter | |
;;======================================== | |
(add-to-list 'auto-mode-alist '("\\.jsx$" . web-mode)) | |
;; disable jshint since we prefer eslint checking | |
;;(setq-default flycheck-disabled-checkers | |
;; (append flycheck-disabled-checkers | |
;; '(javascript-jshint))) | |
;; use eslint with web-mode for jsx files | |
;;(flycheck-add-mode 'javascript-eslint 'web-mode) | |
;; disable json-jsonlist checking for json files | |
;;(setq-default flycheck-disabled-checkers | |
;; (append flycheck-disabled-checkers | |
;; '(json-jsonlist))) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment