dotfiles/emacs/.emacs.d/init.el

215 lines
6.1 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)
(require 'package)
(eval-and-compile (package-initialize))
;;;; Dependencies
(require 'counsel)
(require 'destroy-trailing-whitespace)
(require 'diminish)
(require 'ivy)
(require 'ivy-hydra)
;;;; 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 '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-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)
(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)
(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)
(setq electric-pair-skip-whitespace 'chomp)
;; (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 'scheme (load "oni-scheme-init"))
(with-eval-after-load 'sh-mode (load "oni-sh-mode-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 '("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