Browse Source

Refactor emacs dotfile

Taylor Bockman 5 years ago
parent
commit
29480ae003
  1. 389
      dotfiles/emacs.d/init.el
  2. 12
      dotfiles/emacs.d/package.el

389
dotfiles/emacs.d/init.el

@ -1,30 +1,16 @@
;;--------------------------------------------------------------------------------------
;;
;; 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)
;; Turn off the startup screen
;;--------------------------------------------------------------------------------------
(menu-bar-mode -1)
(setq inhibit-startup-screen t)
;;--------------------------------------------------------------------------------------
;; Hide Startup Message
;; Display battery life in modeline
;;--------------------------------------------------------------------------------------
(setq inhibit-startup-message t)
(display-battery-mode 1)
;;--------------------------------------------------------------------------------------
;; Always follow symbolic links to version controlled files
@ -36,32 +22,6 @@
(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
;;--------------------------------------------------------------------------------------
@ -147,6 +107,7 @@
(setq ibuffer-show-empty-filter-groups nil)
;;--------------------------------------------------------------------------------------
;; Enable MELPA
;;--------------------------------------------------------------------------------------
@ -164,341 +125,56 @@
(package-refresh-contents))
;;--------------------------------------------------------------------------------------
;; Install and load Packages
;; Theming
;;--------------------------------------------------------------------------------------
(load-file "~/.emacs.d/package.el")
;;--------------------------------------------------------------------------------------
;; Jedi Completion for Python
;;--------------------------------------------------------------------------------------
(add-hook 'python-mode-hook 'jedi:setup)
(setq jedi:complete-on-dot t)
(defun my/python-mode-hook ()
(add-to-list 'company-backends 'company-jedi))
(add-hook 'python-mode-hook 'my/python-mode-hook)
(load-theme 'material t)
;;--------------------------------------------------------------------------------------
;; Ensure Shell Variables Look the Same in Emacs (OS X and Linux)
;; Default modes
;;--------------------------------------------------------------------------------------
(when (memq window-system '(mac ns x))
(exec-path-from-shell-initialize))
;;--------------------------------------------------------------------------------------
;; Enable ParEdit for Emacs lisp modes
;;--------------------------------------------------------------------------------------
(ivy-mode 1)
(autoload 'enable-paredit-mode "paredit" t)
;; Enable paredit for lisp
(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)
(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)))
(require 'rainbow-delimiters)
;;--------------------------------------------------------------------------------------
;; Expand region settings
;;--------------------------------------------------------------------------------------
(require 'expand-region)
(pending-delete-mode t) ; Selected region contents are replaced on typing
(add-hook 'clojure-mode-hook 'rainbow-delimiters-mode)
(add-hook 'lisp-mode-hook 'rainbow-delimiters-mode)
(add-hook 'scheme-mode-hook 'rainbow-delimiters-mode)
(add-hook 'emacs-lisp-mode-hook 'rainbow-delimiters-mode)
;; Only enable aggressive indent on lisp-likes
(add-hook 'emacs-lisp-mode-hook #'aggressive-indent-mode)
(add-hook 'lisp-mode-hook #'aggressive-indent-mode)
(add-hook 'scheme-mode-hook #'aggressive-indent-mode)
(add-hook 'clojure-mode-hook #'aggressive-indent-mode)
;;--------------------------------------------------------------------------------------
;; Line Numbering - Note: Might not look good with files with 10,000 or more lines
;; Save hooks
;;--------------------------------------------------------------------------------------
;; NOTE: Line numbers are toggled with C-c n
(defvar linum-format)
(setq linum-format "%4d \u2502")
;; TODO: Figure out a way to make linum-relative keep the same linum-mode styles
(add-hook 'before-save-hook 'delete-trailing-whitespace)
;;--------------------------------------------------------------------------------------
;; Hook framemove into windmove for seamless window to frame transitions
;; Keybinds
;;--------------------------------------------------------------------------------------
(setq framemove-hook-into-windmove t)
(global-set-key "\C-s" 'swiper)
;;--------------------------------------------------------------------------------------
;; 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)
(defun company/python-mode-hook ()
(add-to-list 'company-backends 'company-jedi))
(add-hook 'python-mode-hook 'company/python-mode-hook)
;;-------------------------------------------------------------------------------------
;; 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 2) ;; Default 2 spaces
(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)
)
(eval-after-load "java-mode"
'(progn
setq whitespace-line-column 120))
(add-hook 'java-mode-hook 'my-java-mode-hook)
;;-------------------------------------------------------------------------------------
;; General Editor Utility
;;-------------------------------------------------------------------------------------
(autopair-global-mode)
;;-------------------------------------------------------------------------------------
;; 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") 'delete-char)
(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-h C-k") nil)
;; Pane navigation
;; Adjusted 8/4/2019 to move to arrow keys
;; Vim is good for Vim but since there is no stigma to arrow
;; keys in Emacs, why not use them?
(global-set-key (kbd "M-<left>") 'windmove-left)
(global-set-key (kbd "M-<down>") 'windmove-down)
(global-set-key (kbd "M-<up>") 'windmove-up)
(global-set-key (kbd "M-<right>") 'windmove-right)
;; 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 [f9] 'linum-mode)
;; 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
;; Install and load Packages
;;--------------------------------------------------------------------------------------
(set-frame-parameter nil 'background-mode 'dark)
(set-terminal-parameter nil 'background-mode 'dark)
(load-theme 'material t)
;; 12 pt font
(set-frame-font "inconsolata")
(set-face-attribute 'default nil :height 120)
(powerline-center-theme)
(load-file "~/.emacs.d/package.el")
(custom-set-variables
@ -508,10 +184,19 @@
;; If there is more than one, they won't work right.
'(package-selected-packages
(quote
(counsel material-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))))
(projectile smex grizzl flycheck-pos-tip flycheck material-theme expand-region wrap-region rainbow-delimiters powerline linum-relative golden-ratio fill-column-indicator autopair exec-path-from-shell ws-butler yaml-mode python-mode protobuf-mode paredit nasm-mode meson-mode markdown-mode magit gradle-mode gitignore-mode feature-mode counsel company-jedi jedi-core company-emacs-eclim company-irony company ag)))
;; Not technically a mode but mode enough. This forces emacs to ident common lisp
;; like common lisp instead of like emacs lisp, which has unlimited else clauses in
;; the if statement (implicit progn) and as such indents it funny.
'(lisp-indent-function 'common-lisp-indent-function))
(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.
)
;; Autoload the indent function
(autoload 'common-lisp-indent-function "cl-indent" "Common Lisp indent.")

12
dotfiles/emacs.d/package.el

@ -35,10 +35,6 @@
yaml-mode
;;;;;;;;;;;;;;;;;;;;
;; Navigation
neotree
;;;;;;;;;;;;;
;; Cleanup
ws-butler
;;;;;;;;;;
@ -49,6 +45,9 @@
;; Editing Utility
autopair
;; Keeps things indented even when you don't want it to
aggressive-indent
;;;;;;;;;;;;;;;;;;
;; UI
@ -57,7 +56,6 @@
linum-relative
powerline
rainbow-delimiters
zenburn-theme
wrap-region
expand-region
wrap-region
@ -89,7 +87,3 @@
(package-install p))))

Loading…
Cancel
Save