Skip to content

Instantly share code, notes, and snippets.

@Astrac
Created November 2, 2015 11:01
Show Gist options
  • Save Astrac/8ac2cb16f1363a4fab2d to your computer and use it in GitHub Desktop.
Save Astrac/8ac2cb16f1363a4fab2d to your computer and use it in GitHub Desktop.
(require 'package)
(add-to-list 'package-archives
'("melpa" . "http://melpa.milkbox.net/packages/") t)
(defun ensure-package-installed (&rest packages)
"Assure every package is installed, ask for installation if it’s not.
Return a list of installed packages or nil for every skipped package."
(mapcar
(lambda (package)
;; (package-installed-p 'evil)
(if (package-installed-p package)
nil
(if (y-or-n-p (format "Package %s is missing. Install it? " package))
(package-install package)
package)))
packages))
;; activate installed packages
(package-initialize)
(when (not package-archive-contents)
(package-refresh-contents))
(ensure-package-installed
'ag
'ensime
'scala-outline-popup
'neotree
'paredit
'exec-path-from-shell
'color-theme-sanityinc-tomorrow
'multi-term
'cider
'rainbow-delimiters
'git-timemachine
'git-gutter
'magit
'highlight-symbol
'ace-jump-mode
'evil
'cyberpunk-theme
'solarized-theme
'smyx-theme
'sublime-themes
'restclient
'ethan-wspace
'multiple-cursors
'grizzl
'perspective
;; 'persp-projectile
;; 'projectile
'yaml-mode
'json-mode
'find-file-in-repository
'feature-mode
'xkcd)
;; Highlight symbol keybindings
(global-set-key (kbd "C-c f") 'highlight-symbol-at-point)
(global-set-key (kbd "C-c n") 'highlight-symbol-next)
(global-set-key (kbd "C-c p") 'highlight-symbol-prev)
(global-set-key (kbd "C-c r") 'highlight-symbol-query-replace)
;; Multiple cursors
(global-set-key (kbd "C-c l") 'mc/edit-lines)
(global-set-key (kbd "C-c d") 'mc/mark-next-like-this)
(global-set-key (kbd "C-c D") 'mc/mark-previous-like-this)
(global-set-key (kbd "C-c a") 'mc/mark-all-like-this)
;; Comment/uncomment shortcut
(global-set-key (kbd "s-/") 'comment-or-uncomment-region)
;; Let ethan-wspace take care of final new lines
(setq mode-require-final-newline nil)
;; Set up perspective
;; (persp-mode)
;; Set up projectile
;;(setq projectile-completion-system 'grizzl)
;;(projectile-global-mode)
;; (define-key projectile-mode-map (kbd "s-s") 'projectile-persp-switch-project)
;; Find file in repository
(global-set-key (kbd "C-x p") 'find-file-in-repository)
;; MacOSX work-around for executable paths (needed by ensime)
(when (memq window-system '(mac ns))
(exec-path-from-shell-initialize))
;; Enable ensime on scala-mode
(add-hook 'scala-mode-hook 'ensime-scala-mode-hook)
;; Disable auto-complete-mode on scala-mode to avoid double suggestions
(add-hook 'scala-mode-hook '(lambda () (auto-complete-mode 0)))
;; Enable line numbers
(global-linum-mode 1)
;; Enable IDO with flex-matching everywhere
(ido-mode 1)
(setq ido-enable-flex-matching t)
(setq ido-everywhere t)
;; Do not shouw splash screen
(setq inhibit-startup-message t
inhibit-startup-echo-area-message t)
;; Set zsh as shell for multi-term
(setq multi-term-program "/bin/zsh")
;; Needed for zsh integration and term colours
(setq system-uses-terminfo nil)
;; Increase the size of the history for multi-term
(add-hook 'term-mode-hook
(lambda ()
(setq term-buffer-maximum-size 10000)))
;; Allow pasting in multi-term
(add-hook 'term-mode-hook
(lambda ()
(define-key term-raw-map (kbd "C-y") 'term-paste)))
;; Show/hide neotree with F8
(global-set-key [f8] 'neotree-toggle)
;; Enable git gutter
(global-git-gutter-mode +1)
;; Enable paredit on lisp and elisp
(autoload 'enable-paredit-mode "paredit" "Turn on pseudo-structural editing of Lisp code." t)
(add-hook 'emacs-lisp-mode-hook #'enable-paredit-mode)
(add-hook 'eval-expression-minibuffer-setup-hook #'enable-paredit-mode)
(add-hook 'ielm-mode-hook #'enable-paredit-mode)
(add-hook 'lisp-mode-hook #'enable-paredit-mode)
(add-hook 'lisp-interaction-mode-hook #'enable-paredit-mode)
(add-hook 'scheme-mode-hook #'enable-paredit-mode)
;; Highlight symbol keymappings
(global-set-key [(control f3)] 'highlight-symbol-at-point)
(global-set-key [f3] 'highlight-symbol-next)
(global-set-key [(shift f3)] 'highlight-symbol-prev)
(global-set-key [(meta f3)] 'highlight-symbol-query-replace)
;; Remove whitespace before saving
(add-hook 'before-save-hook 'delete-trailing-whitespace)
;; Ace-jump keys
(define-key global-map (kbd "C-c SPC") 'ace-jump-mode)
;; ENSIME settings
(global-set-key (kbd "s-.") 'ensime-edit-definition)
(global-set-key (kbd "s-,") 'ensime-pop-find-definition-stack)
;; Scala outline popup keybinding
(global-set-key (kbd "C-a") 'scala-outline-popup)
;; Enables evil mode
(evil-mode 1)
(add-hook 'term-mode-hook '(lambda () (turn-off-evil-mode)))
;; Set theme
(load-theme 'tao-yang t)
(set-face-attribute 'mode-line nil :height 140)
;; Increase line-spacing
(setq-default line-spacing 3)
;; Do not put the freakin' backup files in the same folder I am working in please!
(setq backup-directory-alist `((".*" . ,temporary-file-directory)))
(setq auto-save-file-name-transforms `((".*" ,temporary-file-directory t)))
;; INSERT hash on a Mac UK keyboard
(global-set-key (kbd "M-3") '(lambda () (interactive) (insert "#")))
;; Re-map home/end to move to the beginning and end of the line
(global-set-key (kbd "<end>") 'end-of-line)
(global-set-key (kbd "<home>") 'beginning-of-line)
;; Map magit-status
(global-set-key (kbd "C-c m") 'magit-status)
;; Whitespace OCD helper
(global-ethan-wspace-mode 1)
;; Be like wind moving through your splits
(windmove-default-keybindings)
;; Enable perspective mode
(persp-mode)
(set-default-font "Source Code Pro 13")
;; Generated settings
(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
("40bc0ac47a9bd5b8db7304f8ef628d71e2798135935eb450483db0dbbfff8b11" "603a9c7f3ca3253cb68584cb26c408afcf4e674d7db86badcfe649dd3c538656" "b3775ba758e7d31f3bb849e7c9e48ff60929a792961a2d536edec8f68c671ca5" "3cc2385c39257fed66238921602d8104d8fd6266ad88a006d0a4325336f5ee02" "987b709680284a5858d5fe7e4e428463a20dfabe0a6f2a6146b3b8c7c529f08b" "e9776d12e4ccb722a2a732c6e80423331bcb93f02e089ba2a4b02e85de1cf00e" "46fd293ff6e2f6b74a5edf1063c32f2a758ec24a5f63d13b07a20255c074d399" "6eaebdc2426b0edfff9fd9a7610f2fe7ddc70e01ceb869aaaf88b5ebe326a0cd" "e80932ca56b0f109f8545576531d3fc79487ca35a9a9693b62bf30d6d08c9aaf" "9558f71c706fba7b136e75d9c5e73ddd2c9d91e76e2b18f733d4ab2f388f3b72" "9823333060f12954e41174bfa4c271b94028ff8452b93f9459b362cc89ce39c2" "95f954ce018bbff3107b357bd87d060db195a2d5c6b70411587223597fde171d" "39f98624caf410e66c4e03f36a1c373ea8ed9177cd9d12dfd6c0a53825599f60" "a041a61c0387c57bb65150f002862ebcfe41135a3e3425268de24200b82d6ec9" "b825687675ea2644d1c017f246077cdd725d4326a1c11d84871308573d019f67" "dba244449b15bdc6a3236f45cec7c2cb03de0f5cf5709a01158a278da86cb69b" "34e7163479ef3669943b3b9b1fabe639d6e0a0453e0de79cea2c52cb520d3bc4" "19ba41b6dc0b5dd34e1b8628ad7ae47deb19f968fe8c31853d64ea8c4df252b8" "868f73b5cf78e72ca2402e1d48675e49cc9a9619c5544af7bf216515d22b58e7" "8288b9b453cdd2398339a9fd0cec94105bc5ca79b86695bd7bf0381b1fbe8147" "cedd3b4295ac0a41ef48376e16b4745c25fa8e7b4f706173083f16d5792bb379" "62408b3adcd05f887b6357e5bd9221652984a389e9b015f87bbc596aba62ba48" "94ba29363bfb7e06105f68d72b268f85981f7fba2ddef89331660033101eb5e5" "90edd91338ebfdfcd52ecd4025f1c7f731aced4c9c49ed28cfbebb3a3654840b" "d677ef584c6dfc0697901a44b885cc18e206f05114c8a3b7fde674fce6180879" "8aebf25556399b58091e533e455dd50a6a9cba958cc4ebb0aab175863c25b9a4" "e16a771a13a202ee6e276d06098bc77f008b73bbac4d526f160faa2d76c1dd0e" "06f0b439b62164c6f8f84fdda32b62fb50b6d00e8b01c2208e55543a6337433a" "f0a99f53cbf7b004ba0c1760aa14fd70f2eabafe4e62a2b3cf5cabae8203113b" default)))
'(projectile-project-root-files
(quote
(".git" "rebar.config" "project.clj" "SConstruct" "pom.xml" "build.sbt" "build.gradle" "Gemfile" "requirements.txt" "tox.ini" "package.json" "gulpfile.js" "Gruntfile.js" "bower.json" "composer.json" "Cargo.toml" "mix.exs"))))
(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.
'(hl-line ((t (:background "midnight blue" :underline nil))))
'(mode-line-buffer-id ((t (:foreground "gray80" :weight bold))))
'(persp-selected-face ((t (:inherit mode-line :foreground "gray60")))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment