|
|
|
;;--------------------------------------------------------------------------------------
|
|
|
|
;;
|
|
|
|
;; EMACS Configuration file
|
|
|
|
;;
|
|
|
|
;;--------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
(require 'package)
|
|
|
|
|
|
|
|
;;--------------------------------------------------------------------------------------
|
|
|
|
;; Generic line numbering disabler
|
|
|
|
;;--------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
(defun nolinum ()
|
|
|
|
(linum-mode 0)
|
|
|
|
)
|
|
|
|
|
|
|
|
;;--------------------------------------------------------------------------------------
|
|
|
|
;; Hide menu bar (Opens up frame real estate in console mode)
|
|
|
|
;;--------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
(menu-bar-mode -1)
|
|
|
|
|
|
|
|
;;--------------------------------------------------------------------------------------
|
|
|
|
;; Hide Startup Message
|
|
|
|
;;--------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
(setq inhibit-startup-message t)
|
|
|
|
|
|
|
|
;;--------------------------------------------------------------------------------------
|
|
|
|
;; Always follow symbolic links to version controlled files
|
|
|
|
;;
|
|
|
|
;; I prefer this option because I generally only get this message when I edit
|
|
|
|
;; a dotfile under version control, and repeatedly typing "yes" is annoying.
|
|
|
|
;;--------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
(setq vc-follow-symlinks t)
|
|
|
|
|
|
|
|
;;--------------------------------------------------------------------------------------
|
|
|
|
;; Small fix for keyboard internationalization problems
|
|
|
|
;;--------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
(set-keyboard-coding-system nil)
|
|
|
|
|
|
|
|
;;--------------------------------------------------------------------------------------
|
|
|
|
;; Disable Splash Screen
|
|
|
|
;;--------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
(defvar Inhibit-Splash-Screen)
|
|
|
|
(setq Inhibit-Splash-Screen t)
|
|
|
|
|
|
|
|
;;--------------------------------------------------------------------------------------
|
|
|
|
;; Prefer UTF-8 For Buffers
|
|
|
|
;;--------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
(prefer-coding-system 'utf-8)
|
|
|
|
(set-terminal-coding-system 'utf-8)
|
|
|
|
|
|
|
|
(defun set-buffer-utf8 ()
|
|
|
|
(set-buffer-process-coding-system 'utf-8 'utf-8)
|
|
|
|
)
|
|
|
|
|
|
|
|
(add-hook 'eshell-mode-hook 'set-buffer-utf8)
|
|
|
|
|
|
|
|
;;--------------------------------------------------------------------------------------
|
|
|
|
;; Enable Org-mode and set agenda files
|
|
|
|
;;--------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
(require 'org)
|
|
|
|
|
|
|
|
;; Stuff all of the org files you want under ~/org and they will be loaded automatically
|
|
|
|
;; and have their TODO items accessible by typing C-c a t
|
|
|
|
(setq org-agenda-files '("~/org"))
|
|
|
|
(setq org-log-done t)
|
|
|
|
|
|
|
|
;;--------------------------------------------------------------------------------------
|
|
|
|
;; Prefer unix style line endings
|
|
|
|
;;--------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
(set-buffer-file-coding-system 'unix)
|
|
|
|
|
|
|
|
;;--------------------------------------------------------------------------------------
|
|
|
|
;; Enable auto-refresh to keep buffers up to date when git or another program
|
|
|
|
;; modifies them
|
|
|
|
;;--------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
(global-auto-revert-mode t)
|
|
|
|
|
|
|
|
;;--------------------------------------------------------------------------------------
|
|
|
|
;; IBuffer configurations (C-x C-b)
|
|
|
|
;;--------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
(setq ibuffer-saved-filter-groups
|
|
|
|
'(("default"
|
|
|
|
("Emacs Configuration" (or (filename . ".emacs.d")
|
|
|
|
(filename . "init.el")
|
|
|
|
(filename . "package.el")
|
|
|
|
(filename . "private.el")
|
|
|
|
(filename . "emacs.d")))
|
|
|
|
("Org" (or (mode . org-mode)
|
|
|
|
(filename . "OrgMode")))
|
|
|
|
("Magit" (name . "magit"))
|
|
|
|
("Help" (or (name . "\*Help\*")
|
|
|
|
(name . "\*Apropos\*")
|
|
|
|
(name . "\*info\*")))
|
|
|
|
("Dired" (mode . dired-mode))
|
|
|
|
;; Dev has groups for all languages you program in
|
|
|
|
("Dev" (or (mode . cc-mode)
|
|
|
|
(filename . ".c")
|
|
|
|
(filename . ".cpp")
|
|
|
|
(filename . ".hpp")
|
|
|
|
(filename . ".h")
|
|
|
|
(filename . ".java")
|
|
|
|
(filename . ".properties")
|
|
|
|
(filename . ".gradle")
|
|
|
|
(filename . ".am")
|
|
|
|
(mode . yaml-mode))
|
|
|
|
)
|
|
|
|
("Text" (or (filename . ".csv")
|
|
|
|
(filename . ".tsv")
|
|
|
|
(filename . ".txt")
|
|
|
|
(filename . ".log")
|
|
|
|
(filename . ".json")))
|
|
|
|
|
|
|
|
("Emacs" (or (name . "^\\*scratch\\*$")
|
|
|
|
(name . "^\\*Messages\\*$")))
|
|
|
|
("Gnus" (or (mode . message-mode)
|
|
|
|
(mode . bbdb-mode)
|
|
|
|
(mode . mail-mode)
|
|
|
|
(mode . gnus-group-mode)
|
|
|
|
(mode . gnus-summary-mode)
|
|
|
|
(mode . gnus-article-mode)
|
|
|
|
(name . "^\\.bbdb$")
|
|
|
|
(name . "^\\.newsrc-dribble")))
|
|
|
|
)))
|
|
|
|
|
|
|
|
;; Automatically keep buffers up to date and load the filter
|
|
|
|
(add-hook 'ibuffer-mode-hook
|
|
|
|
'(lambda ()
|
|
|
|
(ibuffer-auto-mode 1)
|
|
|
|
(ibuffer-switch-to-saved-filter-groups "default")))
|
|
|
|
|
|
|
|
;; Disable eager line numbering
|
|
|
|
(add-hook 'ibuffer-mode-hook 'nolinum)
|
|
|
|
|
|
|
|
(setq ibuffer-expert t)
|
|
|
|
|
|
|
|
(setq ibuffer-show-empty-filter-groups nil)
|
|
|
|
|
|
|
|
;;--------------------------------------------------------------------------------------
|
|
|
|
;; Enable MELPA
|
|
|
|
;;--------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
(add-to-list 'package-archives
|
|
|
|
'("melpa" . "https://melpa.org/packages/") t)
|
|
|
|
(when (< emacs-major-version 24)
|
|
|
|
;; For important compatibility libraries like cl-lib
|
|
|
|
(add-to-list 'package-archives '("gnu" . "https://elpa.gnu.org/packages/")))
|
|
|
|
|
|
|
|
(package-initialize)
|
|
|
|
|
|
|
|
;; This will force any out of date packages to update automatically
|
|
|
|
(when (not package-archive-contents)
|
|
|
|
(package-refresh-contents))
|
|
|
|
|
|
|
|
;;--------------------------------------------------------------------------------------
|
|
|
|
;; Install and load Packages
|
|
|
|
;;--------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
(load-file "~/.emacs.d/package.el")
|
|
|
|
|
|
|
|
;;--------------------------------------------------------------------------------------
|
|
|
|
;; Enable ParEdit for Emacs lisp modes
|
|
|
|
;;--------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
(autoload 'enable-paredit-mode "paredit" 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)
|
|
|
|
(add-hook 'clojure-mode-hook #'enable-paredit-mode)
|
|
|
|
|
|
|
|
;;--------------------------------------------------------------------------------------
|
|
|
|
;; handy editor stuff
|
|
|
|
;;--------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
(require 'ws-butler)
|
|
|
|
(ws-butler-global-mode t)
|
|
|
|
|
|
|
|
;; Comment this if you dont mind git diffs complaining about missing ending newlines.
|
|
|
|
(setq require-final-newline t)
|
|
|
|
|
|
|
|
;; Add new line if using C-n navigates to the end of the buffer
|
|
|
|
(setq next-line-add-newlines t)
|
|
|
|
|
|
|
|
(require 'whitespace)
|
|
|
|
(setq whitespace-style '(face lines-tail))
|
|
|
|
(add-hook 'prog-mode-hook 'whitespace-mode)
|
|
|
|
|
|
|
|
;;--------------------------------------------------------------------------------------
|
|
|
|
;; If python.el is loaded, change the rule column to 80 characters.
|
|
|
|
;;--------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
(eval-after-load "python"
|
|
|
|
'(progn
|
|
|
|
(setq whitespace-line-column 80)))
|
|
|
|
|
|
|
|
;;--------------------------------------------------------------------------------------
|
|
|
|
;; Expand region settings
|
|
|
|
;;--------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
(require 'expand-region)
|
|
|
|
(pending-delete-mode t) ; Selected region contents are replaced on typing
|
|
|
|
|
|
|
|
|
|
|
|
;;--------------------------------------------------------------------------------------
|
|
|
|
;; Line Numbering - Note: Might not look good with files with 10,000 or more lines
|
|
|
|
;;--------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
;; NOTE: Line numbers are toggled with C-s n
|
|
|
|
|
|
|
|
(defvar linum-format)
|
|
|
|
(setq linum-format "%4d \u2502")
|
|
|
|
|
|
|
|
;; TODO: Figure out a way to make linum-relative keep the same linum-mode styles
|
|
|
|
|
|
|
|
;;--------------------------------------------------------------------------------------
|
|
|
|
;; Hook framemove into windmove for seamless window to frame transitions
|
|
|
|
;;--------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
(setq framemove-hook-into-windmove t)
|
|
|
|
|
|
|
|
;;--------------------------------------------------------------------------------------
|
|
|
|
;; Highlight matching parentheses when cursor is over one
|
|
|
|
;;--------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
(show-paren-mode 1)
|
|
|
|
|
|
|
|
;;--------------------------------------------------------------------------------------
|
|
|
|
;; Ivy Configuration
|
|
|
|
;;--------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
(ivy-mode 1)
|
|
|
|
|
|
|
|
;(setq projectile-completion-system 'ivy)
|
|
|
|
(setq magit-complete-read-function 'ivy-completing-read)
|
|
|
|
(setq ivy-use-virtual-buffers t)
|
|
|
|
|
|
|
|
;;-------------------------------------------------------------------------------------
|
|
|
|
;; Use Grizzl with Projectile
|
|
|
|
;;-------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
(setq projectile-completion-system 'grizzl)
|
|
|
|
|
|
|
|
;;-------------------------------------------------------------------------------------
|
|
|
|
;; ZSH script detection
|
|
|
|
;;------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
(add-hook 'sh-mode-hook
|
|
|
|
(lambda ()
|
|
|
|
(if (string-match "\\.zsh$" buffer-file-name)
|
|
|
|
(sh-set-shell "zsh"))))
|
|
|
|
|
|
|
|
;;-------------------------------------------------------------------------------------
|
|
|
|
;; Enable and Configure `company-mode`
|
|
|
|
;;------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
(global-company-mode t)
|
|
|
|
(add-hook 'after-init-hook 'global-company-mode)
|
|
|
|
|
|
|
|
;;-------------------------------------------------------------------------------------
|
|
|
|
;; Alignment
|
|
|
|
;;-------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
(setq-default indent-tabs-mode nil)
|
|
|
|
(setq-default tab-width 2)
|
|
|
|
|
|
|
|
;; Make sure the tab key only indents (rather than also doing completion)
|
|
|
|
(setq tab-always-indent t)
|
|
|
|
|
|
|
|
;; Make return key also indent
|
|
|
|
(electric-indent-mode 1)
|
|
|
|
|
|
|
|
;;-------------------------------------------------------------------------------------
|
|
|
|
;; Flycheck
|
|
|
|
;;-------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
(add-hook 'after-init-hook #'global-flycheck-mode)
|
|
|
|
(with-eval-after-load 'flycheck
|
|
|
|
(setq-default flycheck-disabled-checkers '(emacs-lisp-checkdoc)))
|
|
|
|
|
|
|
|
;;-------------------------------------------------------------------------------------
|
|
|
|
;; Projectile Configuration
|
|
|
|
;;-------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
(projectile-global-mode)
|
|
|
|
|
|
|
|
;;-------------------------------------------------------------------------------------
|
|
|
|
;; Neotree Configuration
|
|
|
|
;;-------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
(setq neo-theme 'ascii)
|
|
|
|
(setq neo-vc-integration '(char))
|
|
|
|
(setq neo-persist-show t)
|
|
|
|
|
|
|
|
(add-hook 'neo-enter-hook 'redraw-display)
|
|
|
|
|
|
|
|
;;-------------------------------------------------------------------------------------
|
|
|
|
;; 2 Space Region Indenting Functions
|
|
|
|
;;-------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
(defun my-indent-region (N)
|
|
|
|
(interactive "p")
|
|
|
|
(if (use-region-p)
|
|
|
|
(progn (indent-rigidly (region-beginning) (region-end) (* N 2))
|
|
|
|
(setq deactivate-mark nil))
|
|
|
|
(self-insert-command N)))
|
|
|
|
|
|
|
|
(defun my-unindent-region (N)
|
|
|
|
(interactive "p")
|
|
|
|
(if (use-region-p)
|
|
|
|
(progn (indent-rigidly (region-beginning) (region-end) (* N -2))
|
|
|
|
(setq deactivate-mark nil))
|
|
|
|
(self-insert-command N)))
|
|
|
|
|
|
|
|
;;--------------------------------------------------------------------------------------
|
|
|
|
;; CC-Mode Settings
|
|
|
|
;;-------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
;; Keep character limit to 80
|
|
|
|
(eval-after-load "c-mode"
|
|
|
|
'(progn
|
|
|
|
(setq whitespace-line-column 80)))
|
|
|
|
|
|
|
|
(eval-after-load "c++-mode"
|
|
|
|
'(progn
|
|
|
|
(setq whitespace-line-column 80)))
|
|
|
|
|
|
|
|
|
|
|
|
(setq-default c-basic-offset 4) ;; NASA Style Guide says 4 spaces is optimal
|
|
|
|
(setq-default c++-basic-offset 4) ;;
|
|
|
|
(setq-default c-default-style "linux") ;; Use Linux code style
|
|
|
|
(setq-default c++-default-style "linux") ;;
|
|
|
|
|
|
|
|
(add-hook 'c-mode-hook 'irony-mode)
|
|
|
|
(add-hook 'c++-mode-hook 'irony-mode)
|
|
|
|
|
|
|
|
;; Backend for Company
|
|
|
|
(defun my-c-mode-hook ()
|
|
|
|
(eval-after-load 'company
|
|
|
|
'(add-to-list 'company-backends 'company-irony)))
|
|
|
|
|
|
|
|
(defun my-c++-mode-hook ()
|
|
|
|
(eval-after-load 'company
|
|
|
|
'(add-to-list 'company-backends 'company-irony)))
|
|
|
|
|
|
|
|
(add-hook 'c-mode-hook 'my-c-mode-hook)
|
|
|
|
(add-hook 'c++-mode-hook 'my-c++-mode-hook)
|
|
|
|
|
|
|
|
;; I use meson mostly for C/C++ development so this hook lives here
|
|
|
|
(add-hook 'meson-mode-hook 'company-mode)
|
|
|
|
|
|
|
|
;;--------------------------------------------------------------------------------------
|
|
|
|
;; Java Mode Setup
|
|
|
|
;;-------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
(defun my-java-mode-hook ()
|
|
|
|
(require 'eclim)
|
|
|
|
(eclim-mode t)
|
|
|
|
(require 'company-emacs-eclim)
|
|
|
|
(company-emacs-eclim-setup)
|
|
|
|
)
|
|
|
|
|
|
|
|
(add-hook 'java-mode-hook 'my-java-mode-hook)
|
|
|
|
|
|
|
|
;;-------------------------------------------------------------------------------------
|
|
|
|
;; Key Bindings
|
|
|
|
;;-------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
;; Try to force alt to be the meta key
|
|
|
|
(setq x-alt-keysym 'meta)
|
|
|
|
|
|
|
|
;; Neotree
|
|
|
|
(global-set-key [f8] 'neotree-toggle)
|
|
|
|
|
|
|
|
(global-set-key (kbd "C-d") nil)
|
|
|
|
(global-set-key (kbd "C-m") nil)
|
|
|
|
(global-set-key (kbd "RET") nil)
|
|
|
|
|
|
|
|
;; Unbind C-s from Isearch to make room for swiper
|
|
|
|
(global-set-key (kbd "C-s") nil)
|
|
|
|
|
|
|
|
(global-set-key (kbd "C-x C-b") nil)
|
|
|
|
|
|
|
|
(global-set-key (kbd "C-x C-f") nil)
|
|
|
|
|
|
|
|
(global-set-key (kbd "C-c r") nil)
|
|
|
|
|
|
|
|
(global-set-key (kbd "C-c n") nil)
|
|
|
|
|
|
|
|
(global-set-key (kbd "C-h C-k") nil)
|
|
|
|
|
|
|
|
;; Pane navigation
|
|
|
|
(global-set-key (kbd "M-h") 'windmove-left)
|
|
|
|
(global-set-key (kbd "M-j") 'windmove-down)
|
|
|
|
(global-set-key (kbd "M-k") 'windmove-up)
|
|
|
|
(global-set-key (kbd "M-l") 'windmove-right)
|
|
|
|
|
|
|
|
;; Delete surrounding
|
|
|
|
(global-set-key (kbd "C-d s") 'delete-pair)
|
|
|
|
|
|
|
|
;; Git utility
|
|
|
|
(global-set-key (kbd "C-x g s") 'magit-status)
|
|
|
|
(global-set-key (kbd "C-x g b") 'magit-blame-popup)
|
|
|
|
(global-set-key (kbd "C-x g p") 'magit-dispatch-popup)
|
|
|
|
(global-set-key (kbd "C-x g f") 'magit-file-popup)
|
|
|
|
|
|
|
|
;; Fix RET
|
|
|
|
(global-set-key (kbd "RET") 'newline-and-indent)
|
|
|
|
|
|
|
|
;; Ivy Bindings
|
|
|
|
(global-set-key (kbd "C-x C-f") 'counsel-find-file)
|
|
|
|
|
|
|
|
;; Swiper
|
|
|
|
(global-set-key (kbd "C-s") 'swiper)
|
|
|
|
|
|
|
|
;; Better M-x
|
|
|
|
;;(global-set-key (kbd "M-x") 'counsel-M-x)
|
|
|
|
|
|
|
|
;; IBuffer
|
|
|
|
(global-set-key (kbd "C-x C-b") 'ibuffer)
|
|
|
|
|
|
|
|
;; Line number toggle
|
|
|
|
(global-set-key (kbd "C-c n") 'linum-mode)
|
|
|
|
|
|
|
|
;; Relative line numbering
|
|
|
|
(global-set-key (kbd "C-c r") 'linum-relative-toggle)
|
|
|
|
|
|
|
|
;; Expand region
|
|
|
|
(global-set-key (kbd "C-h C-k") 'er/expand-region)
|
|
|
|
|
|
|
|
;; Org mode specific keybinds
|
|
|
|
(global-set-key (kbd "C-c l") 'org-store-link)
|
|
|
|
(global-set-key (kbd "C-c a") 'org-agenda)
|
|
|
|
|
|
|
|
;; More convenient region indenting
|
|
|
|
(global-set-key (kbd "M->") 'my-indent-region)
|
|
|
|
(global-set-key (kbd "M-<") 'my-unindent-region)
|
|
|
|
|
|
|
|
;;--------------------------------------------------------------------------------------
|
|
|
|
;; Theme
|
|
|
|
;;--------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
(set-frame-parameter nil 'background-mode 'dark)
|
|
|
|
(set-terminal-parameter nil 'background-mode 'dark)
|
|
|
|
(load-theme 'material t)
|
|
|
|
|
|
|
|
;; 10 pt font
|
|
|
|
(set-frame-font "inconsolata")
|
|
|
|
(set-face-attribute 'default nil :height 100)
|
|
|
|
|
|
|
|
(powerline-center-theme)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(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.
|
|
|
|
'(package-selected-packages
|
|
|
|
(quote
|
|
|
|
(counsel zenburn-theme wrap-region swiper stylus-mode smex slim-mode scss-mode sass-mode rust-mode rspec-mode robe rainbow-delimiters projectile powerline paredit neotree magit livescript-mode linum-relative less-css-mode jsx-mode js2-mode jade-mode grizzl golden-ratio gitignore-mode flymake-ruby flycheck-rust flycheck-pos-tip flycheck-haskell flycheck-clojure fill-column-indicator feature-mode expand-region esh-help enh-ruby-mode coffee-mode circe ag ac-inf-ruby))))
|
|
|
|
(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.
|
|
|
|
)
|