dotfiles/emacs/.emacs.d/init.el
Tom Willemse a298dfcb93 Remove any mention of special icons
If the icons aren’t set up correctly they make Emacs incredibly slow.
And even when they are set up correctly, it doesn’t help performance
on Windows.
2018-09-12 22:08:00 -07:00

320 lines
9.7 KiB
EmacsLisp

;;; init.el --- Tom-Emacs Interface -*- lexical-binding: t; -*-
;; Copyright (C) 2018 Tom Willemse
;; Author: Tom Willemse <tom@ryuslash.org>
;; Keywords: local
;; This program is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with this program. If not, see <http://www.gnu.org/licenses/>.
;;; Commentary:
;; This is my Emacs configuration. It has gone through many iterations
;; before and may yet go through many more iterations.
;;; Code:
;;;; Load path and autoloads
(eval-and-compile
(let ((load-directory
(file-name-directory
(or load-file-name byte-compile-current-file))))
(add-to-list 'load-path (format "%sinit/" load-directory))
(add-to-list 'load-path (format "%ssite-lisp/" load-directory))
(add-to-list 'load-path (format "%sos-lisp/" load-directory))
(mapc (lambda (d) (add-to-list 'load-path d))
(directory-files
(format "%svendor-lisp/" load-directory) t "^[^.]"))))
(load "oni-site-autoloads" :noerror :nomessage)
;;;; Package
(require 'package)
(eval-and-compile
(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/")))
(eval-and-compile
(add-to-list 'package-archives '("org" . "http://orgmode.org/elpa/")))
(eval-and-compile (package-initialize))
(add-hook 'package-menu-mode-hook 'hl-line-mode)
;;;; Dependencies
(require 'counsel)
(require 'destroy-trailing-whitespace)
(require 'diff-hl)
(require 'diminish)
(require 'ivy)
(require 'ivy-hydra)
(require 'oni-helpers)
(require 'projectile)
(require 'shackle)
;;;; Settings
(setq backup-directory-alist
`((".*" . ,(oni:data-location "backup-files/"))))
(add-to-list 'auto-save-file-name-transforms
`(".*" ,(oni:data-location "auto-save-files/") t) :append)
(setq auto-save-list-file-prefix
(oni:data-location "auto-save-list/.saves-"))
(setq delete-old-versions t)
(setq kept-new-versions 20)
(setq kept-old-versions 20)
(setq vc-make-backup-files t)
(setq version-control t)
(global-set-key (kbd "C-M-SPC") 'er/expand-region)
(global-set-key (kbd "M-+") 'mc/mark-next-like-this)
(global-set-key (kbd "C-c (") 'embrace-commander)
(global-set-key (kbd "C-c o") 'oni-hydra-org/body)
(global-set-key (kbd "C-c v") 'oni-hydra-magit/body)
(global-set-key (kbd "C-x f") 'ffap)
(global-set-key (kbd "C-x C-b") 'ibuffer)
(global-destroy-trailing-whitespace-mode)
(setq require-final-newline t)
(setq-default indent-tabs-mode nil)
(setq-default tab-width 4)
(setq sentence-end-double-space nil)
(setq inhibit-startup-screen t)
(add-to-list 'default-frame-alist '(font . "Fantasque Sans Mono-15"))
(add-to-list 'default-frame-alist '(internal-border-width . 15))
(menu-bar-mode -1)
(tool-bar-mode -1)
(scroll-bar-mode -1)
(setq-default cursor-type '(bar . 2))
(setq-default cursor-in-non-selected-windows 'box)
(setq-default truncate-lines t)
(global-unset-key (kbd "C-z"))
(defalias 'yes-or-no-p 'y-or-n-p)
(show-paren-mode)
(add-to-list 'custom-theme-load-path
(concat user-emacs-directory "vendor-lisp/yoshi-theme"))
(load-theme 'yoshi :no-confirm)
(diminish 'ivy-mode)
(ivy-mode)
(setq counsel-find-file-ignore-regexp
(rx (or (and bos ".")
(and ".zwc" eos))))
(counsel-mode)
(diminish 'counsel-mode)
(eval-when-compile (require 'bookmark))
(setq bookmark-default-file (oni:data-location "bookmarks"))
(setq user-full-name "Tom Willemse"
user-mail-address "tom@ryuslash.org")
(eval-when-compile (require 'browse-url))
(with-eval-after-load 'browse-url
(setq browse-url-browser-function 'browse-url-firefox))
(add-hook 'minibuffer-setup-hook 'electric-pair-local-mode)
(shackle-mode)
(with-eval-after-load 'shr (load "oni-shr-init"))
(with-eval-after-load 'company (load "oni-company-init"))
(with-eval-after-load 'paredit
(diminish 'paredit-mode))
(electric-indent-mode -1)
(defun oni:switch-newline-keys ()
"Switch the C-j and RET keys in the local buffer."
(if electric-indent-mode
(progn
(local-set-key (kbd "C-j") 'newline)
(local-set-key (kbd "RET") 'electric-newline-and-maybe-indent))
(local-unset-key (kbd "C-j"))
(local-unset-key (kbd "RET"))))
(add-hook 'electric-indent-local-mode-hook #'oni:switch-newline-keys)
(global-diff-hl-mode)
(blink-cursor-mode -1)
(defun oni:with-diff-hl-p4-args (orig-fun &rest args)
"Add Perforce-specific command-line arguments to `diff-hl-mode'.
ORIG-FUN is the function being wrapped, ARGS are the arguments specified"
(let ((p4-lowlevel-diff-switches '("-du0")))
(apply orig-fun args)))
(with-eval-after-load 'vc-p4
(add-function :around (symbol-function 'diff-hl-changes-buffer)
#'oni:with-diff-hl-p4-args))
(setq projectile-known-projects-file
(oni:data-location "projectile-bookmarks.eld"))
(with-eval-after-load 'projectile
(setq projectile-mode-line
'(:eval
(if (file-remote-p default-directory)
" P"
(let ((name (projectile-project-name)))
(if (string= "-" name)
""
(format " P[%s]" name)))))))
(setq projectile-cache-file
(oni:data-location "projectile.cache"))
(projectile-mode)
(define-key projectile-mode-map (kbd "C-c p") 'projectile-command-map)
(setq projectile-completion-system 'ivy)
(add-to-list 'projectile-project-root-files "yarn.lock")
(add-to-list 'projectile-project-root-files "fabfile.py")
;; (with-eval-after-load 'server
;; (diminish 'server-buffer-clients
;; (propertize (concat " " (char-to-string #xf233))
;; 'face '(:family "Font Awesome" :height 0.75))))
(with-eval-after-load 'cider (load "oni-cider-init"))
(with-eval-after-load 'align (load "oni-align"))
(with-eval-after-load 'cc-mode (load "oni-cpp-init"))
(with-eval-after-load 'circe (load "oni-circe-init"))
(with-eval-after-load 'cmake-mode (load "oni-cmake-init"))
(with-eval-after-load 'compile (load "oni-compilation-init"))
(with-eval-after-load 'css-mode (load "oni-css-mode-init"))
(with-eval-after-load 'dired (load "oni-dired-init"))
(with-eval-after-load 'ediff (load "oni-ediff-init"))
(with-eval-after-load 'elec-pair (load "oni-elec-pair-init"))
(with-eval-after-load 'elisp-mode (load "oni-emacs-lisp-mode-init"))
(with-eval-after-load 'eshell (load "oni-eshell-init"))
(with-eval-after-load 'flycheck (load "oni-flycheck-init"))
(with-eval-after-load 'gnus (load "oni-gnus-init"))
(with-eval-after-load 'jabber (load "oni-jabber-init"))
(with-eval-after-load 'js (load "oni-js-mode-init"))
(with-eval-after-load 'js2-mode (load "oni-js2-init"))
(with-eval-after-load 'lui (load "oni-lui-init"))
(with-eval-after-load 'magit (load "oni-magit-init"))
(with-eval-after-load 'org (load "oni-org-init"))
(with-eval-after-load 'php-mode (load "oni-php-mode-init"))
(with-eval-after-load 'python-mode (load "oni-python-init"))
(with-eval-after-load 'ruby-mode (load "oni-ruby-init"))
(with-eval-after-load 'scheme (load "oni-scheme-init"))
(with-eval-after-load 'sh-mode (load "oni-sh-mode-init"))
(with-eval-after-load 'shackle (load "oni-shackle-init"))
(with-eval-after-load 'slack (load "oni-slack-init"))
(with-eval-after-load 'slime (load "oni-slime-init"))
(with-eval-after-load 'yasnippet (load "oni-yasnippet-init"))
(add-hook 'ielm-mode-hook 'paredit-mode)
(add-hook 'prog-mode-hook 'goto-address-prog-mode)
(autoload 'mbsync-conf-mode "mbsync-conf-mode"
"Major mode for editing mbsync configuration files."
:interactive)
(autoload 'msmtprc-mode "msmtprc-mode"
"Major mode for editing msmtp configuration files."
:interactive)
(add-to-list 'auto-mode-alist '("\\.blade\\.php\\'" . web-mode))
(add-to-list 'auto-mode-alist '("\\.inc\\'" . php-mode))
(add-to-list 'auto-mode-alist '("\\.js\\'" . js2-mode))
(add-to-list 'auto-mode-alist '("\\.jsx\\'" . rjsx-mode))
(add-to-list 'auto-mode-alist '("\\.mbsyncrc\\'" . mbsync-conf-mode))
(add-to-list 'auto-mode-alist '("\\.module\\'" . php-mode))
(add-to-list 'auto-mode-alist '("\\.msmtprc\\'" . msmtprc-mode))
(add-hook 'git-commit-mode-hook 'electric-quote-local-mode)
(add-hook 'makefile-mode-hook 'whitespace-only-tabs-mode)
(add-hook 'makefile-mode-hook 'electric-pair-local-mode)
(with-eval-after-load 'clojure-mode
(require 'clojure-mode-extra-font-locking))
(add-hook 'clojure-mode-hook 'paredit-mode)
(add-hook 'clojure-mode-hook 'rainbow-delimiters-mode)
(eval-when-compile (require 'inf-lisp))
(defun oni:clojure-set-inferior-lisp ()
(setq inferior-lisp-program "lein repl"))
(add-hook 'clojure-mode-hook 'oni-clojure-add-font-lock)
(add-hook 'clojure-mode-hook 'oni-clojure-add-indent)
(add-hook 'c-mode-hook 'electric-pair-local-mode)
(add-hook 'c-mode-hook 'electric-indent-local-mode)
(add-hook 'c-mode-hook 'flycheck-mode)
(add-hook 'c-mode-hook 'fci-mode)
(add-hook 'lisp-mode-hook 'paredit-mode)
(add-hook 'lisp-mode-hook 'rainbow-delimiters-mode)
(add-hook 'lisp-mode-hook 'company-mode)
(add-hook 'html-mode-hook 'electric-pair-local-mode)
(add-to-list 'grep-files-aliases '("js" . "*.js *.jsx *.json"))
(add-to-list 'grep-files-aliases '("css" . "*.css *.less *.sass *.scss"))
(add-to-list 'grep-files-aliases '("php" . "*.php *.inc *.module"))
(if (eq system-type 'windows-nt)
(require 'oni-windows-nt))
(setq custom-file (concat user-emacs-directory "custom.el"))
(load custom-file t)
(provide 'init)
;;; init.el ends here