Tom Willemse
cb8e636045
Temporarily remove Font Awesome from being used since the glyphs show up too big and don’t seem to want to be resised by my instructions, or replaced by a different font for that matter.
371 lines
11 KiB
EmacsLisp
371 lines
11 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:
|
|
|
|
(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))
|
|
|
|
(mapc (lambda (d) (add-to-list 'load-path d))
|
|
(directory-files
|
|
(format "%svendor-lisp/" load-directory) t "^[^.]"))
|
|
|
|
(add-to-list 'load-path (format "%ssite-lisp/" load-directory))
|
|
|
|
(let ((loaddefs (format "%ssite-lisp/site-autoloads.el" load-directory)))
|
|
(when (file-exists-p loaddefs)
|
|
(load loaddefs)))
|
|
|
|
(if (eq system-type 'windows-nt)
|
|
(require 'oni-windows-nt))))
|
|
|
|
(require 'oni-helpers)
|
|
|
|
(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))
|
|
|
|
(eval-when-compile
|
|
(let* ((not-installed (seq-remove 'package-installed-p
|
|
package-selected-packages))
|
|
(available (seq-filter (lambda (p)
|
|
(assq p package-archive-contents))
|
|
not-installed))
|
|
(difference (- (length not-installed) (length available))))
|
|
(when (> difference 0)
|
|
(silently "Refresh packages"
|
|
(package-refresh-contents)))
|
|
(when available
|
|
(mapc (lambda (p) (package-install p t)) available))))
|
|
|
|
(add-hook 'package-menu-mode-hook 'hl-line-mode)
|
|
|
|
(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)
|
|
|
|
(require 'destroy-trailing-whitespace)
|
|
(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)
|
|
|
|
(require 'diminish)
|
|
|
|
(require 'ivy)
|
|
(require 'ivy-hydra)
|
|
|
|
(diminish 'ivy-mode)
|
|
|
|
(ivy-mode)
|
|
|
|
(require 'counsel)
|
|
|
|
(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)
|
|
|
|
(require 'shackle)
|
|
(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)
|
|
|
|
;; (with-eval-after-load 'autorevert
|
|
;; (diminish 'auto-revert-mode
|
|
;; (concat " " (propertize (char-to-string #xf3a8)
|
|
;; 'face '(:family "Ionicons")))))
|
|
|
|
;; 'auto-fill-function
|
|
;; (propertize (concat " " (char-to-string #xf149))
|
|
;; 'face '(:family "Font Awesome" :height 0.75)))
|
|
|
|
(require 'diff-hl)
|
|
(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))
|
|
|
|
(diminish 'isearch-mode
|
|
(concat " " (propertize (char-to-string #xf4a4)
|
|
'face '(:family "Ionicons"))))
|
|
|
|
(setq projectile-known-projects-file
|
|
(oni:data-location "projectile-bookmarks.eld"))
|
|
|
|
(require 'projectile)
|
|
|
|
(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)
|
|
|
|
(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 'slime
|
|
(setq slime-lisp-implementations
|
|
'((sbcl ("sbcl" "--noinform") :coding-system utf-8-unix)
|
|
(clisp ("clisp") :coding-system utf-8-unix)))
|
|
(setq slime-default-lisp 'sbcl)
|
|
(slime-setup '(slime-fancy slime-company)))
|
|
|
|
(with-eval-after-load 'js (load "oni-js-mode-init"))
|
|
(with-eval-after-load 'php-mode (load "oni-php-mode-init"))
|
|
(with-eval-after-load 'sh-mode (load "oni-sh-mode-init"))
|
|
(with-eval-after-load 'css-mode (load "oni-css-mode-init"))
|
|
(with-eval-after-load 'elisp-mode (load "oni-emacs-lisp-mode-init"))
|
|
(with-eval-after-load 'scheme (load "oni-scheme-init"))
|
|
(with-eval-after-load 'compile (load "oni-compilation-init"))
|
|
(with-eval-after-load 'cc-mode (load "oni-java-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 'shackle (load "oni-shackle-init"))
|
|
(with-eval-after-load 'align (load "oni-align"))
|
|
(with-eval-after-load 'yasnippet (load "oni-yasnippet-init"))
|
|
|
|
(add-hook 'ielm-mode-hook 'paredit-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)
|
|
|
|
(with-eval-after-load 'cider
|
|
(setq cider-repl-pop-to-buffer-on-connect t))
|
|
|
|
(setq cider-show-error-buffer t
|
|
cider-auto-select-error-buffer t)
|
|
|
|
(setq cider-repl-history-file
|
|
(oni:data-location "cider-history"))
|
|
|
|
(setq cider-repl-wrap-history t)
|
|
|
|
(add-hook 'cider-repl-mode-hook 'paredit-mode)
|
|
|
|
(add-hook 'c-mode-hook 'electric-pair-local-mode)
|
|
|
|
(add-hook 'c-mode-hook 'electric-indent-local-mode)
|
|
|
|
(add-hook 'lisp-mode-hook 'paredit-mode)
|
|
|
|
(add-hook 'lisp-mode-hook 'rainbow-delimiters-mode)
|
|
|
|
(add-hook 'lisp-mode-hook 'company-mode)
|
|
|
|
(with-eval-after-load 'js2-mode (load "oni-js2-init"))
|
|
|
|
(add-hook 'html-mode-hook 'electric-pair-local-mode)
|
|
|
|
(with-eval-after-load 'cmake-mode (load "oni-cmake-init"))
|
|
|
|
(with-eval-after-load 'cc-mode (load "oni-cpp-init"))
|
|
|
|
(with-eval-after-load 'dired (load "oni-dired-init"))
|
|
|
|
(with-eval-after-load 'magit (load "oni-magit-init"))
|
|
|
|
(with-eval-after-load 'ediff (load "oni-ediff-init"))
|
|
|
|
(with-eval-after-load 'eshell (load "oni-eshell-init"))
|
|
|
|
(with-eval-after-load 'slack (load "oni-slack-init"))
|
|
|
|
(with-eval-after-load 'circe (load "oni-circe-init"))
|
|
|
|
(with-eval-after-load 'lui (load "oni-lui-init"))
|
|
|
|
(with-eval-after-load 'jabber (load "oni-jabber-init"))
|
|
|
|
(with-eval-after-load 'gnus (load "oni-gnus-init"))
|
|
|
|
(with-eval-after-load 'org (load "oni-org-init"))
|
|
|
|
(with-eval-after-load 'elec-pair (load "oni-elec-pair-init"))
|
|
|
|
(with-eval-after-load 'flycheck (load "oni-flycheck-init"))
|
|
|
|
(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"))
|
|
|
|
(setq custom-file (concat user-emacs-directory "custom.el"))
|
|
(load custom-file t)
|
|
|
|
(provide 'init)
|
|
;;; init.el ends here
|