summaryrefslogtreecommitdiffstats
path: root/shell/_emacs.d/init.el
diff options
context:
space:
mode:
Diffstat (limited to 'shell/_emacs.d/init.el')
-rw-r--r--shell/_emacs.d/init.el215
1 files changed, 215 insertions, 0 deletions
diff --git a/shell/_emacs.d/init.el b/shell/_emacs.d/init.el
new file mode 100644
index 0000000..921eace
--- /dev/null
+++ b/shell/_emacs.d/init.el
@@ -0,0 +1,215 @@
+;; VERSION: 0.9.0
+;; BUILD: 141
+;; TODO:
+;; - Dependencies:
+;; - Haskell: ghc-mod; hlint
+;; - Python: jedi (pip install jedi epc)
+;; - Arch: aspell-de
+;; - org-mode
+;; - imagemagick
+;; - Latex-preview: texlive-core
+
+;; TODO: eldoc for C looks awesome
+;; company for autocompletion?
+;;;; comments
+;; Fix custom-set-variables
+;; need a redo solution
+;; align-regexp
+;; need to fix color schemes
+;; fix evil state in list-packages buffer
+;; fix smooth scrolling (no jumps pls)
+;; fix jedi
+;; checkout evil-exchange https://github.com/Dewdrops/evil-exchange
+;; Learn how the minibuffer works
+
+;; Turn off mouse interface early to avoid momentary display
+(if (fboundp 'menu-bar-mode) (menu-bar-mode -1))
+(if (fboundp 'tool-bar-mode) (tool-bar-mode -1))
+(if (fboundp 'scroll-bar-mode) (scroll-bar-mode -1))
+
+;; No welcome screen
+(setq inhibit-startup-message t)
+
+;;;; autoloads
+(add-to-list 'load-path (concat user-emacs-directory "/site-lisp/"))
+(require 'site-lisp-autoloads)
+
+;;;; general settings
+(when window-system
+ (setq frame-title-format '(buffer-file-name "%f" ("%b")))
+ (blink-cursor-mode -1))
+
+(setq visible-bell t
+ ;; color-theme-is-global t
+ ;; shift-select-mode nil
+ ;; mouse-yank-at-point t
+ backup-directory-alist `((".".,(concat user-emacs-directory "backups"))))
+
+(defalias 'yes-or-no-p 'y-or-n-p)
+
+;; much better scrolling
+(setq scroll-margin 0
+ scroll-conservatively 100000
+ scroll-preserve-screen-position 1)
+
+;; Increase memory for tables
+(setq max-lisp-eval-depth '40000)
+(setq max-specpdl-size '100000)
+
+(require 'package)
+(add-to-list 'package-archives '("org" . "http://orgmode.org/elpa/"))
+(add-to-list 'package-archives
+ '("marmalade" . "http://marmalade-repo.org/packages/"))
+(add-to-list 'package-archives
+ '("melpa" . "http://melpa.milkbox.net/packages/"))
+(package-initialize)
+
+(refresh-proxy-settings)
+(when (not package-archive-contents)
+ (package-refresh-contents))
+
+(require 'with-package)
+
+(with-package (ace-jump-buffer haskell-mode python-mode htmlize
+ multiple-cursors column-marker
+ ;; ess ;; statistic
+ ;; key-chord ;; combination of keys for commands
+ ;; no-easy-keys
+ ;; pretty-symbols-mode ;; mode for pretty symbols
+ ;; auto-complete
+ ;; auto-complete-clang-async
+ ;; auto-complete-c-headers
+ ;; autopair
+ ;; column-marker
+ ;; fuzzy ;; better matching
+ ;; jedi
+ ;; maxframe
+ ;; nav
+ ;; yasnippet
+ notmuch
+ midnight
+ org-plus-contrib
+))
+
+(with-package* (evil evil-nerd-commenter evil-numbers)
+ (evil-mode t)
+ (define-key evil-normal-state-map "m" 'tabbar-forward-tab)
+ (define-key evil-normal-state-map "M" 'tabbar-backward-tab)
+ (define-key evil-normal-state-map " " 'ace-jump-buffer)
+ (define-key evil-normal-state-map (kbd ",ci")
+ 'evilnc-comment-or-uncomment-lines)
+ (define-key evil-normal-state-map (kbd ",cl")
+ 'evilnc-comment-or-uncomment-to-the-line))
+
+(define-key evil-normal-state-map (kbd "RET") nil)
+(define-key evil-motion-state-map (kbd "RET") nil)
+
+;; TODO: test this more
+(with-package* key-chord
+ (key-chord-mode t)
+ (key-chord-define evil-insert-state-map "jk" 'evil-normal-state))
+
+;; Evil surround mode. See https://github.com/timcharper/evil-surround
+(with-package* surround
+ (global-surround-mode 1))
+
+(with-package* anzu
+ (global-anzu-mode))
+
+(with-package* solarized-theme
+ (message "Solarized theme loaded!")
+ (load-theme 'solarized-dark t))
+
+;; loading zenburn retriggers this with-package call, so only call it once
+;; (with-package* zenburn-theme
+;; (unless (symbolp 'zenburn-loaded)
+;; (setq 'zenburn-loaded t)
+;; (load-theme 'zenburn)))
+
+(with-package* (ido ido-ubiquitous smex)
+ (ido-mode t)
+ (ido-everywhere t)
+ (setq ido-enable-flex-matching t)
+ (ido-ubiquitous-mode)
+ (setq ido-enable-last-directory-history nil
+ ido-record-commands nil
+ ido-max-work-directory-list 0
+ ido-max-work-file-list 0)
+ (setq smex-save-file (concat user-emacs-directory ".smex-items"))
+ (global-set-key (kbd "M-x") 'smex))
+
+(with-package* diminish
+ (diminish 'undo-tree-mode))
+
+(show-paren-mode 1)
+(global-linum-mode 1)
+
+;; chmod +x on save if shell script
+;; (add-hook 'after-save-hook
+;; 'executable-make-buffer-file-executable-if-script-p)
+
+;; see https://github.com/flycheck/flycheck
+;; for all the additional dependencies.
+(with-package* (flycheck flycheck-color-mode-line)
+ (setq flycheck-check-syntax-automatically (quote (save mode-enabled)))
+ ;; in case cabal isn't in path add path manually
+ ;; FIXME: don't do this always use -^
+ (setq flycheck-haskell-hlint-executable "~/.cabal/bin/hlint")
+ (global-flycheck-mode t)
+ (add-hook 'flycheck-mode-hook 'flycheck-color-mode-line-mode))
+
+(with-package magit
+ (define-key magit-status-mode-map (kbd "j") 'magit-goto-next-section)
+ (define-key magit-status-mode-map (kbd "k") 'magit-goto-previous-section)
+ (define-key magit-status-mode-map (kbd "n") 'magit-discard-item))
+
+;;;; general
+(setq tab-width 4)
+
+;;;; python
+;; dependencies: pip install jedi epc
+(with-package* jedi
+ (setq jedi:setup-keys t)
+ (setq jedi:complete-on-dot t)
+ (add-hook 'python-mode-hook 'jedi:setup))
+
+;;;; C
+(setq-default c-basic-offset 4)
+
+(add-hook 'prog-mode-hook
+ (lambda ()
+ (font-lock-add-keywords nil
+ '(("\\<\\(FIX\\(ME\\)?\\|TODO\\|\ HACK\\|REFACTOR\\|NOCOMMIT\\):"
+ 1 font-lock-warning-face t)))))
+
+;; highlight with-package*
+;; TODO: add-hook to emacs-lisp?
+(font-lock-add-keywords
+ 'emacs-lisp-mode
+ '(("(\\(with-package\\*?\\)\\(?:\\s-+(?\\([^()]+\\))?\\)?"
+ (1 'font-lock-keyword-face)
+ (2 'font-lock-constant-face nil t))))
+
+;; eval-and-replace
+(global-set-key (kbd "C-c C-e") 'eval-and-replace)
+
+;; Font size
+(define-key global-map (kbd "C-+") 'text-scale-increase)
+(define-key global-map (kbd "C--") 'text-scale-decrease)
+
+;; Show trailing spaces, set whitespace tabs to dim grey and delete trailing
+;; whitespaces on save.
+;; Note: this will break hard line breaks for markdown.
+;; TODO: Add exception for markdown-mode
+;; TODO: whitespace cleanup?
+;; (setq whitespace-style '(face tabs newline tab-mark)
+;; whitespace-line-column 80
+;; whitespace-tab '(:foreground "dim gray" :weight bold))
+;; (global-whitespace-mode t)
+;; (add-hook 'before-save-hook 'delete-trailing-whitespace)
+
+;; Marks the 81st column in a line.
+;; (column-marker-1 80)
+
+(setq custom-file (concat user-emacs-directory "custom-var.el"))
+(load custom-file)