;;; init.el --- Tom-Emacs Interface -*- lexical-binding: t; -*- ;; Copyright (C) 2018 Tom Willemse ;; Author: Tom Willemse ;; 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 . ;;; 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) (require 'package) (eval-and-compile (package-initialize)) ;;;; Dependencies (require 'counsel) (require 'destroy-trailing-whitespace) (require 'diff-hl) (require 'diminish) (require 'ivy) (require 'ivy-hydra) (require 'projectile) (require 'shackle) ;;;; Settings ;;; Put backup and auto save files in their own directories so they ;;; don't clutter the rest of the filesystem. (setq backup-directory-alist `((".*" . ,(concat user-emacs-directory "data/backup-files")))) (add-to-list 'auto-save-file-name-transforms `(".*" ,(concat user-emacs-directory "data/auto-save-files/") t) :append) (setq auto-save-list-file-prefix (concat user-emacs-directory "data/" "auto-save-list/.saves-")) (setq abbrev-file-name (concat user-emacs-directory "data/abbrev_defs")) (with-eval-after-load 'forge (setq forge-database-file (concat user-emacs-directory "data/forge-database.sqlite"))) (with-eval-after-load 'projectile (setq projectile-cache-file (concat user-emacs-directory "data/projectile.cache") projectile-known-projects-file (concat user-emacs-directory "data/projectile-bookmarks.eld"))) (with-eval-after-load 'tramp-cache (setq tramp-persistency-file-name (concat user-emacs-directory "data/tramp"))) (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) (setq-default truncate-lines t) (setq-default fill-column 80) (global-unset-key (kbd "C-z")) (defalias 'yes-or-no-p 'y-or-n-p) (show-paren-mode) (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 (concat user-emacs-directory "data/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 '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 (concat user-emacs-directory "data/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 (concat user-emacs-directory "data/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 '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 '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 'eshell (load "oni-eshell-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 'lui (load "oni-lui-init")) (with-eval-after-load 'magit (load "oni-magit-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 'slime (load "oni-slime-init")) (with-eval-after-load 'yasnippet (load "oni-yasnippet-init")) (with-eval-after-load 'rust-mode (load "oni-rust-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 '("\\.jsx\\'" . rjsx-mode)) (add-to-list 'auto-mode-alist '("\\.mbsyncrc\\'" . mbsync-conf-mode)) (add-to-list 'auto-mode-alist '("\\.msmtprc\\'" . msmtprc-mode)) (add-to-list 'auto-mode-alist '("\\.targets\\'" . nxml-mode)) (add-to-list 'auto-mode-alist '("\\.proj\\'" . nxml-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) (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 '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 '("msbuild" . "*.targets *.proj")) (add-hook 'before-save-hook 'time-stamp) (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