Skip to content

Instantly share code, notes, and snippets.

@lefthandedgoat
Created April 4, 2017 17:37
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lefthandedgoat/6d63f9f3cbe9f84ea077d67779a038e5 to your computer and use it in GitHub Desktop.
Save lefthandedgoat/6d63f9f3cbe9f84ea077d67779a038e5 to your computer and use it in GitHub Desktop.
my emacs config
;; 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