Tom Willemse
c5e88e21bc
I’m trying out a new system of maintaining my Emacs configuration, which entails making a bunch of custom libraries. The version for these libraries should be exactly the time stamp from when they were saved, so they always update properly.
334 lines
10 KiB
EmacsLisp
334 lines
10 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 MELPA because it's the biggest package repository for Emacs.
|
|
(add-to-list 'package-archives
|
|
'("melpa" . "https://melpa.org/packages/"))
|
|
;; Add the Org package archive to be able to install the bleeding
|
|
;; edge Org mode.
|
|
(add-to-list 'package-archives
|
|
'("org" . "http://orgmode.org/elpa/"))
|
|
;; Add my personal package archive so I can upload custom libraries
|
|
;; and stuff there.
|
|
(add-to-list 'package-archives
|
|
'("oni" . "https://ryuslash.org/elpa/"))
|
|
(package-initialize))
|
|
|
|
(add-hook 'package-menu-mode-hook 'hl-line-mode)
|
|
|
|
(with-eval-after-load 'package (require 'oni-package-x))
|
|
|
|
;;;; 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"))
|
|
(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 '("\\.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-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)
|
|
|
|
(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-hook 'before-save-hook 'time-stamp)
|
|
|
|
(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"))
|
|
(add-to-list 'grep-files-aliases '("msbuild" . "*.targets *.proj"))
|
|
|
|
(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
|