Permalink
Switch branches/tags
Nothing to show
Find file
Fetching contributors…
Cannot retrieve contributors at this time
536 lines (437 sloc) 13.2 KB
;;; package --- my .emacs config
;;; Commentary:
;;; Code:
(require 'package)
(add-to-list 'package-archives
'("melpa" . "https://melpa.org/packages/"))
(when (< emacs-major-version 24)
;; For important compatibility libraries like cl-lib
(add-to-list 'package-archives '("gnu" . "http://elpa.gnu.org/packages/")))
(package-initialize)
;;customize.el has its own file
(setq custom-file "~/.emacs.d/.emacs-custom.el")
(load custom-file)
(require 'server)
(unless (server-running-p)
(server-start))
(require 'tramp)
;;Editor Config
(fset 'yes-or-no-p 'y-or-n-p)
(windmove-default-keybindings)
(global-unset-key [mouse-2])
(setq-default cursor-type 'bar)
(blink-cursor-mode)
(column-number-mode 1)
(recentf-mode 1)
(setq recentf-max-menu-items 50)
(global-hl-line-mode 1)
(set-face-attribute 'hl-line nil
:foreground nil
:background "grey3")
(defface mode-line-vc
'((t :background "firebrick" :foreground "white"))
"Face used for git identification parts of the mode line."
:group 'mode-line-faces
:group 'basic-faces)
(defvar mode-line-vc
'(:propertize
(:eval (when (stringp vc-mode) (concat vc-mode " ")))
face mode-line-vc))
(put 'mode-line-vc 'risky-local-variable t)
(global-auto-revert-mode 1)
(setq-default mode-line-format
'("%e" mode-line-front-space mode-line-vc mode-line-mule-info mode-line-client mode-line-modified mode-line-remote mode-line-frame-identification mode-line-buffer-identification " " mode-line-position
" " mode-line-modes mode-line-misc-info mode-line-end-spaces))
(defun frame-title-format ()
"Return frame title with current project name, where applicable."
(concat
"emacs - "
(when (and (bound-and-true-p projectile-mode)
(projectile-project-p))
(format "[%s] - " (projectile-project-name)))
(let ((file buffer-file-name))
(if file
(abbreviate-file-name file)
"%b"))))
(setq-default frame-title-format '((:eval (frame-title-format))))
(add-to-list 'default-frame-alist '(fullscreen . maximized))
(when (eq window-system 'w32)
(setq find-program "gfind"))
;;override a couple defaults
(global-set-key (kbd "C-s") 'isearch-forward-regexp)
(global-set-key (kbd "C-r") 'isearch-backward-regexp)
(global-set-key (kbd "C-M-s") 'isearch-forward)
(global-set-key (kbd "C-M-r") 'isearch-backward)
(global-set-key [remap dabbrev-expand] 'hippie-expand)
(global-set-key (kbd "S-C-<left>") 'shrink-window-horizontally)
(global-set-key (kbd "S-C-<right>") 'enlarge-window-horizontally)
(global-set-key (kbd "S-C-<down>") 'shrink-window)
(global-set-key (kbd "S-C-<up>") 'enlarge-window)
;;iwatchstuffbehindemacs
(defun toggle-transparency ()
"Toggle background transparency."
(interactive)
(if (equal (car (frame-parameter (selected-frame) 'alpha)) 100)
(set-frame-parameter (selected-frame) 'alpha '(80 70))
(set-frame-parameter (selected-frame) 'alpha '(100 100))))
(defun kill-dired-buffers ()
(interactive)
(mapc (lambda (buffer)
(when (eq 'dired-mode (buffer-local-value 'major-mode buffer))
(kill-buffer buffer)))
(buffer-list)))
(defun kill-other-buffers ()
"Kill all other buffers."
(interactive)
(mapc 'kill-buffer (delq (current-buffer) (buffer-list))))
;;File encoding
(prefer-coding-system 'utf-8)
(set-default-coding-systems 'utf-8)
(set-terminal-coding-system 'utf-8)
(set-keyboard-coding-system 'utf-8)
;;saving properties
(add-hook 'focus-out-hook (lambda () (interactive)(save-some-buffers t)))
(add-hook 'delete-frame-functions (lambda () (interactive)(save-some-buffers t)))
(defun back-to-indentation-or-beginning () (interactive)
(if (= (point) (progn (back-to-indentation) (point)))
(beginning-of-line)))
(global-set-key (kbd "C-a") 'back-to-indentation-or-beginning)
;;;;;;;;;;;;;;;;;;
;;Package Config;;
;;;;;;;;;;;;;;;;;;
;;General
(use-package golden-ratio-scroll-screen
:ensure t
:bind(([remap scroll-down-command] . golden-ratio-scroll-screen-down)
([remap scroll-up-command] . golden-ratio-scroll-screen-up)))
(use-package undo-tree
:ensure t
:diminish undo-tree-mode
:demand
:config
(global-undo-tree-mode)
:bind(("C-z" . undo-tree-undo)
("C-M-z" . undo-tree-redo)))
(use-package helm
:ensure t
:diminish helm-mode
:demand
:init
(setq helm-mode-fuzzy-match t)
(setq helm-completion-in-region-fuzzy-match t)
(setq helm-echo-input-in-header-line t)
:bind(("C-x f" . helm-recentf)
("C-x b" . helm-mini)
("C-c s" . helm-occur)
("C-x C-b" . helm-buffers-list)
("C-x C-f" . helm-find-files)
("C-x C-r" . helm-resume))
:config
(helm-mode 1))
(use-package helm-swoop
:ensure t
:bind
(("M-i" . helm-swoop)
("C-c M-i" . helm-multi-swoop)
("M-I" . helm-swoop-back-to-last-point)
("C-x M-i" . helm-multi-swoop-all)))
(use-package wgrep
:ensure t)
(use-package smex
:ensure t)
(use-package helm-smex
:ensure t
:after helm
:after smex
:bind(([remap execute-extended-command] . helm-smex)
("M-X" . helm-smex-major-mode-commands)))
(use-package helm-projectile
:ensure t
:after projectile
:after helm
:config
(helm-projectile-on))
(use-package helm-flx
:ensure t
:after helm
:config
(helm-flx-mode +1))
(use-package helm-fuzzier
:ensure t
:config
(helm-fuzzier-mode +1))
(use-package helm-ag
:ensure t)
(use-package projectile
:ensure t
:demand
:init
(setq projectile-switch-project-action 'projectile-vc)
(setq projectile-mode-line
'(:eval
(format " Pr[%s]"
(projectile-project-name))))
:config
(projectile-mode))
(use-package ibuffer
:bind( "C-x C-b" . ibuffer))
(use-package expand-region
:ensure t
:bind("C-=" . er/expand-region))
(use-package diminish
:ensure t
:config
(diminish 'auto-revert-mode))
(use-package company
:ensure t
:diminish company-mode
:demand
:init
(setq company-idle-delay 0.3)
(setq company-begin-commands '(self-insert-command))
(setq company-minimum-prefix-length 1)
(setq company-tooltip-align-annotations t)
(setq company-tooltip-limit 20)
(setq company-dabbrev-downcase nil)
:config
(global-company-mode))
(use-package hl-line+
:ensure t
:demand t)
(use-package rainbow-delimiters
:ensure t
:init
(add-hook 'prog-mode-hook 'rainbow-delimiters-mode-enable))
(use-package magit
:ensure t
:init
(setq magit-display-buffer-function 'magit-display-buffer-fullframe-status-v1 )
:bind("C-x g" . magit-status)
:config
;; Protect against accident pushes to upstream
(defadvice magit-push-current-to-upstream
(around my-protect-accidental-magit-push-current-to-upstream)
"Protect against accidental push to upstream.
Causes `magit-git-push' to ask the user for confirmation first."
(let ((my-magit-ask-before-push t))
ad-do-it))
(defadvice magit-git-push (around my-protect-accidental-magit-git-push)
"Maybe ask the user for confirmation before pushing.
Advice to `magit-push-current-to-upstream' triggers this query."
(if (bound-and-true-p my-magit-ask-before-push)
;; Arglist is (BRANCH TARGET ARGS)
(if (yes-or-no-p (format "Push %s branch upstream to %s? "
(ad-get-arg 0) (ad-get-arg 1)))
ad-do-it
(error "Push to upstream aborted by user"))
ad-do-it))
(ad-activate 'magit-push-current-to-upstream)
(ad-activate 'magit-git-push))
(use-package git-gutter-fringe
:ensure t
:defer 1
:diminish git-gutter-mode
:config
(global-git-gutter-mode t))
;(use-package diff-hl
; :ensure t
; :config
; (global-diff-hl-mode))
(use-package ace-window
:ensure t
:bind("M-`" . ace-window)
:init
(setq aw-dispatch-always t))
(use-package multiple-cursors
:ensure t
:bind(("C-c /" . mc/edit-lines)
("C->" . mc/mark-next-like-this)
("C-<" . mc/mark-previous-like-this)
("C-c C-<" . mc/mark-all-like-this)))
(use-package switch-buffer-functions
:ensure t
:init
(add-hook 'switch-buffer-functions (lambda (prev cur) (interactive)(save-some-buffers t))))
(use-package flycheck
:ensure t
:defer 1
:diminish (flycheck-mode . "Fly")
:init
(add-hook 'after-init-hook #'global-flycheck-mode))
(use-package neotree
:ensure t)
(use-package adaptive-wrap
:ensure t)
(use-package yasnippet
:ensure t
:diminish yas-minor-mode
:config
(yas-reload-all)
(add-hook 'prog-mode-hook #'yas-minor-mode))
(use-package duplicate-thing
:ensure t
:bind(("C-c C-d" . duplicate-thing)))
(use-package org
:ensure t
:init
(setq org-src-fontify-natively t)
(setq org-src-tab-acts-natively t))
(use-package eslint-fix
:ensure t)
;;JAVASCRIPT
(use-package js2-mode
:ensure t
:mode (("\\.js\\'" . js2-mode))
:init
(setq js2-include-node-externs t)
(setq js2-include-browser-externs t)
(setq js2-mode-show-parse-errors nil)
(setq js2-mode-show-strict-warnings nil))
(use-package rjsx-mode
:ensure t
:mode(("/\\(containers\\)/[^/]*\\.js" . rjsx-mode)
("/\\(components\\)/[^/]*\\.js" . rjsx-mode)
("\\.jsx\\'" . rjsx-mode)))
(defadvice js-jsx-indent-line (after js-jsx-indent-line-after-hack activate)
"Workaround sgml-mode and follow airbnb component style."
(save-match-data
(save-excursion
(goto-char (line-beginning-position))
(when (looking-at "^\\( +\\)\/?> *$")
(let ((empty-spaces (match-string 1)))
(while (search-forward empty-spaces (line-end-position) t)
(replace-match (make-string (- (length empty-spaces) sgml-basic-offset)
32))))))))
(use-package js2-refactor
:ensure t
:config
(js2r-add-keybindings-with-prefix "C-c C-m")
(add-hook 'js2-mode-hook #'js2-refactor-mode))
(use-package tern
:ensure t
:diminish ( tern-mode . "Tr")
:init
(add-hook 'js2-mode-hook 'tern-mode)
(add-hook 'rjsx-mode-hook 'tern-mode))
(use-package add-node-modules-path
:ensure t
:init
(add-hook 'js2-mode-hook #'add-node-modules-path))
(use-package tide
:ensure t
:mode(("\\.ts\\'" . typescript-mode))
:config
(defun setup-tide-mode ()
(interactive)
(tide-setup)
(flycheck-mode +1)
(setq flycheck-check-syntax-automatically '(save mode-enabled))
(eldoc-mode +1)
(tide-hl-identifier-mode +1)
(company-mode +1))
;; formats the buffer before saving
(add-hook 'before-save-hook 'tide-format-before-save)
(add-hook 'typescript-mode-hook #'setup-tide-mode))
(use-package mocha
:ensure t
:init
(setq mocha-command ".\\node_modules\\.bin\\mocha.cmd")
(setq mocha-which-node "")
(setq mocha-reporter "spec"))
(use-package company-tern
:ensure t
:config
(add-hook 'js2-mode-hook (lambda ()
(add-to-list 'company-backends 'company-tern))))
(use-package indium
:ensure t
:diminish (indium-interaction-mode . "In" )
:init
(add-hook 'js2-mode-hook #'indium-interaction-mode))
(use-package simple-httpd
:ensure t)
(use-package impatient-mode
:ensure t)
;;JSON
(use-package json-mode
:ensure t
:mode (("\\.json\\'" . json-mode)
("\\manifest.webapp\\'" . json-mode )
("\\.tern-project\\'" . json-mode)))
;;WEB
(use-package web-mode
:ensure t
:mode (("\\.phtml\\'" . web-mode)
("\\.tpl\\.php\\'" . web-mode)
("\\.blade\\.php\\'" . web-mode)
("\\.jsp\\'" . web-mode)
("\\.as[cp]x\\'" . web-mode)
("\\.erb\\'" . web-mode)
("\\.html?\\'" . web-mode)
("\\.ejs\\'" . web-mode)
("\\.php\\'" . web-mode)
("\\.mustache\\'" . web-mode)
("/\\(views\\|html\\|theme\\|templates\\)/.*\\.php\\'" . web-mode))
:init
(setq web-mode-markup-indent-offset 2)
(setq web-mode-attr-indent-offset 2)
(setq web-mode-attr-value-indent-offset 2)
(setq web-mode-code-indent-offset 2)
(setq web-mode-css-indent-offset 2)
(setq web-mode-code-indent-offset 2)
(setq web-mode-enable-auto-closing t)
(setq web-mode-enable-auto-pairing t)
(setq web-mode-enable-comment-keywords t)
(setq web-mode-enable-current-element-highlight t))
(use-package company-web
:ensure t
:config
(add-hook 'web-mode-hook (lambda ()
(add-to-list 'company-backends 'company-web-html)
(add-to-list 'company-backends 'company-web-jade)
(add-to-list 'company-backends 'company-web-slim))))
(use-package emmet-mode
:ensure t
:config
(add-hook 'web-mode-hook 'emmet-mode)
(add-hook 'sgml-mode-hook 'emmet-mode)
(add-hook 'html-mode-hook 'emmet-mode)
(add-hook 'css-mode-hook 'emmet-mode))
(use-package rainbow-mode
:pin gnu
:init
(add-hook 'css-mode-hook 'rainbow-mode))
;; PYTHON
(use-package python-mode
:ensure t)
(use-package company-jedi
:ensure t
:config
(add-hook 'python-mode-hook (add-to-list 'company-backends 'company-jedi)))
;;Markdown
(use-package markdown-mode
:ensure t
:commands (markdown-mode gfm-mode)
:mode (("README\\.md\\'" . gfm-mode)
("\\.md\\'" . markdown-mode)
("\\.markdown\\'" . markdown-mode))
:init
(setq markdown-command "multimarkdown")
(setq markdown-header-scaling t))
;;Scheme
(use-package geiser
:ensure t)
;; Lua
(use-package lua-mode
:ensure t
:mode ("\\.lua\\'" . lua-mode))
(use-package company-lua
:ensure t
:config
(add-hook 'lua-mode-hook (lambda ()
(add-to-list 'company-backends 'company-lua))))
;;Fountain
(use-package fountain-mode
:ensure t)
(provide 'init)
;;; init.el ends here