Skip to content

Instantly share code, notes, and snippets.

@gcman105
Last active January 3, 2016 03:48
Show Gist options
  • Save gcman105/8404177 to your computer and use it in GitHub Desktop.
Save gcman105/8404177 to your computer and use it in GitHub Desktop.
;;; Package --- gcman105's emacs init.el
;;; Commentary:
;;; Code:
(require 'cl)
(require 'package)
(dolist (repo '(("elpa" . "http://tromey.com/elpa/")
("melpa" . "http://melpa.milkbox.net/packages/")))
(add-to-list 'package-archives repo))
(package-initialize)
;; Guarantee all packages are installed on start
(defvar packages-list
'(evil evil-leader evil-numbers evil-indent-textobject
evil-matchit evil-nerd-commenter evil-paredit
evil-exchange evil-visualstar
key-chord deft markdown-mode markdown-mode+
ample-zen-theme subatomic256-theme
magit multi-term
flx flx-ido
move-text
http-post-simple eredis projectile
helm-ag helm-css-scss helm-emmet helm-rails helm-rb
helm-bm helm-dash helm-helm-commands helm-projectile
heroku
coffee-mode js3-mode slim-mode feature-mode
emmet-mode auto-complete
yaml-mode
ag ac-emmet ac-helm ac-ispell
multiple-cursors paredit
php-mode ruby-mode regex-tool
xclip yasnippet ace-jump-mode
bm scss-mode
expand-region
rainbow-mode
fill-column-indicator
clojure-mode
handlebars-mode
cursor-chg
highlight-symbol
rvm)
"List of packages needs to be installed at launch")
(defun has-package-not-installed ()
(loop for p in packages-list
when (not (package-installed-p p)) do (return t)
finally (return nil)))
(when (has-package-not-installed)
;; Check for new packages (package versions)
(message "%s" "Get latest versions of all packages...")
(package-refresh-contents)
(message "%s" " done.")
;; Install the missing packages
(dolist (p packages-list)
(when (not (package-installed-p p))
(package-install p))))
(defvar grc-emacs-init-file "~/.emacs.d/init.el")
(defvar grc-backups-folder "~/backups/")
(defvar grc-dropbox-folder "~/Dropbox/")
(defvar grc-emacs-config-dir
(file-name-directory grc-emacs-init-file))
(setq user-emacs-directory grc-emacs-config-dir)
(setq backup-directory-alist
(list (cons "." (expand-file-name "emacs" grc-backups-folder))))
;; setup helm ---------------------------------------------------------------
(add-to-list 'load-path "~/.emacs.d/cloned/helm")
(require 'helm-config)
(global-set-key (kbd "C-c h") 'helm-projectile)
(require 'auto-complete-config)
(add-to-list 'ac-dictionary-directories "~/.emacs.d/ac-dict")
(ac-config-default)
(global-auto-complete-mode 1)
;; enable ido-mode with flex matching
;;(flx-ido-mode t)
(require 'flx-ido)
(ido-mode 1)
(ido-everywhere 1)
(flx-ido-mode 1)
;; disable ido faces to see flx highlights.
(setq ido-use-faces nil)
;; setup yasnippet ---------------------------------------------------------
;; HAD TO MOVE THE NEXT 2 LINES INTO THE SYSTEM FILE FOR EACH SYSTEM
;;(require 'yasnippet)
;;(yas-global-mode 1)
(setq yas-snippet-dirs
'("~/.emacs.d/snippets" ;; personal snippets
;; "/path/to/some/collection/" ;; just some foo-mode snippets
;; "/path/to/some/othercollection/" ;; some more foo-mode and a complete baz-mode
"~/.emacs.d/snippets-default" ;; the default collection
))
;; Deft config for nvALT files with md extension ----------------------------
(setq deft-extension "md")
(setq deft-directory (expand-file-name "MarkDown" grc-dropbox-folder))
(setq deft-text-mode 'markdown-mode)
(setq deft-use-filename-as-title 1)
(global-set-key [f8] 'deft)
(global-set-key [S-f8] 'deft-new-file-named)
;; gcman Deft mode hook -----------------------------------------------------
;; Turn off evil-mode in a deft buffer
(defun gcman-deft-mode-hook ()
"deft-mode-hook"
(turn-off-evil-mode))
(add-hook 'deft-mode-hook '(lambda() (gcman-deft-mode-hook)))
;; gcman Markdown mode hook -------------------------------------------------
;; Stop markdown-mode interfeering with yasnippet
(defun gcman-markdown-mode-hook ()
"markdown-mode-hook"
(define-key markdown-mode-map (kbd "<tab>") nil))
(add-hook 'markdown-mode-hook '(lambda() (gcman-markdown-mode-hook)))
;; Unset Arrow keys, this should help force me to learn the Emacs keys!
;; (global-unset-key (kbd "<left>"))
;; (global-unset-key (kbd "<right>"))
;; (global-unset-key (kbd "<up>"))
;; (global-unset-key (kbd "<down>"))
;; Setup GLOBAL keys --------------------------------------------------------
;; set bookmarking keys
(global-set-key (kbd "<C-f7>") 'bm-next)
(global-set-key (kbd "<f7>") 'bm-toggle)
(global-set-key (kbd "<S-f7>") 'bm-previous)
(global-set-key (kbd "<M-f7>") 'bm-show-all)
;; move text
(require 'move-text)
;;(move-text-default-bindings)
;; set block bubble keys
(global-set-key (kbd "<S-f6>") 'move-text-up)
(global-set-key (kbd "<C-f6>") 'move-text-down)
;; set keys for multiple-cursors.el
(require 'multiple-cursors)
(global-set-key (kbd "C-S-c C-S-c") 'mc/edit-lines)
(global-set-key (kbd "C->") 'mc/mark-next-like-this)
(global-set-key (kbd "C-<") 'mc/mark-previous-like-this)
(global-set-key (kbd "C-c C-<") 'mc/mark-all-like-this)
;; set keys for text scaling
(global-set-key (kbd "C-x +") 'text-scale-increase)
(global-set-key (kbd "C-x _") 'text-scale-decrease)
(require 'expand-region)
(global-set-key (kbd "C-=") 'er/expand-region)
(global-set-key (kbd "C--") 'er/contract-region)
;; set keys for spliting window
(global-set-key (kbd "C-\\") 'split-window-below)
(global-set-key (kbd "C-|") 'split-window-right)
;; org-mode settings --------------------------------------------------------
(push "~/.emacs.d/cloned/org-toodledo" load-path)
(require 'org-toodledo)
(setq org-toodledo-userid "td4b0512dd78ea8")
(setq org-toodledo-password "whouse105")
;; Useful key bindings for org-mode
(add-hook 'org-mode-hook
(lambda ()
(local-unset-key "\C-c")
(local-set-key "\C-cd" 'org-toodledo-mark-task-deleted)
(local-set-key "\C-cs" 'org-toodledo-sync)
)
)
(add-hook 'org-agenda-mode-hook
(lambda ()
(local-unset-key "\C-c")
(local-set-key "\C-cd" 'org-toodledo-agenda-mark-task-deleted)
)
)
(define-key global-map "\C-ct" 'org-capture)
(define-key global-map "\C-ca" 'org-agenda)
;; Set to the location of your Org files on your local system
(setq org-directory (expand-file-name "org" grc-dropbox-folder))
;; Set to the name of the file where new notes will be stored
(setq org-mobile-inbox-for-pull (expand-file-name "flagged.org" org-directory))
;; Set to <your Dropbox root directory>/MobileOrg.
(setq org-mobile-directory (expand-file-name "Apps/MobileOrg" grc-dropbox-folder))
;;(setq remember-data-file (expand-file-name "journal.org" org-directory))
(setq org-default-notes-file (expand-file-name "journal.org" org-directory))
;;(setq remember-annotation-functions '(org-remember-annotation))
;;(setq remember-handler-functions '(org-remember-handler))
;;(add-hook 'remember-mode-hook 'org-remember-apply-template)
'(org-refile-targets (quote (((expand-file-name "gtd.org" org-directory) :maxlevel . 1)
((expand-file-name "someday.org" org-directory) :level . 2))))
(setq org-capture-templates
'(("t" "Todo" entry (file+headline "~/Dropbox/org/gtd.org" "Tasks")
;;"* TODO %^{Brief Description} %^g\n%?\nAdded: %U")
"* TODO %^{Brief Description} %^g\n %?\n %i\n Added: %U")
("j" "Journal" entry (file+datetree "~/Dropbox/org/journal.org")
"* %?\nEntered on %U\n %i\n %a")))
;; (setq org-remember-templates
;; '(("Todo" ?t "* TODO %^{Brief Description} %^g\n%?\nAdded: %U" "~/Dropbox/org/gtd.org" "Tasks")
;; ("Journal" ?j "** %^{Head Line} %U %^g\n%i%?" "~/Dropbox/org/journal.org")
;; ("Clipboard" ?c "** %^{Head Line} %U %^g\n%c\n%?" "~/Dropbox/org/journal.org")
;; ("Receipt" ?r "** %^{BriefDesc} %U %^g\n%?" "~/Dropbox/org/finances.org")
;; ("Book" ?b "** %^{Book Title} %t :BOOK: \n%[~/Dropbox/org/.book_template.txt]\n"
;; "~/Dropbox/org/journal.org")
;; ("Film" ?f "** %^{Film Title} %t :FILM: \n%[~/Dropbox/org/.film_template.txt]\n"
;; "~/Dropbox/org/journal.org")
;; ("Daily Review" ?a "** %t :COACH: \n%[~/Dropbox/org/.daily_review.txt]\n"
;; "~/Dropbox/org/journal.org")
;; ("Someday" ?s "** %^{Someday Heading} %U\n%?\n" "~/Dropbox/org/someday.org")
;; ("Vocab" ?v "** %^{Word?}\n%?\n" "~/Dropbox/org/vocab.org")
;; )
;; )
(setq org-agenda-files (quote ("~/Dropbox/org/birthday.org" "~/Dropbox/org/gtd.org" "~/Dropbox/org/emails.org" "~/Dropbox/org/finances.org")))
(setq php-file-patterns (quote ("\\.php[s34]?\\'" "\\.phtml\\'" "\\.inc\\'" "\\.php\\'")))
;; setup eredis ---------------------------------------------------------------
(add-to-list 'load-path "~/.emacs.d/elpa/eredis*")
(require 'eredis)
;; On OS X Emacs doesn't use the shell PATH if it's not started from
;; the shell. If you're using homebrew modifying the PATH is essential.
;; Also allow hash to be entered
(if (eq system-type 'darwin)
(progn
(push "/usr/local/bin" exec-path)
(setq osx-pseudo-daemon-mode t)
(global-set-key (kbd "M-3") '(lambda () (interactive) (insert "#")))))
(define-key global-map (kbd "C-c SPC") 'ace-jump-mode)
(define-key global-map (kbd "<f2>") 'ispell-word)
;; Tabs and Indents
(setq tab-width 2)
(setq indent-tabs-mode nil)
(setq scroll-bar-mode nil)
;; Minor Mode Hooks
(add-hook 'html-mode-hook 'turn-off-auto-fill)
;; Flymake
;; (require 'flymake)
;; (global-set-key [C-f3] 'flymake-display-err-menu-for-current-line)
;; (global-set-key [C-f4] 'flymake-goto-next-error)
;; (setq flymake-log-level 3)
;; Flycheck mode
;; Enable flymake for all files
;;(require 'flycheck)
;;(add-hook 'find-file-hook 'flycheck-mode)
;; Rake files are ruby, too, as are gemspecs, rackup files, etc.
(add-to-list 'auto-mode-alist '("\.rake$" . ruby-mode))
(add-to-list 'auto-mode-alist '("\.gemspec$" . ruby-mode))
(add-to-list 'auto-mode-alist '("\.ru$" . ruby-mode))
(add-to-list 'auto-mode-alist '("Rakefile$" . ruby-mode))
(add-to-list 'auto-mode-alist '("Gemfile$" . ruby-mode))
(add-to-list 'auto-mode-alist '("Capfile$" . ruby-mode))
(add-to-list 'auto-mode-alist '("Vagrantfile$" . ruby-mode))
;; SCSS options
(setq scss-compile-at-save nil)
;; setup if we are using a graphic display ----------------------------------
(if (display-graphic-p)
(setq xterm-mouse-mode nil)
(setq server-mode nil))
;; I like my cursor to blink and stretch
(setq blink-cursor-mode 1)
(setq x-stretch-cursor t)
;; show column numbers
(setq column-number-mode 1)
(let ((path-from-shell (shell-command-to-string "$SHELL -i -c 'echo $PATH'")))
(setenv "PATH" path-from-shell)
(setq exec-path (split-string path-from-shell path-separator)))
;;(evilnc-default-hotkeys)
(global-evil-leader-mode)
(evil-leader/set-leader ",")
(evil-leader/set-key
"f" 'find-file
"h" 'helm-projectile
"j" 'ace-jump-mode
"b" 'helm-buffers-list
"k" 'kill-buffer)
;; (define-key evil-normal-state-map (kbd "C-c +") 'evil-numbers/inc-at-pt)
(define-key evil-normal-state-map (kbd "+") 'evil-numbers/inc-at-pt)
;; (define-key evil-normal-state-map (kbd "C-c -") 'evil-numbers/dec-at-pt)
(define-key evil-normal-state-map (kbd "-") 'evil-numbers/dec-at-pt)
(setq evil-default-cursor 1)
(set-cursor-color "orange")
;;Exit insert mode by pressing j and then j quickly
(setq key-chord-two-keys-delay 0.4)
(key-chord-define evil-insert-state-map "jj" 'evil-normal-state)
(key-chord-mode 1)
(defun scroll-down-in-place (n)
(interactive "p")
(previous-line n)
(scroll-down n))
(defun scroll-up-in-place (n)
(interactive "p")
(next-line n)
(scroll-up n))
(global-set-key [M-up] 'scroll-down-in-place)
(global-set-key [M-down] 'scroll-up-in-place)
(global-set-key [C-return] 'emmet-expand-line)
;; Turn off flyspell
(setq-default flyspell-mode nil)
;; if its not a mac, do these things
(unless (string-match "apple-darwin" system-configuration)
;; on mac, there's always a menu bar drown, don't have it empty
(menu-bar-mode -1))
;; under mac, have Command as Meta and keep Option for localized input
(when (string-match "apple-darwin" system-configuration)
(setq mac-allow-anti-aliasing t)
(setq mac-option-key-is-meta nil)
(setq mac-command-key-is-meta t)
(setq mac-command-modifier 'meta)
(set-keyboard-coding-system nil)
(setq mac-option-modifier nil)
(menu-bar-mode t))
;; Use the clipboard, pretty please, so that copy/paste "works"
(setq x-select-enable-clipboard t)
;; Show keystrokes in progress
(setq echo-keystrokes 0.1)
;; Projectile
(projectile-global-mode)
;; Get current system's name
(defun insert-system-name()
(interactive)
"Get current system's name"
(insert (format "%s" system-name))
)
;; Get current system type
(defun insert-system-type()
(interactive)
"Get current system type"
(insert (format "%s" system-type))
)
(evil-mode t)
(setq inhibit-startup-screen t)
(setq max-specpdl-size 1800)
(show-paren-mode t)
(setq tab-width 2)
;; key bindings
(when (eq system-type 'darwin) ;; mac specific settings
(setq mac-option-modifier 'alt)
(setq mac-command-modifier 'meta)
(global-set-key [kp-delete] 'delete-char) ;; sets fn-delete to be right-delete
)
;;(global-hl-line-mode) ; highlight current line
(global-linum-mode t) ; add line numbers on the left
(setq linum-format "%7d ")
(require 'rainbow-mode)
(rainbow-mode t)
(evil-exchange-install)
(evilnc-default-hotkeys)
;; setup theme --------------------------------------------------------------
;; load theme depening on window type
(when (eq window-system nil)
(load-theme 'ample-zen t)
(global-hl-line-mode) ; highlight current line
(blink-cursor-mode)
(setq x-stretch-cursor t)
;; (load-theme 'subatomic256 t)
)
(when (eq window-system 'x)
(load-theme 'ample-zen t)
;; (load-theme 'subatomic256 t)
)
(when (eq window-system 'ns)
(load-theme 'ample-zen t)
;; (load-theme 'afternoon t)
)
;; Set up 'custom' emacs ----------------------------------------------------
(setq custom-file (expand-file-name "emacs-customizations.el" grc-emacs-config-dir))
(load custom-file)
;; Set up 'custom' system ---------------------------------------------------
(setq custom-system-file (expand-file-name system-name grc-emacs-config-dir))
(load custom-system-file)
;;; init.el ends here
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment